boot2

Playing with the boostrap
git clone https://git.ryansepassi.com/git/boot2.git
Log | Files | Refs | README

023-cmpd-simple.scm (726B)


      1 ;; tests/cc-cg/23-cmpd-simple.scm — compound assignment on simple lval (§B.3).
      2 ;;
      3 ;; Models: int x = 7; x += 3; return x; → exit 10.
      4 
      5 (let ((cg (cg-init)))
      6   (cg-fn-begin cg "main" '() %t-i32)
      7   (let* ((off-x (cg-alloc-slot cg 4 4))
      8          (sym-x (%sym "x" 'var 'auto %t-i32 off-x)))
      9     ;; x = 7
     10     (cg-push-sym cg sym-x)
     11     (cg-push-imm cg %t-i32 7)
     12     (cg-assign cg) (cg-pop cg)
     13     ;; x += 3:  push lval; dup; load; push 3; add; assign; pop
     14     (cg-push-sym cg sym-x)
     15     (cg-dup cg)
     16     (cg-load cg)
     17     (cg-push-imm cg %t-i32 3)
     18     (cg-binop cg 'add)
     19     (cg-assign cg) (cg-pop cg)
     20     ;; return x
     21     (cg-push-sym cg sym-x) (cg-load cg)
     22     (cg-return cg))
     23   (cg-fn-end cg)
     24   (write-bv-fd 1 (cg-finish cg)))