summaryrefslogtreecommitdiff
path: root/deps/v8/test/mjsunit/asm/asm-stdlib.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/test/mjsunit/asm/asm-stdlib.js')
-rw-r--r--deps/v8/test/mjsunit/asm/asm-stdlib.js46
1 files changed, 46 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/asm/asm-stdlib.js b/deps/v8/test/mjsunit/asm/asm-stdlib.js
new file mode 100644
index 0000000000..65d0b76ff7
--- /dev/null
+++ b/deps/v8/test/mjsunit/asm/asm-stdlib.js
@@ -0,0 +1,46 @@
+// Copyright 2017 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --allow-natives-syntax
+
+(function FailProxyAsStdlib() {
+ // Test that passing a proxy as "stdlib" will cause module instantiation to
+ // fail while still only triggering one observable property load.
+ function Module(stdlib, foreign, heap) {
+ "use asm";
+ var a = stdlib.Math.PI;
+ function f() { return a }
+ return { f:f };
+ }
+ var trap_was_called = 0;
+ var proxy = new Proxy(this, { get:function(target, property, receiver) {
+ trap_was_called++;
+ if (property == "Math") return { PI:23 };
+ return Reflect.get(target, property, receiver);
+ }});
+ var m = Module(proxy);
+ assertFalse(%IsAsmWasmCode(Module));
+ assertEquals(1, trap_was_called);
+ assertEquals(23, m.f());
+})();
+
+(function FailGetterInStdlib() {
+ // Test that accessors as part of "stdlib" will cause module instantiation to
+ // fail while still only triggering one observable property load.
+ function Module(stdlib, foreign, heap) {
+ "use asm";
+ var a = new stdlib.Int8Array(heap);
+ function f() { return a[0] | 0 }
+ return { f:f };
+ }
+ var trap_was_called = 0;
+ var observer = { get Int8Array() {
+ trap_was_called++;
+ return function() { return [ 23 ] };
+ }};
+ var m = Module(observer);
+ assertFalse(%IsAsmWasmCode(Module));
+ assertEquals(1, trap_was_called);
+ assertEquals(23, m.f());
+})();