| // 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 --validate-asm |
| |
| (function SuccessReturnTypesMatch() { |
| function Module(stdlib, imports, heap) { |
| "use asm"; |
| function f(a) { |
| a = a | 0; |
| if ((a | 0) == 1) return 2.3; |
| if ((a | 0) == 2) return 4.2; |
| return 6.5; |
| } |
| return { f:f }; |
| } |
| var m = Module(this); |
| assertTrue(%IsAsmWasmCode(Module)); |
| assertEquals(2.3, m.f(1)); |
| assertEquals(4.2, m.f(2)); |
| assertEquals(6.5, m.f(3)); |
| })(); |
| |
| (function FailReturnTypesMismatch() { |
| function Module(stdlib, imports, heap) { |
| "use asm"; |
| function f(a) { |
| a = a | 0; |
| if ((a | 0) == 1) return 2.3; |
| if ((a | 0) == 2) return 123; |
| return 4.2; |
| } |
| return { f:f }; |
| } |
| var m = Module(this); |
| assertFalse(%IsAsmWasmCode(Module)); |
| assertEquals(2.3, m.f(1)); |
| assertEquals(123, m.f(2)); |
| assertEquals(4.2, m.f(3)); |
| })(); |
| |
| (function FailFallOffNonVoidFunction() { |
| function Module(stdlib, imports, heap) { |
| "use asm"; |
| function f(a) { |
| a = a | 0; |
| if ((a | 0) == 1) return 2.3; |
| if ((a | 0) == 2) return 4.2; |
| } |
| return { f:f }; |
| } |
| var m = Module(this); |
| assertFalse(%IsAsmWasmCode(Module)); |
| assertEquals(2.3, m.f(1)); |
| assertEquals(4.2, m.f(2)); |
| assertEquals(undefined, m.f(3)); |
| })(); |
| |
| (function FailNonVoidVoidMismatch() { |
| function Module(stdlib, imports, heap) { |
| "use asm"; |
| function f(a) { |
| a = a | 0; |
| if ((a | 0) == 1) return 2.3; |
| if ((a | 0) == 2) return; |
| } |
| return { f:f }; |
| } |
| var m = Module(this); |
| assertFalse(%IsAsmWasmCode(Module)); |
| assertEquals(2.3, m.f(1)); |
| assertEquals(undefined, m.f(2)); |
| assertEquals(undefined, m.f(3)); |
| })(); |
| |
| (function FailVoidNonVoidMismatch() { |
| function Module(stdlib, imports, heap) { |
| "use asm"; |
| function f(a) { |
| a = a | 0; |
| if ((a | 0) == 1) return; |
| if ((a | 0) == 2) return 2.3; |
| } |
| return { f:f }; |
| } |
| var m = Module(this); |
| assertFalse(%IsAsmWasmCode(Module)); |
| assertEquals(undefined, m.f(1)); |
| assertEquals(2.3, m.f(2)); |
| assertEquals(undefined, m.f(3)); |
| })(); |
| |
| (function SuccessVoidFunction() { |
| function Module(stdlib, imports, heap) { |
| "use asm"; |
| function f(a) { |
| a = a | 0; |
| if ((a | 0) == 1) return; |
| return; |
| } |
| return { f:f }; |
| } |
| var m = Module(this); |
| assertTrue(%IsAsmWasmCode(Module)); |
| assertEquals(undefined, m.f(1)); |
| assertEquals(undefined, m.f(2)); |
| })(); |
| |
| (function SuccessFallOffVoidFunction() { |
| function Module(stdlib, imports, heap) { |
| "use asm"; |
| function f(a) { |
| a = a | 0; |
| if ((a | 0) == 1) return; |
| } |
| return { f:f }; |
| } |
| var m = Module(this); |
| assertTrue(%IsAsmWasmCode(Module)); |
| assertEquals(undefined, m.f(1)); |
| assertEquals(undefined, m.f(2)); |
| })(); |