(module (import "gyehoek" "write" (func $gh-write (param (ref eq)))) (import "gyehoek" "truthy?" (func $gh-truthy? (param (ref eq)) (result i32))) (type $heap-object (sub (struct (field $hash (mut i32))))) (type $cont-type (func (param i32))) (type $cont-stack-type (array (mut (ref null $cont-type)))) (type $closure (sub $heap-object (struct (field $hash (mut i32)) (field $code (ref $cont-type))))) (global $cont-stack-top (mut i32) (i32.const 0)) (global $cont-stack (ref $cont-stack-type) (array.new_default $cont-stack-type (i32.const 128))) (global $arg0 (mut (ref null eq)) (ref.null eq)) (global $arg1 (mut (ref null eq)) (ref.null eq)) (global $arg2 (mut (ref null eq)) (ref.null eq)) (global $arg3 (mut (ref null eq)) (ref.null eq)) (global $arg4 (mut (ref null eq)) (ref.null eq)) (global $arg5 (mut (ref null eq)) (ref.null eq)) (global $arg6 (mut (ref null eq)) (ref.null eq)) (global $arg7 (mut (ref null eq)) (ref.null eq)) (global $arg8 (mut (ref null eq)) (ref.null eq)) (global $arg9 (mut (ref null eq)) (ref.null eq)) (global $arg10 (mut (ref null eq)) (ref.null eq)) (global $arg11 (mut (ref null eq)) (ref.null eq)) (global $arg12 (mut (ref null eq)) (ref.null eq)) (global $arg13 (mut (ref null eq)) (ref.null eq)) (global $arg14 (mut (ref null eq)) (ref.null eq)) (global $arg15 (mut (ref null eq)) (ref.null eq)) (global $result (mut (ref null eq)) (ref.null eq)) (func $halt (param i32) (@gyehoek begin popArg) (global.get $arg0) ref.as_non_null (@gyehoek end popArg) (global.set $result)) (func (param i32) (@gyehoek :origin "(λ (x λ-tail1) (prim (* x x) (κ (r2) (continue λ-tail1 r2))))") (local (ref eq) (ref eq) (ref eq) (ref eq) (ref eq)) (@gyehoek :origin "(prim (* x x) (κ (r2) (continue λ-tail1 r2)))") (global.get $arg1) (i31.get_s (ref.cast (ref i31))) (i32.const 1) i32.shr_u (global.get $arg1) (i31.get_s (ref.cast (ref i31))) (i32.const 1) i32.shr_u i32.mul (@gyehoek "construct small fixnum") (i32.const 1) i32.shl ref.i31 (global.set $arg2) (@gyehoek :origin "(continue λ-tail1 r2)") (@gyehoek "push args") (@gyehoek begin pushArg) (global.get $arg2) (global.set $arg0) (@gyehoek end pushArg) (@gyehoek "nargs") (i32.const 1) (@gyehoek "pop cont stack") (global.get $cont-stack-top) (i32.const 1) i32.sub (global.set $cont-stack-top) (global.get $cont-stack) (global.get $cont-stack-top) (array.get $cont-stack-type) ref.as_non_null (return_call_ref $cont-type)) (elem declare funcref (ref.func 3)) (func (param i32) (@gyehoek :origin "(κ (x4) (continue halt x4))") (local (ref eq) (ref eq) (ref eq) (ref eq) (ref eq)) (@gyehoek begin pushArg) (global.get $arg2) (global.set $arg0) (@gyehoek end pushArg) (return_call $halt (i32.const 1))) (elem declare funcref (ref.func 4)) (func $scm-entry (param i32) (@gyehoek :origin "(letrec ((λ-body0 (λ (x λ-tail1) (prim (* x x) (κ (r2) (continue λ-tail1 r2)))))) (letrec ((r3 (κ (x4) (continue halt x4)))) (λ-body0 5 r3)))") (local (ref eq) (ref eq) (ref eq) (ref eq) (ref eq)) (i32.const 0) (ref.func 3) (struct.new $closure) (global.set $arg1) (@gyehoek :origin "(λ-body0 5 r3)") (@gyehoek "push cont" :idx 4) (array.set $cont-stack-type (global.get $cont-stack) (global.get $cont-stack-top) (ref.func 4)) (global.set $cont-stack-top (i32.add (global.get $cont-stack-top) (i32.const 1))) (@gyehoek :origin "(λ-body0 5 r3)") (@gyehoek "load args") (@gyehoek begin pushArg) (i32.const 5) (@gyehoek "construct small fixnum") (i32.const 1) i32.shl ref.i31 (global.set $arg0) (@gyehoek end pushArg) (i32.const 1) (global.get $arg1) (ref.cast (ref $closure)) (struct.get $closure $code) (return_call_ref $cont-type) (@gyehoek todo (f' (global.get $arg1)) (ktail 1))) (func (export "main") (call $scm-entry (i32.const 0)) (call $gh-write (ref.as_non_null (global.get $result)))))