@@ -520,29 +520,13 @@ proc genBinaryOp(
520520
521521 # TODO : recursive IR generation
522522
523- const MutatorOps = {
524- BinaryOperation .Add , BinaryOperation .Sub , BinaryOperation .Mult , BinaryOperation .Div
525- }
526-
527523 let
528524 leftIdx =
529525 if leftTerm.kind == AtomHolder :
530526 runtime.index (" left_term" , internalIndex (stmt))
531527 elif leftTerm.kind == IdentHolder :
532- if stmt.op notin MutatorOps :
533- runtime.index (leftTerm.ident, defaultParams (fn))
534- else :
535- block :
536- # If the op causes [1] to be mutated, we need to copy [1] into a temporary space
537- # to avoid unforeseen side effects and invariants.
538- inc runtime.addrIdx
539- runtime.ir.copyAtom (
540- runtime.index (leftTerm.ident, defaultParams (fn)), runtime.addrIdx
541- )
542-
543- runtime.addrIdx
528+ runtime.index (leftTerm.ident, defaultParams (fn))
544529 else :
545- unreachable
546530 0
547531
548532 rightIdx =
@@ -551,7 +535,6 @@ proc genBinaryOp(
551535 elif rightTerm.kind == IdentHolder :
552536 runtime.index (rightTerm.ident, defaultParams (fn))
553537 else :
554- unreachable
555538 0
556539
557540 case stmt.op
@@ -629,15 +612,16 @@ proc genBinaryOp(
629612 warn " emitter: unimplemented binary operation: " & $ stmt.op
630613
631614 if * stmt.binStoreIn:
632- let indexed =
633- if not internal:
634- runtime.markLocal (fn, & stmt.binStoreIn)
635- runtime.addrIdx - 1 'u
636- else :
637- runtime.index (& stmt.binStoreIn, internalIndex (stmt))
638-
639- if leftIdx != indexed:
640- runtime.ir.copyAtom (leftIdx, indexed)
615+ runtime.ir.copyAtom (
616+ leftIdx,
617+ runtime.index (
618+ & stmt.binStoreIn,
619+ if not internal:
620+ defaultParams (fn)
621+ else :
622+ internalIndex (stmt),
623+ ),
624+ )
641625 elif * exprStoreIn:
642626 assert * parentStmt
643627 runtime.ir.copyAtom (
0 commit comments