fixes #4875
This commit is contained in:
parent
4e51b562d4
commit
7c0fa52bbd
2 changed files with 31 additions and 18 deletions
|
|
@ -695,6 +695,22 @@ proc semBracketedMacro(c: PContext; outer, inner: PNode; s: PSym;
|
||||||
else: assert(false)
|
else: assert(false)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
proc afterCallActions(c: PContext; n, orig: PNode, flags: TExprFlags): PNode =
|
||||||
|
result = n
|
||||||
|
let callee = result.sons[0].sym
|
||||||
|
case callee.kind
|
||||||
|
of skMacro: result = semMacroExpr(c, result, orig, callee, flags)
|
||||||
|
of skTemplate: result = semTemplateExpr(c, result, callee, flags)
|
||||||
|
else:
|
||||||
|
semFinishOperands(c, result)
|
||||||
|
activate(c, result)
|
||||||
|
fixAbstractType(c, result)
|
||||||
|
analyseIfAddressTakenInCall(c, result)
|
||||||
|
if callee.magic != mNone:
|
||||||
|
result = magicsAfterOverloadResolution(c, result, flags)
|
||||||
|
if c.inTypeClass == 0:
|
||||||
|
result = evalAtCompileTime(c, result)
|
||||||
|
|
||||||
proc semIndirectOp(c: PContext, n: PNode, flags: TExprFlags): PNode =
|
proc semIndirectOp(c: PContext, n: PNode, flags: TExprFlags): PNode =
|
||||||
result = nil
|
result = nil
|
||||||
checkMinSonsLen(n, 1)
|
checkMinSonsLen(n, 1)
|
||||||
|
|
@ -773,27 +789,11 @@ proc semIndirectOp(c: PContext, n: PNode, flags: TExprFlags): PNode =
|
||||||
# See bug #904 of how to trigger it:
|
# See bug #904 of how to trigger it:
|
||||||
return result
|
return result
|
||||||
#result = afterCallActions(c, result, nOrig, flags)
|
#result = afterCallActions(c, result, nOrig, flags)
|
||||||
fixAbstractType(c, result)
|
if result.sons[0].kind == nkSym:
|
||||||
analyseIfAddressTakenInCall(c, result)
|
result = afterCallActions(c, result, nOrig, flags)
|
||||||
if result.sons[0].kind == nkSym and result.sons[0].sym.magic != mNone:
|
|
||||||
result = magicsAfterOverloadResolution(c, result, flags)
|
|
||||||
result = evalAtCompileTime(c, result)
|
|
||||||
|
|
||||||
proc afterCallActions(c: PContext; n, orig: PNode, flags: TExprFlags): PNode =
|
|
||||||
result = n
|
|
||||||
let callee = result.sons[0].sym
|
|
||||||
case callee.kind
|
|
||||||
of skMacro: result = semMacroExpr(c, result, orig, callee, flags)
|
|
||||||
of skTemplate: result = semTemplateExpr(c, result, callee, flags)
|
|
||||||
else:
|
else:
|
||||||
semFinishOperands(c, result)
|
|
||||||
activate(c, result)
|
|
||||||
fixAbstractType(c, result)
|
fixAbstractType(c, result)
|
||||||
analyseIfAddressTakenInCall(c, result)
|
analyseIfAddressTakenInCall(c, result)
|
||||||
if callee.magic != mNone:
|
|
||||||
result = magicsAfterOverloadResolution(c, result, flags)
|
|
||||||
if c.inTypeClass == 0:
|
|
||||||
result = evalAtCompileTime(c, result)
|
|
||||||
|
|
||||||
proc semDirectOp(c: PContext, n: PNode, flags: TExprFlags): PNode =
|
proc semDirectOp(c: PContext, n: PNode, flags: TExprFlags): PNode =
|
||||||
# this seems to be a hotspot in the compiler!
|
# this seems to be a hotspot in the compiler!
|
||||||
|
|
|
||||||
13
tests/template/tconfusinglocal.nim
Normal file
13
tests/template/tconfusinglocal.nim
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
|
||||||
|
# bug #4875
|
||||||
|
type Bar = object
|
||||||
|
mFoo: int
|
||||||
|
|
||||||
|
template foo(a: Bar): int = a.mFoo
|
||||||
|
|
||||||
|
proc main =
|
||||||
|
let foo = 5 # Rename this to smth else to make it work
|
||||||
|
var b: Bar
|
||||||
|
echo b.foo
|
||||||
|
|
||||||
|
main()
|
||||||
Loading…
Add table
Add a link
Reference in a new issue