diff options
-rw-r--r-- | compiler/pragmas.nim | 2 | ||||
-rw-r--r-- | compiler/sem.nim | 1 | ||||
-rw-r--r-- | compiler/semdata.nim | 1 | ||||
-rw-r--r-- | tests/lookups/tambiguousemit.nim | 12 |
4 files changed, 15 insertions, 1 deletions
diff --git a/compiler/pragmas.nim b/compiler/pragmas.nim index b3ccaf224..9e4a0052d 100644 --- a/compiler/pragmas.nim +++ b/compiler/pragmas.nim @@ -629,7 +629,7 @@ proc pragmaEmit(c: PContext, n: PNode) = if n1.kind == nkBracket: var b = newNodeI(nkBracket, n1.info, n1.len) for i in 0..<n1.len: - b[i] = c.semExpr(c, n1[i]) + b[i] = c.semExprWithType(c, n1[i], {efTypeAllowed}) n[1] = b else: n[1] = c.semConstExpr(c, n1) diff --git a/compiler/sem.nim b/compiler/sem.nim index 54ea38ef9..de78667ba 100644 --- a/compiler/sem.nim +++ b/compiler/sem.nim @@ -678,6 +678,7 @@ proc preparePContext*(graph: ModuleGraph; module: PSym; idgen: IdGenerator): PCo if result.p != nil: internalError(graph.config, module.info, "sem.preparePContext") result.semConstExpr = semConstExpr result.semExpr = semExpr + result.semExprWithType = semExprWithType result.semTryExpr = tryExpr result.semTryConstExpr = tryConstExpr result.computeRequiresInit = computeRequiresInit diff --git a/compiler/semdata.nim b/compiler/semdata.nim index 8235eba9c..e92698916 100644 --- a/compiler/semdata.nim +++ b/compiler/semdata.nim @@ -126,6 +126,7 @@ type libs*: seq[PLib] # all libs used by this module semConstExpr*: proc (c: PContext, n: PNode; expectedType: PType = nil): PNode {.nimcall.} # for the pragmas semExpr*: proc (c: PContext, n: PNode, flags: TExprFlags = {}, expectedType: PType = nil): PNode {.nimcall.} + semExprWithType*: proc (c: PContext, n: PNode, flags: TExprFlags = {}, expectedType: PType = nil): PNode {.nimcall.} semTryExpr*: proc (c: PContext, n: PNode, flags: TExprFlags = {}): PNode {.nimcall.} semTryConstExpr*: proc (c: PContext, n: PNode; expectedType: PType = nil): PNode {.nimcall.} computeRequiresInit*: proc (c: PContext, t: PType): bool {.nimcall.} diff --git a/tests/lookups/tambiguousemit.nim b/tests/lookups/tambiguousemit.nim new file mode 100644 index 000000000..0ebd0a255 --- /dev/null +++ b/tests/lookups/tambiguousemit.nim @@ -0,0 +1,12 @@ +discard """ + cmd: "nim check $options $file" # use check to assure error is pre-codegen + matrix: "; --backend:js" # backend shouldn't matter but at least check js +""" + +proc foo(x: int) = discard +proc foo(x: float) = discard + +{.emit: ["// ", foo].} #[tt.Error + ^ ambiguous identifier 'foo' -- use one of the following: + tambiguousemit.foo: proc (x: int){.noSideEffect, gcsafe.} + tambiguousemit.foo: proc (x: float){.noSideEffect, gcsafe.}]# |