Add support for (positive) integer printing, not just a single digit!
This commit is contained in:
@@ -867,11 +867,23 @@
|
||||
((= op 'i64.ge_u) (array #x5A))
|
||||
|
||||
((= op 'i32.add) (array #x6A))
|
||||
((= op 'i32.sub) (array #x6B))
|
||||
((= op 'i32.mul) (array #x6C))
|
||||
((= op 'i32.div_s) (array #x6D))
|
||||
((= op 'i32.div_u) (array #x6E))
|
||||
((= op 'i32.rem_s) (array #x6F))
|
||||
((= op 'i32.rem_u) (array #x70))
|
||||
((= op 'i32.and) (array #x71))
|
||||
((= op 'i32.shl) (array #x74))
|
||||
((= op 'i32.shr_s) (array #x75))
|
||||
((= op 'i32.shr_u) (array #x76))
|
||||
((= op 'i64.add) (array #x7C))
|
||||
((= op 'i64.sub) (array #x7D))
|
||||
((= op 'i64.mul) (array #x7E))
|
||||
((= op 'i64.div_s) (array #x7F))
|
||||
((= op 'i64.div_u) (array #x80))
|
||||
((= op 'i64.rem_s) (array #x81))
|
||||
((= op 'i64.rem_u) (array #x82))
|
||||
((= op 'i64.and) (array #x83))
|
||||
((= op 'i64.shr_u) (array #x88))
|
||||
|
||||
@@ -1042,8 +1054,20 @@
|
||||
(global.get (lambda (const) (array (lambda (name_dict) (array 'global.get (if (int? const) const (get-value name_dict const)))))))
|
||||
(global.set (lambda (const . flatten) (concat (apply concat flatten) (array (lambda (name_dict) (array 'global.set (if (int? const) const (get-value name_dict const))))))))
|
||||
(i32.add (lambda flatten (concat (apply concat flatten) (array (lambda (name_dict) (array 'i32.add))))))
|
||||
(i32.and (lambda flatten (concat (apply concat flatten) (array (lambda (name_dict) (array 'i32.add))))))
|
||||
(i32.sub (lambda flatten (concat (apply concat flatten) (array (lambda (name_dict) (array 'i32.sub))))))
|
||||
(i32.mul (lambda flatten (concat (apply concat flatten) (array (lambda (name_dict) (array 'i32.mul))))))
|
||||
(i32.div_s (lambda flatten (concat (apply concat flatten) (array (lambda (name_dict) (array 'i32.div_s))))))
|
||||
(i32.div_u (lambda flatten (concat (apply concat flatten) (array (lambda (name_dict) (array 'i32.div_u))))))
|
||||
(i32.rem_s (lambda flatten (concat (apply concat flatten) (array (lambda (name_dict) (array 'i32.rem_s))))))
|
||||
(i32.rem_u (lambda flatten (concat (apply concat flatten) (array (lambda (name_dict) (array 'i32.rem_u))))))
|
||||
(i32.and (lambda flatten (concat (apply concat flatten) (array (lambda (name_dict) (array 'i32.and))))))
|
||||
(i64.add (lambda flatten (concat (apply concat flatten) (array (lambda (name_dict) (array 'i64.add))))))
|
||||
(i64.sub (lambda flatten (concat (apply concat flatten) (array (lambda (name_dict) (array 'i64.sub))))))
|
||||
(i64.mul (lambda flatten (concat (apply concat flatten) (array (lambda (name_dict) (array 'i64.mul))))))
|
||||
(i64.div_s (lambda flatten (concat (apply concat flatten) (array (lambda (name_dict) (array 'i64.div_s))))))
|
||||
(i64.div_u (lambda flatten (concat (apply concat flatten) (array (lambda (name_dict) (array 'i64.div_u))))))
|
||||
(i64.rem_s (lambda flatten (concat (apply concat flatten) (array (lambda (name_dict) (array 'i64.rem_s))))))
|
||||
(i64.rem_u (lambda flatten (concat (apply concat flatten) (array (lambda (name_dict) (array 'i64.rem_u))))))
|
||||
(i64.and (lambda flatten (concat (apply concat flatten) (array (lambda (name_dict) (array 'i64.and))))))
|
||||
|
||||
(i32.eqz (lambda flatten (concat (apply concat flatten) (array (lambda (name_dict) (array 'i32.eqz))))))
|
||||
@@ -1219,6 +1243,18 @@
|
||||
(datasi (array 8 (array)))
|
||||
((true_loc true_length datasi) (alloc_data "true" datasi))
|
||||
((false_loc false_length datasi) (alloc_data "false" datasi))
|
||||
(int_digits (func '$int_digits '(param $int i64) '(result i32) '(local $tmp i32)
|
||||
(local.set '$tmp (i32.const 1))
|
||||
(block '$b
|
||||
(_loop '$l
|
||||
(br_if '$b (i64.le_u (local.get '$int) (i64.const 9)))
|
||||
(local.set '$tmp (i32.add (i32.const 1) (local.get '$tmp)))
|
||||
(local.set '$int (i64.div_u (local.get '$int) (i64.const 10)))
|
||||
(br '$l)
|
||||
)
|
||||
)
|
||||
(local.get '$tmp)
|
||||
))
|
||||
(str_len (func '$str_len '(param $to_str_len i64) '(result i32)
|
||||
(_if '$is_true '(result i32)
|
||||
(i64.eq (i64.const #b00111101) (local.get '$to_str_len))
|
||||
@@ -1237,7 +1273,7 @@
|
||||
))
|
||||
(else
|
||||
;; default is int
|
||||
(i32.const 1)
|
||||
(call '$int_digits (i64.shr_u (local.get '$to_str_len) (i64.const 1)))
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -1245,7 +1281,7 @@
|
||||
)
|
||||
)
|
||||
))
|
||||
(str_helper (func '$str_helper '(param $to_str i64) '(param $buf i32) '(result i32) '(local $len_tmp i32)
|
||||
(str_helper (func '$str_helper '(param $to_str i64) '(param $buf i32) '(result i32) '(local $len_tmp i32) '(local $buf_tmp i32)
|
||||
(_if '$is_true '(result i32)
|
||||
(i64.eq (i64.const #b00111101) (local.get '$to_str))
|
||||
(then (memory.copy (local.get '$buf)
|
||||
@@ -1282,8 +1318,21 @@
|
||||
))
|
||||
(else
|
||||
;; default is int
|
||||
(i64.store8 (local.get '$buf) (i64.add (i64.const #x30) (i64.shr_u (local.get '$to_str) (i64.const 1))))
|
||||
(i32.const 1)
|
||||
(local.set '$to_str (i64.shr_u (local.get '$to_str) (i64.const 1)))
|
||||
(local.set '$len_tmp (call '$int_digits (local.get '$to_str)))
|
||||
(local.set '$buf_tmp (i32.add (local.get '$buf) (local.get '$len_tmp)))
|
||||
|
||||
(block '$b
|
||||
(_loop '$l
|
||||
(local.set '$buf_tmp (i32.sub (local.get '$buf_tmp) (i32.const 1)))
|
||||
(i64.store8 (local.get '$buf_tmp) (i64.add (i64.const #x30) (i64.rem_u (local.get '$to_str) (i64.const 10))))
|
||||
(local.set '$to_str (i64.div_u (local.get '$to_str) (i64.const 10)))
|
||||
(br_if '$b (i64.eq (local.get '$to_str) (i64.const 0)))
|
||||
(br '$l)
|
||||
)
|
||||
)
|
||||
|
||||
(local.get '$len_tmp)
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -1311,7 +1360,7 @@
|
||||
(call '$print compiled_code)
|
||||
))
|
||||
((watermark datas) datasi)
|
||||
) (concat (global '$data_end '(mut i32) (i32.const watermark)) datas str_len str_helper print start ))
|
||||
) (concat (global '$data_end '(mut i32) (i32.const watermark)) datas int_digits str_len str_helper print start ))
|
||||
;(elem (i32.const 0) '$start '$start)
|
||||
(export "memory" '(memory $mem))
|
||||
(export "_start" '(func $start))
|
||||
@@ -1538,9 +1587,9 @@
|
||||
(export "memory" '(memory $mem))
|
||||
(export "_start" '(func $start))
|
||||
)))
|
||||
;(output3 (compile (partial_eval (read-string "(str 3 (+ 1 2))"))))
|
||||
(output3 (compile (partial_eval (read-string "(+ 1337 (+ 1 2))"))))
|
||||
;(output3 (compile (partial_eval (read-string "\"hello world\""))))
|
||||
(output3 (compile (partial_eval (read-string "((vau (x) x) asdf)"))))
|
||||
;(output3 (compile (partial_eval (read-string "((vau (x) x) asdf)"))))
|
||||
(_ (print "to out " output3))
|
||||
(_ (write_file "./csc_out.wasm" output3))
|
||||
(_ (print "encoding -8 as a s32_LEB128 " (encode_LEB128 -8)))
|
||||
|
||||
Reference in New Issue
Block a user