implements https://github.com/nim-lang/RFCs/issues/257 (#15466)
This commit is contained in:
parent
e3eae3f7c7
commit
9828392df3
3 changed files with 9 additions and 7 deletions
|
|
@ -223,6 +223,8 @@ proc isAssignable*(owner: PSym, n: PNode; isUnsafeAddr=false): TAssignableResult
|
||||||
result = arLValue
|
result = arLValue
|
||||||
elif isUnsafeAddr and n.sym.kind == skParam:
|
elif isUnsafeAddr and n.sym.kind == skParam:
|
||||||
result = arLValue
|
result = arLValue
|
||||||
|
elif isUnsafeAddr and n.sym.kind == skConst and dontInlineConstant(n, n.sym.ast):
|
||||||
|
result = arLValue
|
||||||
elif n.sym.kind in kinds:
|
elif n.sym.kind in kinds:
|
||||||
if owner != nil and owner == n.sym.owner and
|
if owner != nil and owner == n.sym.owner and
|
||||||
sfGlobal notin n.sym.flags:
|
sfGlobal notin n.sym.flags:
|
||||||
|
|
|
||||||
|
|
@ -850,13 +850,6 @@ proc transformExceptBranch(c: PTransf, n: PNode): PNode =
|
||||||
else:
|
else:
|
||||||
result = transformSons(c, n)
|
result = transformSons(c, n)
|
||||||
|
|
||||||
proc dontInlineConstant(orig, cnst: PNode): bool {.inline.} =
|
|
||||||
# symbols that expand to a complex constant (array, etc.) should not be
|
|
||||||
# inlined, unless it's the empty array:
|
|
||||||
result = orig.kind == nkSym and
|
|
||||||
cnst.kind in {nkCurly, nkPar, nkTupleConstr, nkBracket} and
|
|
||||||
cnst.len != 0
|
|
||||||
|
|
||||||
proc commonOptimizations*(g: ModuleGraph; c: PSym, n: PNode): PNode =
|
proc commonOptimizations*(g: ModuleGraph; c: PSym, n: PNode): PNode =
|
||||||
result = n
|
result = n
|
||||||
for i in 0..<n.safeLen:
|
for i in 0..<n.safeLen:
|
||||||
|
|
|
||||||
|
|
@ -195,3 +195,10 @@ proc stupidStmtListExpr*(n: PNode): bool =
|
||||||
for i in 0..<n.len-1:
|
for i in 0..<n.len-1:
|
||||||
if n[i].kind notin {nkEmpty, nkCommentStmt}: return false
|
if n[i].kind notin {nkEmpty, nkCommentStmt}: return false
|
||||||
result = true
|
result = true
|
||||||
|
|
||||||
|
proc dontInlineConstant*(orig, cnst: PNode): bool {.inline.} =
|
||||||
|
# symbols that expand to a complex constant (array, etc.) should not be
|
||||||
|
# inlined, unless it's the empty array:
|
||||||
|
result = orig.kind == nkSym and
|
||||||
|
cnst.kind in {nkCurly, nkPar, nkTupleConstr, nkBracket} and
|
||||||
|
cnst.len != 0
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue