decl `dummy`2 = undef, `arrayVar`3 = `window`0 ⌜⋆⌝ "Array", `functionVar`4 = `window`0 ⌜⋆⌝ "Function", `stringVar`5 = `window`0 ⌜⋆⌝ "String", `regexpVar`6 = `window`0 ⌜⋆⌝ "RegExp", `booleanVar`7 = `window`0 ⌜⋆⌝ "Boolean", `numberVar`8 = `window`0 ⌜⋆⌝ "Number", `dateVar`9 = `window`0 ⌜⋆⌝ "Date", `errorVar`10 = `window`0 ⌜⋆⌝ "Error", `argumentsVar`11 = `window`0 ⌜⋆⌝ "Arguments", `objectVar`12 = `window`0 ⌜⋆⌝ "Object", `dummyAddressVar`13 = `window`0 ⌜⋆⌝ "dummyAddress", window = `window`0 inID: 30460 scratch (3) in ID: 30450 (`window`0).("dummyAddress") = undef ID: 27760 (`window`0).("Arguments") = undef ID: 27800 (`window`0).("factorial") = undef ID: 27840 (`window`0).("fact") = undef ID: 27880 scratch_0 = newfun (1.0) ID: 29730 (`self`14, arguments) => ID: 29710 decl n = arguments ⌜⋆⌝ "0" in ID: 29700 scratch (11) in ID: 29690 :RETURN:: ID: 29680 if typeof n ⌜≡⌝ "string" ⌜&&⌝ false ID: 28430 scratch_0 = n ⌜≼⌝ 0.0 ID: 28060 else ID: 28430 if isprim n ID: 28350 scratch_1 = tonum n ID: 28130 else ID: 28350 scratch_2 = new `argumentsVar`11(`dummyAddressVar`13)ID: 28180 merge ID: 28190 (scratch_2).("0") = n ID: 28230 (scratch_2).("length") = 1.0 ID: 28270 scratch_1 = `numberVar`8(`window`0, scratch_2)ID: 28320 merge ID: 28330 merge ID: 28360 scratch_0 = scratch_1 ⌜≤⌝ 0.0 ID: 28410 merge ID: 28440 if tobool scratch_0 ID: 29650 jmp :RETURN: 1.0 ID: 28480 else ID: 29650 if isprim n ID: 28770 scratch_3 = tonum n ID: 28550 else ID: 28770 scratch_4 = new `argumentsVar`11(`dummyAddressVar`13)ID: 28600 merge ID: 28610 (scratch_4).("0") = n ID: 28650 (scratch_4).("length") = 1.0 ID: 28690 scratch_3 = `numberVar`8(`window`0, scratch_4)ID: 28740 merge ID: 28750 merge ID: 28780 scratch_5 = new `argumentsVar`11(`dummyAddressVar`13)ID: 28820 merge ID: 28830 (scratch_5).("0") = scratch_3 ⌜−⌝ 1.0 ID: 28890 (scratch_5).("length") = 1.0 ID: 28930 scratch_6 = `window`0 ⌜⋆⌝ "fact"(`window`0, scratch_5)ID: 29000 merge ID: 29010 if isprim n ID: 29290 scratch_7 = tonum n ID: 29070 else ID: 29290 scratch_8 = new `argumentsVar`11(`dummyAddressVar`13)ID: 29120 merge ID: 29130 (scratch_8).("0") = n ID: 29170 (scratch_8).("length") = 1.0 ID: 29210 scratch_7 = `numberVar`8(`window`0, scratch_8)ID: 29260 merge ID: 29270 merge ID: 29300 if isprim scratch_6 ID: 29580 scratch_9 = tonum scratch_6 ID: 29360 else ID: 29580 scratch_10 = new `argumentsVar`11(`dummyAddressVar`13)ID: 29410 merge ID: 29420 (scratch_10).("0") = scratch_6 ID: 29460 (scratch_10).("length") = 1.0 ID: 29500 scratch_9 = `numberVar`8(`window`0, scratch_10)ID: 29550 merge ID: 29560 merge ID: 29590 jmp :RETURN: scratch_7 ⌜×⌝ scratch_9 ID: 29630 merge ID: 29660 scratch_1 = new `argumentsVar`11(`dummyAddressVar`13) ID: 29770 merge ID: 29780 (scratch_1).("length") = 0.0 ID: 29820 scratch_2 = new `objectVar`12(scratch_1) ID: 29860 merge ID: 29870 (scratch_0).("prototype") = scratch_2 ID: 29910 (`window`0).("fact") = scratch_0 ID: 29950 scratch_0 = new `argumentsVar`11(`dummyAddressVar`13) ID: 29990 merge ID: 30000 (scratch_0).("0") = 3.0 ID: 30040 (scratch_0).("length") = 1.0 ID: 30080 scratch_1 = `window`0 ⌜⋆⌝ "fact"(`window`0, scratch_0) ID: 30150 merge ID: 30160 (`window`0).("factorial") = scratch_1 ID: 30200 scratch_0 = new `argumentsVar`11(`dummyAddressVar`13) ID: 30240 merge ID: 30250 (scratch_0).("0") = `window`0 ⌜⋆⌝ "factorial" ID: 30310 (scratch_0).("length") = 1.0 ID: 30350 scratch_1 = `window`0 ⌜⋆⌝ "print"(`window`0, scratch_0) ID: 30420 merge ID: 30430