; solution for codegen completion task (def genwhile e (ads) (do (outa icJmp 0) (set ads (- XP 1)) (eval (arg2 e)) ; gen body (patch ads (- XP ads)) (eval (head e)) ; gen cond (outa icJt (- (+ ads 1) XP)))) (def evalx (op arg e1) () (if (= op xNEW) (do (eval (head e1)) (outs icArray)) (if (= op xSUB) (genbop icSub (head e1) (arg2 e1)) (if (= op xMUL) (genbop icMul (head e1) (arg2 e1)) (if (= op xDIV) (genbop icDiv (head e1) (arg2 e1)) (if (= op xBAND) (genbop icBand (head e1) (arg2 e1)) (if (= op xSHR) (genbop icShr (head e1) (arg2 e1)) (if (= op xSHL) (genbop icShl (head e1) (arg2 e1)) (if (= op xEQ) (genbop icEq (head e1) (arg2 e1)) (if (= op xLT) (genbop icLt (head e1) (arg2 e1)) (if (= op xGT) (genbop icGt (head e1) (arg2 e1)) (if (= op xSTX) ; base idx val (do (outa icGet arg) (eval (head e1)) (eval (arg2 e1)) (outs icStx)) (if (= op xLDY) (do (outa icLd arg) (eval (head e1)) (outs icLdx)) (if (= op xSTY) ; base idx val (do (outa icLd arg) (eval (head e1)) (eval (arg2 e1)) (outs icStx)) (error "unknown op"))))))))))))))) ; End