mirror of
https://github.com/nim-lang/Nim.git
synced 2026-04-21 06:45:27 +00:00
fix term rewriting with sideeffect (#19410)
* fix term rewriting with sideeffect fix #6217 * add tests * Update tests/template/template_various.nim
This commit is contained in:
@@ -143,8 +143,11 @@ proc checkForSideEffects*(n: PNode): TSideEffectAnalysis =
|
||||
let s = op.sym
|
||||
if sfSideEffect in s.flags:
|
||||
return seSideEffect
|
||||
# assume no side effect:
|
||||
result = seNoSideEffect
|
||||
elif tfNoSideEffect in op.typ.flags:
|
||||
result = seNoSideEffect
|
||||
else:
|
||||
# assume side effect:
|
||||
result = seSideEffect
|
||||
elif tfNoSideEffect in op.typ.flags:
|
||||
# indirect call without side effects:
|
||||
result = seNoSideEffect
|
||||
|
||||
19
tests/template/t6217.nim
Normal file
19
tests/template/t6217.nim
Normal file
@@ -0,0 +1,19 @@
|
||||
discard """
|
||||
output: '''
|
||||
start
|
||||
side effect!
|
||||
end
|
||||
'''
|
||||
"""
|
||||
|
||||
# bug #6217
|
||||
|
||||
template optMul{`*`(a, 2)}(a: int{noSideEffect}): int = a+a
|
||||
|
||||
proc f(): int =
|
||||
echo "side effect!"
|
||||
result = 55
|
||||
|
||||
echo "start"
|
||||
doAssert f() * 2 == 110
|
||||
echo "end"
|
||||
Reference in New Issue
Block a user