| OLD | NEW |
| 1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Flags: --expose-wasm --allow-natives-syntax | 5 // Flags: --expose-wasm --allow-natives-syntax |
| 6 | 6 |
| 7 load("test/mjsunit/wasm/wasm-constants.js"); | 7 load("test/mjsunit/wasm/wasm-constants.js"); |
| 8 load("test/mjsunit/wasm/wasm-module-builder.js"); | 8 load("test/mjsunit/wasm/wasm-module-builder.js"); |
| 9 | 9 |
| 10 var expect_elison = 0; | 10 var expect_elison = 0; |
| 11 var expect_no_elison = 1; | 11 var expect_no_elison = 1; |
| 12 // function calls stack: first_export -> first_func -> first_import -> | 12 // function calls stack: first_export -> first_func -> first_import -> |
| 13 // second_export -> second_import | 13 // second_export -> second_import |
| 14 // In this case, first_import and second_export have same signature, | 14 // In this case, first_import and second_export have same signature, |
| 15 // So that wrappers will be removed | 15 // So that wrappers will be removed |
| 16 (function TestWasmWrapperElision() { | 16 (function TestWasmWrapperElision() { |
| 17 var imported = function (a) { | 17 var imported = function (a) { |
| 18 return a; | 18 return a; |
| 19 }; | 19 }; |
| 20 | 20 |
| 21 var second_module = new WasmModuleBuilder(); | 21 var second_module = new WasmModuleBuilder(); |
| 22 var sig_index = second_module.addType(kSig_i_i); | 22 var sig_index = second_module.addType(kSig_i_i); |
| 23 second_module | 23 second_module |
| 24 .addImportWithModule("import_module_2", "import_name_2", sig_index); | 24 .addImportWithModule("import_module_2", "import_name_2", sig_index); |
| 25 second_module | 25 second_module |
| 26 .addFunction("second_export", sig_index) | 26 .addFunction("second_export", sig_index) |
| 27 .addBody([ | 27 .addBody([ |
| 28 kExprGetLocal, 0, | 28 kExprGetLocal, 0, |
| 29 kExprCallImport, kArity1, 0, | 29 kExprCallFunction, 0, |
| 30 kExprReturn, kArity1 | 30 kExprReturn |
| 31 ]) | 31 ]) |
| 32 .exportFunc(); | 32 .exportFunc(); |
| 33 | 33 |
| 34 var first_module = new WasmModuleBuilder(); | 34 var first_module = new WasmModuleBuilder(); |
| 35 var sig_index = first_module.addType(kSig_i_i); | 35 var sig_index = first_module.addType(kSig_i_i); |
| 36 first_module | 36 first_module |
| 37 .addImportWithModule("import_module_1", "import_name_1", sig_index); | 37 .addImportWithModule("import_module_1", "import_name_1", sig_index); |
| 38 first_module | 38 first_module |
| 39 .addFunction("first_export", sig_index) | 39 .addFunction("first_export", sig_index) |
| 40 .addBody([ | 40 .addBody([ |
| 41 kExprGetLocal, 0, | 41 kExprGetLocal, 0, |
| 42 kExprCallFunction, kArity1, 1, | 42 kExprCallFunction, 2, |
| 43 kExprReturn, kArity1 | 43 kExprReturn |
| 44 ]) | 44 ]) |
| 45 .exportFunc(); | 45 .exportFunc(); |
| 46 first_module | 46 first_module |
| 47 .addFunction("first_func", sig_index) | 47 .addFunction("first_func", sig_index) |
| 48 .addBody([ | 48 .addBody([ |
| 49 kExprI32Const, 1, | 49 kExprI32Const, 1, |
| 50 kExprGetLocal, 0, | 50 kExprGetLocal, 0, |
| 51 kExprI32Add, | 51 kExprI32Add, |
| 52 kExprCallImport, kArity1, 0, | 52 kExprCallFunction, 0, |
| 53 kExprReturn, kArity1 | 53 kExprReturn |
| 54 ]); | 54 ]); |
| 55 | 55 |
| 56 var f = second_module | 56 var f = second_module |
| 57 .instantiate({import_module_2: {import_name_2: imported}}) | 57 .instantiate({import_module_2: {import_name_2: imported}}) |
| 58 .exports.second_export; | 58 .exports.second_export; |
| 59 var the_export = first_module | 59 var the_export = first_module |
| 60 .instantiate({import_module_1: {import_name_1: f}}) | 60 .instantiate({import_module_1: {import_name_1: f}}) |
| 61 .exports.first_export; | 61 .exports.first_export; |
| 62 assertEquals(the_export(2), 3); | 62 assertEquals(the_export(2), 3); |
| 63 assertEquals(the_export(-1), 0); | 63 assertEquals(the_export(-1), 0); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 76 }; | 76 }; |
| 77 | 77 |
| 78 var second_module = new WasmModuleBuilder(); | 78 var second_module = new WasmModuleBuilder(); |
| 79 var sig_index_1 = second_module.addType(kSig_i_i); | 79 var sig_index_1 = second_module.addType(kSig_i_i); |
| 80 second_module | 80 second_module |
| 81 .addImportWithModule("import_module_2", "import_name_2", sig_index_1); | 81 .addImportWithModule("import_module_2", "import_name_2", sig_index_1); |
| 82 second_module | 82 second_module |
| 83 .addFunction("second_export", sig_index_1) | 83 .addFunction("second_export", sig_index_1) |
| 84 .addBody([ | 84 .addBody([ |
| 85 kExprGetLocal, 0, | 85 kExprGetLocal, 0, |
| 86 kExprCallImport, kArity1, 0, | 86 kExprCallFunction, 0, |
| 87 kExprReturn, kArity1 | 87 kExprReturn |
| 88 ]) | 88 ]) |
| 89 .exportFunc(); | 89 .exportFunc(); |
| 90 | 90 |
| 91 var first_module = new WasmModuleBuilder(); | 91 var first_module = new WasmModuleBuilder(); |
| 92 var sig_index_2 = first_module.addType(kSig_i_ii); | 92 var sig_index_2 = first_module.addType(kSig_i_ii); |
| 93 first_module | 93 first_module |
| 94 .addImportWithModule("import_module_1", "import_name_1", sig_index_2); | 94 .addImportWithModule("import_module_1", "import_name_1", sig_index_2); |
| 95 first_module | 95 first_module |
| 96 .addFunction("first_export", sig_index_2) | 96 .addFunction("first_export", sig_index_2) |
| 97 .addBody([ | 97 .addBody([ |
| 98 kExprGetLocal, 0, | 98 kExprGetLocal, 0, |
| 99 kExprGetLocal, 1, | 99 kExprGetLocal, 1, |
| 100 kExprCallFunction, kArity2, 1, | 100 kExprCallFunction, 2, |
| 101 kExprReturn, kArity1 | 101 kExprReturn |
| 102 ]) | 102 ]) |
| 103 .exportFunc(); | 103 .exportFunc(); |
| 104 first_module | 104 first_module |
| 105 .addFunction("first_func", sig_index_2) | 105 .addFunction("first_func", sig_index_2) |
| 106 .addBody([ | 106 .addBody([ |
| 107 kExprGetLocal, 0, | 107 kExprGetLocal, 0, |
| 108 kExprGetLocal, 1, | 108 kExprGetLocal, 1, |
| 109 kExprCallImport, kArity2, 0, | 109 kExprCallFunction, 0, |
| 110 kExprReturn, kArity1 | 110 kExprReturn |
| 111 ]); | 111 ]); |
| 112 | 112 |
| 113 var f = second_module | 113 var f = second_module |
| 114 .instantiate({import_module_2: {import_name_2: imported}}) | 114 .instantiate({import_module_2: {import_name_2: imported}}) |
| 115 .exports.second_export; | 115 .exports.second_export; |
| 116 var the_export = first_module | 116 var the_export = first_module |
| 117 .instantiate({import_module_1: {import_name_1: f}}) | 117 .instantiate({import_module_1: {import_name_1: f}}) |
| 118 .exports.first_export; | 118 .exports.first_export; |
| 119 assertEquals(the_export(4, 5), 4); | 119 assertEquals(the_export(4, 5), 4); |
| 120 assertEquals(the_export(-1, 4), -1); | 120 assertEquals(the_export(-1, 4), -1); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 135 var second_module = new WasmModuleBuilder(); | 135 var second_module = new WasmModuleBuilder(); |
| 136 var sig_index_3 = second_module.addType(kSig_i_iii); | 136 var sig_index_3 = second_module.addType(kSig_i_iii); |
| 137 second_module | 137 second_module |
| 138 .addImportWithModule("import_module_2", "import_name_2", sig_index_3); | 138 .addImportWithModule("import_module_2", "import_name_2", sig_index_3); |
| 139 second_module | 139 second_module |
| 140 .addFunction("second_export", sig_index_3) | 140 .addFunction("second_export", sig_index_3) |
| 141 .addBody([ | 141 .addBody([ |
| 142 kExprGetLocal, 0, | 142 kExprGetLocal, 0, |
| 143 kExprGetLocal, 1, | 143 kExprGetLocal, 1, |
| 144 kExprGetLocal, 2, | 144 kExprGetLocal, 2, |
| 145 kExprCallImport, kArity3, 0, | 145 kExprCallFunction, 0, |
| 146 kExprReturn, kArity1 | 146 kExprReturn |
| 147 ]) | 147 ]) |
| 148 .exportFunc(); | 148 .exportFunc(); |
| 149 | 149 |
| 150 var first_module = new WasmModuleBuilder(); | 150 var first_module = new WasmModuleBuilder(); |
| 151 var sig_index_2 = first_module.addType(kSig_i_ii); | 151 var sig_index_2 = first_module.addType(kSig_i_ii); |
| 152 first_module | 152 first_module |
| 153 .addImportWithModule("import_module_1", "import_name_1", sig_index_2); | 153 .addImportWithModule("import_module_1", "import_name_1", sig_index_2); |
| 154 first_module | 154 first_module |
| 155 .addFunction("first_export", sig_index_2) | 155 .addFunction("first_export", sig_index_2) |
| 156 .addBody([ | 156 .addBody([ |
| 157 kExprGetLocal, 0, | 157 kExprGetLocal, 0, |
| 158 kExprGetLocal, 1, | 158 kExprGetLocal, 1, |
| 159 kExprCallFunction, kArity2, 1, | 159 kExprCallFunction, 2, |
| 160 kExprReturn, kArity1 | 160 kExprReturn |
| 161 ]) | 161 ]) |
| 162 .exportFunc(); | 162 .exportFunc(); |
| 163 first_module | 163 first_module |
| 164 .addFunction("first_func", sig_index_2) | 164 .addFunction("first_func", sig_index_2) |
| 165 .addBody([ | 165 .addBody([ |
| 166 kExprGetLocal, 0, | 166 kExprGetLocal, 0, |
| 167 kExprGetLocal, 1, | 167 kExprGetLocal, 1, |
| 168 kExprCallImport, kArity2, 0, | 168 kExprCallFunction, 0, |
| 169 kExprReturn, kArity1 | 169 kExprReturn |
| 170 ]); | 170 ]); |
| 171 | 171 |
| 172 var f = second_module | 172 var f = second_module |
| 173 .instantiate({import_module_2: {import_name_2: imported}}) | 173 .instantiate({import_module_2: {import_name_2: imported}}) |
| 174 .exports.second_export; | 174 .exports.second_export; |
| 175 var the_export = first_module | 175 var the_export = first_module |
| 176 .instantiate({import_module_1: {import_name_1: f}}) | 176 .instantiate({import_module_1: {import_name_1: f}}) |
| 177 .exports.first_export; | 177 .exports.first_export; |
| 178 assertEquals(the_export(5, 6), 11); | 178 assertEquals(the_export(5, 6), 11); |
| 179 assertEquals(the_export(-1, -4), -5); | 179 assertEquals(the_export(-1, -4), -5); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 193 | 193 |
| 194 var second_module = new WasmModuleBuilder(); | 194 var second_module = new WasmModuleBuilder(); |
| 195 var sig_index_2 = second_module.addType(kSig_d_dd); | 195 var sig_index_2 = second_module.addType(kSig_d_dd); |
| 196 second_module | 196 second_module |
| 197 .addImportWithModule("import_module_2", "import_name_2", sig_index_2); | 197 .addImportWithModule("import_module_2", "import_name_2", sig_index_2); |
| 198 second_module | 198 second_module |
| 199 .addFunction("second_export", sig_index_2) | 199 .addFunction("second_export", sig_index_2) |
| 200 .addBody([ | 200 .addBody([ |
| 201 kExprGetLocal, 0, | 201 kExprGetLocal, 0, |
| 202 kExprGetLocal, 1, | 202 kExprGetLocal, 1, |
| 203 kExprCallImport, kArity2, 0, | 203 kExprCallFunction, 0, |
| 204 kExprReturn, kArity1 | 204 kExprReturn |
| 205 ]) | 205 ]) |
| 206 .exportFunc(); | 206 .exportFunc(); |
| 207 | 207 |
| 208 var first_module = new WasmModuleBuilder(); | 208 var first_module = new WasmModuleBuilder(); |
| 209 var sig_index_2 = first_module.addType(kSig_i_ii); | 209 var sig_index_2 = first_module.addType(kSig_i_ii); |
| 210 first_module | 210 first_module |
| 211 .addImportWithModule("import_module_1", "import_name_1", sig_index_2); | 211 .addImportWithModule("import_module_1", "import_name_1", sig_index_2); |
| 212 first_module | 212 first_module |
| 213 .addFunction("first_export", sig_index_2) | 213 .addFunction("first_export", sig_index_2) |
| 214 .addBody([ | 214 .addBody([ |
| 215 kExprGetLocal, 0, | 215 kExprGetLocal, 0, |
| 216 kExprGetLocal, 1, | 216 kExprGetLocal, 1, |
| 217 kExprCallFunction, kArity2, 1, | 217 kExprCallFunction, 2, |
| 218 kExprReturn, kArity1 | 218 kExprReturn |
| 219 ]) | 219 ]) |
| 220 .exportFunc(); | 220 .exportFunc(); |
| 221 first_module | 221 first_module |
| 222 .addFunction("first_func", sig_index_2) | 222 .addFunction("first_func", sig_index_2) |
| 223 .addBody([ | 223 .addBody([ |
| 224 kExprGetLocal, 0, | 224 kExprGetLocal, 0, |
| 225 kExprGetLocal, 1, | 225 kExprGetLocal, 1, |
| 226 kExprCallImport, kArity2, 0, | 226 kExprCallFunction, 0, |
| 227 kExprReturn, kArity1 | 227 kExprReturn |
| 228 ]); | 228 ]); |
| 229 | 229 |
| 230 var f = second_module | 230 var f = second_module |
| 231 .instantiate({import_module_2: {import_name_2: imported}}) | 231 .instantiate({import_module_2: {import_name_2: imported}}) |
| 232 .exports.second_export; | 232 .exports.second_export; |
| 233 var the_export = first_module | 233 var the_export = first_module |
| 234 .instantiate({import_module_1: {import_name_1: f}}) | 234 .instantiate({import_module_1: {import_name_1: f}}) |
| 235 .exports.first_export; | 235 .exports.first_export; |
| 236 assertEquals(the_export(2.8, 9.1), 11); | 236 assertEquals(the_export(2.8, 9.1), 11); |
| 237 assertEquals(the_export(-1.7, -2.5), -3); | 237 assertEquals(the_export(-1.7, -2.5), -3); |
| 238 assertEquals(the_export(0.0, 0.0), 0); | 238 assertEquals(the_export(0.0, 0.0), 0); |
| 239 assertEquals(the_export(2, -2), 0); | 239 assertEquals(the_export(2, -2), 0); |
| 240 assertEquals(%CheckWasmWrapperElision(the_export, expect_no_elison), true); | 240 assertEquals(%CheckWasmWrapperElision(the_export, expect_no_elison), true); |
| 241 })(); | 241 })(); |
| OLD | NEW |