|
1 var counter = 0; |
|
2 function inc() { return counter++ } |
|
3 var imp = { inc:inc }; |
|
4 |
|
5 function FFI1(stdlib, foreign) { |
|
6 "use asm"; |
|
7 |
|
8 var inc = foreign.inc; |
|
9 |
|
10 function g() { |
|
11 return inc()|0 |
|
12 } |
|
13 |
|
14 return g |
|
15 } |
|
16 |
|
17 function FFI2(stdlib, foreign) { |
|
18 "use asm"; |
|
19 |
|
20 var inc=foreign.inc; |
|
21 |
|
22 function g() { |
|
23 inc() |
|
24 } |
|
25 |
|
26 return g |
|
27 } |
|
28 |
|
29 |
|
30 var f = FFI2(this, imp); // produces AOT-compiled version |
|
31 f() |
|
32 assertEq(counter, 1); |
|
33 |
|
34 var f = FFI1(this, imp); // produces AOT-compiled version |
|
35 |
|
36 assertEq(f(), 1); |
|
37 assertEq(counter, 2); |
|
38 assertEq(f(), 2); |
|
39 assertEq(counter, 3); |