| 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 |