diff options
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/pragmas.nim | 4 | ||||
-rw-r--r-- | compiler/semtypes.nim | 8 |
2 files changed, 6 insertions, 6 deletions
diff --git a/compiler/pragmas.nim b/compiler/pragmas.nim index 9a12fa7fe..f4109b26d 100644 --- a/compiler/pragmas.nim +++ b/compiler/pragmas.nim @@ -751,7 +751,9 @@ proc singlePragma(c: PContext, sym: PSym, n: PNode, i: int, noVal(it) incl(sym.flags, sfThread) incl(sym.flags, sfProcvar) - if sym.typ != nil: incl(sym.typ.flags, tfThread) + if sym.typ != nil: + incl(sym.typ.flags, tfThread) + if sym.typ.callConv == ccClosure: sym.typ.callConv = ccDefault of wGcSafe: noVal(it) if sym.kind != skType: incl(sym.flags, sfThread) diff --git a/compiler/semtypes.nim b/compiler/semtypes.nim index ed576f85e..5f47bca5c 100644 --- a/compiler/semtypes.nim +++ b/compiler/semtypes.nim @@ -1141,14 +1141,12 @@ proc semProcTypeWithScope(c: PContext, n: PNode, checkSonsLen(n, 2) openScope(c) result = semProcTypeNode(c, n.sons[0], nil, prev, kind, isType=true) + # start with 'ccClosure', but of course pragmas can overwrite this: + result.callConv = ccClosure # dummy symbol for `pragma`: var s = newSymS(kind, newIdentNode(getIdent("dummy"), n.info), c) s.typ = result - if n.sons[1].kind == nkEmpty or n.sons[1].len == 0: - if result.callConv == ccDefault: - result.callConv = ccClosure - #Message(n.info, warnImplicitClosure, renderTree(n)) - else: + if n.sons[1].kind != nkEmpty and n.sons[1].len > 0: pragma(c, s, n.sons[1], procTypePragmas) when useEffectSystem: setEffectsForProcType(result, n.sons[1]) closeScope(c) |