diff --git a/compiler/ccgexprs.nim b/compiler/ccgexprs.nim index 564d1fd366..2b26b33e7d 100644 --- a/compiler/ccgexprs.nim +++ b/compiler/ccgexprs.nim @@ -762,6 +762,7 @@ proc genRecordField(p: BProc, e: PNode, d: var TLoc) = if field.loc.r == nil: internalError(e.info, "genRecordField 3") appf(r, ".$1", [field.loc.r]) putIntoDest(p, d, field.typ, r) + #d.s = a.s proc genInExprAux(p: BProc, e: PNode, a, b, d: var TLoc) diff --git a/compiler/renderer.nim b/compiler/renderer.nim index 689bf23c84..d6be3c81cc 100644 --- a/compiler/renderer.nim +++ b/compiler/renderer.nim @@ -1269,9 +1269,12 @@ proc gsub(g: var TSrcGen, n: PNode, c: TContext) = putWithSpace(g, tkColon, ":") gcoms(g) gstmts(g, n.sons[0], c) - of nkFinally: + of nkFinally, nkDefer: optNL(g) - put(g, tkFinally, "finally") + if n.kind == nkFinally: + put(g, tkFinally, "finally") + else: + put(g, tkDefer, "defer") putWithSpace(g, tkColon, ":") gcoms(g) gstmts(g, n.sons[0], c) diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim index d236687c35..781efb8910 100644 --- a/compiler/semexprs.nim +++ b/compiler/semexprs.nim @@ -2224,6 +2224,8 @@ proc semExpr(c: PContext, n: PNode, flags: TExprFlags = {}): PNode = result = semPragmaBlock(c, n) of nkStaticStmt: result = semStaticStmt(c, n) + of nkDefer: + localError(n.info, errGenerated, "'defer' not allowed in this context") else: localError(n.info, errInvalidExpressionX, renderTree(n, {renderNoComments}))