parent
6ce6bce12e
commit
465815e894
2 changed files with 23 additions and 2 deletions
|
|
@ -427,8 +427,8 @@ proc fillPartialObject(c: PContext; n: PNode; typ: PType) =
|
||||||
proc setVarType(c: PContext; v: PSym, typ: PType) =
|
proc setVarType(c: PContext; v: PSym, typ: PType) =
|
||||||
if v.typ != nil and not sameTypeOrNil(v.typ, typ):
|
if v.typ != nil and not sameTypeOrNil(v.typ, typ):
|
||||||
localError(c.config, v.info, "inconsistent typing for reintroduced symbol '" &
|
localError(c.config, v.info, "inconsistent typing for reintroduced symbol '" &
|
||||||
v.name.s & "': previous type was: " & typeToString(v.typ) &
|
v.name.s & "': previous type was: " & typeToString(v.typ, preferDesc) &
|
||||||
"; new type is: " & typeToString(typ))
|
"; new type is: " & typeToString(typ, preferDesc))
|
||||||
v.typ = typ
|
v.typ = typ
|
||||||
|
|
||||||
proc semVarOrLet(c: PContext, n: PNode, symkind: TSymKind): PNode =
|
proc semVarOrLet(c: PContext, n: PNode, symkind: TSymKind): PNode =
|
||||||
|
|
|
||||||
|
|
@ -60,3 +60,24 @@ template create(typ: typeDesc, arg: untyped): untyped = `init typ`(arg)
|
||||||
var ff = Foo.create(12)
|
var ff = Foo.create(12)
|
||||||
|
|
||||||
echo ff.arg
|
echo ff.arg
|
||||||
|
|
||||||
|
|
||||||
|
import macros
|
||||||
|
|
||||||
|
# bug #11494
|
||||||
|
macro staticForEach(arr: untyped, body: untyped): untyped =
|
||||||
|
result = newNimNode(nnkStmtList)
|
||||||
|
arr.expectKind(nnkBracket)
|
||||||
|
for n in arr:
|
||||||
|
let b = copyNimTree(body)
|
||||||
|
result.add quote do:
|
||||||
|
block:
|
||||||
|
type it {.inject.} = `n`
|
||||||
|
`b`
|
||||||
|
|
||||||
|
template forEveryMatchingEntity*() =
|
||||||
|
staticForEach([int, string, float]):
|
||||||
|
var a {.inject.}: it
|
||||||
|
echo a
|
||||||
|
|
||||||
|
forEveryMatchingEntity()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue