OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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 #include "src/asmjs/asm-js.h" | 5 #include "src/asmjs/asm-js.h" |
6 | 6 |
7 #include "src/api-natives.h" | 7 #include "src/api-natives.h" |
8 #include "src/api.h" | 8 #include "src/api.h" |
9 #include "src/asmjs/asm-typer.h" | 9 #include "src/asmjs/asm-typer.h" |
10 #include "src/asmjs/asm-wasm-builder.h" | 10 #include "src/asmjs/asm-wasm-builder.h" |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
49 compiled_module = result.val->CompileFunctions(isolate, thrower); | 49 compiled_module = result.val->CompileFunctions(isolate, thrower); |
50 } | 50 } |
51 | 51 |
52 if (result.val) delete result.val; | 52 if (result.val) delete result.val; |
53 return compiled_module; | 53 return compiled_module; |
54 } | 54 } |
55 | 55 |
56 Handle<i::Object> StdlibMathMember(i::Isolate* isolate, | 56 Handle<i::Object> StdlibMathMember(i::Isolate* isolate, |
57 Handle<JSReceiver> stdlib, | 57 Handle<JSReceiver> stdlib, |
58 Handle<Name> name) { | 58 Handle<Name> name) { |
| 59 if (stdlib.is_null()) { |
| 60 return Handle<i::Object>(); |
| 61 } |
59 Handle<i::Name> math_name( | 62 Handle<i::Name> math_name( |
60 isolate->factory()->InternalizeOneByteString(STATIC_CHAR_VECTOR("Math"))); | 63 isolate->factory()->InternalizeOneByteString(STATIC_CHAR_VECTOR("Math"))); |
61 MaybeHandle<i::Object> maybe_math = i::Object::GetProperty(stdlib, math_name); | 64 MaybeHandle<i::Object> maybe_math = i::Object::GetProperty(stdlib, math_name); |
62 if (maybe_math.is_null()) { | 65 if (maybe_math.is_null()) { |
63 return Handle<i::Object>(); | 66 return Handle<i::Object>(); |
64 } | 67 } |
65 Handle<i::Object> math = maybe_math.ToHandleChecked(); | 68 Handle<i::Object> math = maybe_math.ToHandleChecked(); |
66 if (!math->IsJSReceiver()) { | 69 if (!math->IsJSReceiver()) { |
67 return Handle<i::Object>(); | 70 return Handle<i::Object>(); |
68 } | 71 } |
(...skipping 13 matching lines...) Expand all Loading... |
82 switch (member_kind) { | 85 switch (member_kind) { |
83 case wasm::AsmTyper::StandardMember::kNone: | 86 case wasm::AsmTyper::StandardMember::kNone: |
84 case wasm::AsmTyper::StandardMember::kModule: | 87 case wasm::AsmTyper::StandardMember::kModule: |
85 case wasm::AsmTyper::StandardMember::kStdlib: | 88 case wasm::AsmTyper::StandardMember::kStdlib: |
86 case wasm::AsmTyper::StandardMember::kHeap: | 89 case wasm::AsmTyper::StandardMember::kHeap: |
87 case wasm::AsmTyper::StandardMember::kFFI: { | 90 case wasm::AsmTyper::StandardMember::kFFI: { |
88 // Nothing to check for these. | 91 // Nothing to check for these. |
89 return true; | 92 return true; |
90 } | 93 } |
91 case wasm::AsmTyper::StandardMember::kInfinity: { | 94 case wasm::AsmTyper::StandardMember::kInfinity: { |
| 95 if (stdlib.is_null()) { |
| 96 return false; |
| 97 } |
92 Handle<i::Name> name(isolate->factory()->InternalizeOneByteString( | 98 Handle<i::Name> name(isolate->factory()->InternalizeOneByteString( |
93 STATIC_CHAR_VECTOR("Infinity"))); | 99 STATIC_CHAR_VECTOR("Infinity"))); |
94 MaybeHandle<i::Object> maybe_value = i::Object::GetProperty(stdlib, name); | 100 MaybeHandle<i::Object> maybe_value = i::Object::GetProperty(stdlib, name); |
95 if (maybe_value.is_null()) { | 101 if (maybe_value.is_null()) { |
96 return false; | 102 return false; |
97 } | 103 } |
98 Handle<i::Object> value = maybe_value.ToHandleChecked(); | 104 Handle<i::Object> value = maybe_value.ToHandleChecked(); |
99 return value->IsNumber() && std::isinf(value->Number()); | 105 return value->IsNumber() && std::isinf(value->Number()); |
100 } | 106 } |
101 case wasm::AsmTyper::StandardMember::kNaN: { | 107 case wasm::AsmTyper::StandardMember::kNaN: { |
| 108 if (stdlib.is_null()) { |
| 109 return false; |
| 110 } |
102 Handle<i::Name> name(isolate->factory()->InternalizeOneByteString( | 111 Handle<i::Name> name(isolate->factory()->InternalizeOneByteString( |
103 STATIC_CHAR_VECTOR("NaN"))); | 112 STATIC_CHAR_VECTOR("NaN"))); |
104 MaybeHandle<i::Object> maybe_value = i::Object::GetProperty(stdlib, name); | 113 MaybeHandle<i::Object> maybe_value = i::Object::GetProperty(stdlib, name); |
105 if (maybe_value.is_null()) { | 114 if (maybe_value.is_null()) { |
106 return false; | 115 return false; |
107 } | 116 } |
108 Handle<i::Object> value = maybe_value.ToHandleChecked(); | 117 Handle<i::Object> value = maybe_value.ToHandleChecked(); |
109 return value->IsNaN(); | 118 return value->IsNaN(); |
110 } | 119 } |
111 #define STDLIB_MATH_FUNC(CamelName, fname) \ | 120 #define STDLIB_MATH_FUNC(CamelName, fname) \ |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
250 continue; | 259 continue; |
251 } | 260 } |
252 } | 261 } |
253 } | 262 } |
254 foreign_args_array[j] = undefined; | 263 foreign_args_array[j] = undefined; |
255 } | 264 } |
256 i::MaybeHandle<i::Object> retval = i::Execution::Call( | 265 i::MaybeHandle<i::Object> retval = i::Execution::Call( |
257 isolate, init, undefined, foreign_globals->length(), foreign_args_array); | 266 isolate, init, undefined, foreign_globals->length(), foreign_args_array); |
258 delete[] foreign_args_array; | 267 delete[] foreign_args_array; |
259 | 268 |
260 if (retval.is_null()) { | 269 DCHECK(!retval.is_null()); |
261 thrower.Error( | 270 |
262 "WASM.instantiateModuleFromAsm(): foreign init function failed"); | |
263 return MaybeHandle<Object>(); | |
264 } | |
265 return maybe_module_object; | 271 return maybe_module_object; |
266 } | 272 } |
267 | 273 |
268 } // namespace internal | 274 } // namespace internal |
269 } // namespace v8 | 275 } // namespace v8 |
OLD | NEW |