diff options
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/lineinfos.nim | 6 | ||||
-rw-r--r-- | compiler/semexprs.nim | 15 | ||||
-rw-r--r-- | compiler/semstmts.nim | 34 | ||||
-rw-r--r-- | compiler/semtempl.nim | 2 | ||||
-rw-r--r-- | compiler/sigmatch.nim | 2 |
5 files changed, 12 insertions, 47 deletions
diff --git a/compiler/lineinfos.nim b/compiler/lineinfos.nim index 7b59dfa13..ab9c902c3 100644 --- a/compiler/lineinfos.nim +++ b/compiler/lineinfos.nim @@ -83,8 +83,9 @@ type warnPtrToCstringConv = "PtrToCstringConv", warnEffect = "Effect", warnCastSizes = "CastSizes" - warnTemplateRedefinition = "TemplateRedefinition", + warnImplicitTemplateRedefinition = "ImplicitTemplateRedefinition", warnUnnamedBreak = "UnnamedBreak", + warnStmtListLambda = "StmtListLambda", warnUser = "User", # hints hintSuccess = "Success", hintSuccessX = "SuccessX", @@ -181,8 +182,9 @@ const warnPtrToCstringConv: "unsafe conversion to 'cstring' from '$1'; this will become a compile time error in the future", warnEffect: "$1", warnCastSizes: "$1", - warnTemplateRedefinition: "template '$1' is implicitly redefined, consider adding an explicit .redefine pragma", + warnImplicitTemplateRedefinition: "template '$1' is implicitly redefined; this is deprecated, add an explicit .redefine pragma", warnUnnamedBreak: "Using an unnamed break in a block is deprecated; Use a named block with a named break instead", + warnStmtListLambda: "statement list expression assumed to be anonymous proc; this is deprecated, use `do (): ...` or `proc () = ...` instead", warnUser: "$1", hintSuccess: "operation successful: $#", # keep in sync with `testament.isSuccess` diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim index cb7b0ae4a..6070464c9 100644 --- a/compiler/semexprs.nim +++ b/compiler/semexprs.nim @@ -1266,15 +1266,7 @@ proc semSym(c: PContext, n: PNode, sym: PSym, flags: TExprFlags): PNode = result = newSymNode(s, n.info) else: result = newSymNode(s, n.info) - of skMacro: - if efNoEvaluateGeneric in flags and s.ast[genericParamsPos].len > 0 or - (n.kind notin nkCallKinds and s.requiredParams > 0): - markUsed(c, n.info, s) - onUse(n.info, s) - result = symChoice(c, n, s, scClosed) - else: - result = semMacroExpr(c, n, n, s, flags) - of skTemplate: + of skMacro, skTemplate: if efNoEvaluateGeneric in flags and s.ast[genericParamsPos].len > 0 or (n.kind notin nkCallKinds and s.requiredParams > 0) or sfCustomPragma in sym.flags: @@ -1283,7 +1275,10 @@ proc semSym(c: PContext, n: PNode, sym: PSym, flags: TExprFlags): PNode = onUse(info, s) result = symChoice(c, n, s, scClosed) else: - result = semTemplateExpr(c, n, s, flags) + case s.kind + of skMacro: result = semMacroExpr(c, n, n, s, flags) + of skTemplate: result = semTemplateExpr(c, n, s, flags) + else: discard # unreachable of skParam: markUsed(c, n.info, s) onUse(n.info, s) diff --git a/compiler/semstmts.nim b/compiler/semstmts.nim index 4b179c2f0..a2b5a0c92 100644 --- a/compiler/semstmts.nim +++ b/compiler/semstmts.nim @@ -509,13 +509,6 @@ proc semVarMacroPragma(c: PContext, a: PNode, n: PNode): PNode = let it = pragmas[i] let key = if it.kind in nkPragmaCallKinds and it.len >= 1: it[0] else: it - when false: - let lhs = b[0] - let clash = strTableGet(c.currentScope.symbols, lhs.ident) - if clash != nil: - # refs https://github.com/nim-lang/Nim/issues/8275 - wrongRedefinition(c, lhs.info, lhs.ident.s, clash.info) - if isPossibleMacroPragma(c, it, key): # we transform ``var p {.m, rest.}`` into ``m(do: var p {.rest.})`` and # let the semantic checker deal with it: @@ -562,27 +555,6 @@ proc semVarMacroPragma(c: PContext, a: PNode, n: PNode): PNode = doAssert result != nil - # since a macro pragma can set pragmas, we process these here again. - # This is required for SqueakNim-like export pragmas. - if false and result.kind in {nkVarSection, nkLetSection, nkConstSection}: - var validPragmas: TSpecialWords - case result.kind - of nkVarSection: - validPragmas = varPragmas - of nkLetSection: - validPragmas = letPragmas - of nkConstSection: - validPragmas = constPragmas - else: - # unreachable - discard - for defs in result: - for i in 0 ..< defs.len - 2: - let ex = defs[i] - if ex.kind == nkPragmaExpr and - ex[namePos].kind == nkSym and - ex[pragmaPos].kind != nkEmpty: - pragma(c, defs[lhsPos][namePos].sym, defs[lhsPos][pragmaPos], validPragmas) return result template isLocalVarSym(n: PNode): bool = @@ -1710,12 +1682,6 @@ proc semProcAnnotation(c: PContext, prc: PNode; doAssert result != nil - # since a proc annotation can set pragmas, we process these here again. - # This is required for SqueakNim-like export pragmas. - if false and result.kind in procDefs and result[namePos].kind == nkSym and - result[pragmasPos].kind != nkEmpty: - pragma(c, result[namePos].sym, result[pragmasPos], validPragmas) - return result proc semInferredLambda(c: PContext, pt: TIdTable, n: PNode): PNode {.nosinks.} = diff --git a/compiler/semtempl.nim b/compiler/semtempl.nim index 008226c27..0016e9edf 100644 --- a/compiler/semtempl.nim +++ b/compiler/semtempl.nim @@ -691,7 +691,7 @@ proc semTemplateDef(c: PContext, n: PNode): PNode = elif not comesFromShadowscope: if {sfTemplateRedefinition, sfGenSym} * s.flags == {}: #wrongRedefinition(c, n.info, proto.name.s, proto.info) - message(c.config, n.info, warnTemplateRedefinition, s.name.s) + message(c.config, n.info, warnImplicitTemplateRedefinition, s.name.s) symTabReplace(c.currentScope.symbols, proto, s) if n[patternPos].kind != nkEmpty: c.patterns.add(s) diff --git a/compiler/sigmatch.nim b/compiler/sigmatch.nim index cf60505dc..09aaa5b35 100644 --- a/compiler/sigmatch.nim +++ b/compiler/sigmatch.nim @@ -2189,6 +2189,8 @@ proc paramTypesMatchAux(m: var TCandidate, f, a: PType, return arg elif a.kind == tyVoid and f.matchesVoidProc and argOrig.kind == nkStmtList: # lift do blocks without params to lambdas + # now deprecated + message(c.config, argOrig.info, warnStmtListLambda) let p = c.graph let lifted = c.semExpr(c, newProcNode(nkDo, argOrig.info, body = argOrig, params = nkFormalParams.newTree(p.emptyNode), name = p.emptyNode, pattern = p.emptyNode, |