(codegen-push codegen)
(loop for (name init) in '(("aa" 1) ("bb" 0))
- do (ensure-var codegen name (c-type int) init))
+ do (ensure-var codegen name c-type-int init))
(codegen-push codegen)
- (with-temporary-var (codegen r (c-type int))
+ (with-temporary-var (codegen r c-type-int)
(emit-inst codegen(make-set-inst r "u%v"))
- (with-temporary-var (codegen q (c-type int))
+ (with-temporary-var (codegen q c-type-int)
(emit-inst codegen (make-set-inst q "u/v"))
- (with-temporary-var (codegen a (c-type int))
+ (with-temporary-var (codegen a c-type-int)
(emit-insts codegen
(list (make-set-inst a "aa")
(make-set-inst "aa" "bb")
(emit-insts codegen (list (make-set-inst "u" "v")
(make-set-inst "v" r))))
(emit-inst codegen (make-while-inst "v" (codegen-pop-block codegen)))
- (emit-inst codegen (make-if-inst "a" (make-set-inst "*a" "aa") nil))
+ (emit-inst codegen (make-if-inst "a" (make-set-inst "*a" "aa")))
(deliver-expr codegen :return "u")
(codegen-pop-function codegen "gcd"
(c-type (fun int
(loop for (name init) in '(("u" "atoi(argv[1])")
("v" "atoi(argv[2])")
("a"))
- do (ensure-var codegen name (c-type int) init))
- (ensure-var codegen "g" (c-type int)
- (make-call-inst "gcd" (list "u" "v" "&a")))
- (emit-inst codegen (make-expr-inst
- (make-call-inst "printf"
- (list "\"%d*%d == %d (mod %d)\\n\""
- "a" "u" "g" "v"))))
+ do (ensure-var codegen name c-type-int init))
+ (ensure-var codegen "g" c-type-int
+ (make-call-inst "gcd" "u" "v" "&a"))
+ (deliver-call codegen :void "printf"
+ "\"%d*%d == %d (mod %d)\\n\"" "a" "u" "g" "v")
(deliver-expr codegen :return 0)
(codegen-pop-function codegen "main"
(c-type (fun int