michael@0: var counter = 0; michael@0: function inc() { return counter++ } michael@0: var imp = { inc:inc }; michael@0: michael@0: function FFI1(stdlib, foreign) { michael@0: "use asm"; michael@0: michael@0: var inc = foreign.inc; michael@0: michael@0: function g() { michael@0: return inc()|0 michael@0: } michael@0: michael@0: return g michael@0: } michael@0: michael@0: function FFI2(stdlib, foreign) { michael@0: "use asm"; michael@0: michael@0: var inc=foreign.inc; michael@0: michael@0: function g() { michael@0: inc() michael@0: } michael@0: michael@0: return g michael@0: } michael@0: michael@0: michael@0: var f = FFI2(this, imp); // produces AOT-compiled version michael@0: f() michael@0: assertEq(counter, 1); michael@0: michael@0: var f = FFI1(this, imp); // produces AOT-compiled version michael@0: michael@0: assertEq(f(), 1); michael@0: assertEq(counter, 2); michael@0: assertEq(f(), 2); michael@0: assertEq(counter, 3);