Lines Matching +full:- +full:stdlib
2 // Use of this source code is governed by a BSD-style license that can be
5 #include "src/asmjs/asm-js.h"
7 #include "src/asmjs/asm-names.h"
8 #include "src/asmjs/asm-parser.h"
11 #include "src/base/platform/elapsed-timer.h"
14 #include "src/codegen/unoptimized-compilation-info.h"
15 #include "src/common/assert-scope.h"
16 #include "src/common/message-template.h"
22 #include "src/objects/heap-number-inl.h"
23 #include "src/objects/objects-inl.h"
24 #include "src/parsing/parse-info.h"
25 #include "src/parsing/scanner-character-streams.h"
27 #include "src/wasm/wasm-engine.h"
28 #include "src/wasm/wasm-js.h"
29 #include "src/wasm/wasm-limits.h"
30 #include "src/wasm/wasm-module-builder.h"
31 #include "src/wasm/wasm-objects-inl.h"
32 #include "src/wasm/wasm-result.h"
41 Handle<Object> StdlibMathMember(Isolate* isolate, Handle<JSReceiver> stdlib, in StdlibMathMember() argument
44 isolate->factory()->InternalizeString(base::StaticCharVector("Math"))); in StdlibMathMember()
45 Handle<Object> math = JSReceiver::GetDataProperty(isolate, stdlib, math_name); in StdlibMathMember()
46 if (!math->IsJSReceiver()) return isolate->factory()->undefined_value(); in StdlibMathMember()
53 bool AreStdlibMembersValid(Isolate* isolate, Handle<JSReceiver> stdlib, in AreStdlibMembersValid() argument
58 Handle<Name> name = isolate->factory()->Infinity_string(); in AreStdlibMembersValid()
59 Handle<Object> value = JSReceiver::GetDataProperty(isolate, stdlib, name); in AreStdlibMembersValid()
60 if (!value->IsNumber() || !std::isinf(value->Number())) return false; in AreStdlibMembersValid()
64 Handle<Name> name = isolate->factory()->NaN_string(); in AreStdlibMembersValid()
65 Handle<Object> value = JSReceiver::GetDataProperty(isolate, stdlib, name); in AreStdlibMembersValid()
66 if (!value->IsNaN()) return false; in AreStdlibMembersValid()
71 Handle<Name> name(isolate->factory()->InternalizeString( \ in AreStdlibMembersValid()
73 Handle<Object> value = StdlibMathMember(isolate, stdlib, name); \ in AreStdlibMembersValid()
74 if (!value->IsJSFunction()) return false; \ in AreStdlibMembersValid()
75 SharedFunctionInfo shared = Handle<JSFunction>::cast(value)->shared(); \ in AreStdlibMembersValid()
81 isolate->builtins()->code(Builtin::kMath##FName)); \ in AreStdlibMembersValid()
88 Handle<Name> name(isolate->factory()->InternalizeString( \ in AreStdlibMembersValid()
90 Handle<Object> value = StdlibMathMember(isolate, stdlib, name); \ in AreStdlibMembersValid()
91 if (!value->IsNumber() || value->Number() != const_value) return false; \ in AreStdlibMembersValid()
99 Handle<Name> name(isolate->factory()->InternalizeString( \ in AreStdlibMembersValid()
101 Handle<Object> value = JSReceiver::GetDataProperty(isolate, stdlib, name); \ in AreStdlibMembersValid()
102 if (!value->IsJSFunction()) return false; \ in AreStdlibMembersValid()
104 if (!func.is_identical_to(isolate->fname())) return false; \ in AreStdlibMembersValid()
123 Isolate* isolate = script->GetIsolate(); in Report()
125 Handle<String> text_object = isolate->factory()->InternalizeUtf8String(text); in Report()
129 message->set_error_level(level); in Report()
140 CHECK_NE(-1, length); in ReportCompilationSuccess()
150 parse_info->pending_error_handler()->ReportWarningAt( in ReportCompilationFailure()
160 CHECK_NE(-1, length); in ReportInstantiationSuccess()
189 : UnoptimizedCompilationJob(parse_info->stack_limit(), parse_info, in AsmJsCompilationJob()
232 Utf16CharacterStream* stream = parse_info()->character_stream(); in ExecuteJobImpl()
234 if (stream->can_access_heap()) { in ExecuteJobImpl()
237 stream->Seek(compilation_info()->literal()->start_position()); in ExecuteJobImpl()
246 module_ = compile_zone->New<wasm::ZoneBuffer>(compile_zone); in ExecuteJobImpl()
247 parser.module_builder()->WriteTo(module_); in ExecuteJobImpl()
248 asm_offsets_ = compile_zone->New<wasm::ZoneBuffer>(compile_zone); in ExecuteJobImpl()
249 parser.module_builder()->WriteAsmJsOffsetTable(asm_offsets_); in ExecuteJobImpl()
252 module_source_size_ = compilation_info()->literal()->end_position() - in ExecuteJobImpl()
253 compilation_info()->literal()->start_position(); in ExecuteJobImpl()
264 isolate->factory()->NewHeapNumberFromBits(stdlib_uses_.ToIntegral()); in FinalizeJobImpl()
270 ->SyncCompileTranslatedAsmJs( in FinalizeJobImpl()
272 wasm::ModuleWireBytes(module_->begin(), module_->end()), in FinalizeJobImpl()
274 shared_info->language_mode()) in FinalizeJobImpl()
279 compilation_info()->SetAsmWasmData(result); in FinalizeJobImpl()
282 ReportCompilationSuccess(handle(Script::cast(shared_info->script()), isolate), in FinalizeJobImpl()
283 shared_info->StartPosition(), compile_time_, in FinalizeJobImpl()
284 module_->size()); in FinalizeJobImpl()
289 isolate->counters()->asm_module_size_bytes()->AddSample(module_source_size_); in RecordHistograms()
302 // Enforce engine-limited and flag-limited maximum allocation size. in IsValidAsmjsMemorySize()
304 // Enforce power-of-2 sizes for 2^12 - 2^24. in IsValidAsmjsMemorySize()
319 Handle<JSReceiver> stdlib, in InstantiateAsmWasm() argument
324 Handle<HeapNumber> uses_bitset(wasm_data->uses_bitset(), isolate); in InstantiateAsmWasm()
325 Handle<Script> script(Script::cast(shared->script()), isolate); in InstantiateAsmWasm()
330 wasm_engine->FinalizeTranslatedAsmJs(isolate, wasm_data, script); in InstantiateAsmWasm()
334 int position = shared->StartPosition(); in InstantiateAsmWasm()
337 if (IsResumableFunction(shared->scope_info().function_kind())) { in InstantiateAsmWasm()
343 // Check that all used stdlib members are valid. in InstantiateAsmWasm()
347 uses_bitset->value_as_bits(kRelaxedLoad)); in InstantiateAsmWasm()
349 if (stdlib.is_null()) { in InstantiateAsmWasm()
353 if (!AreStdlibMembersValid(isolate, stdlib, stdlib_uses, in InstantiateAsmWasm()
355 ReportInstantiationFailure(script, position, "Unexpected stdlib member"); in InstantiateAsmWasm()
367 if (memory->is_shared()) { in InstantiateAsmWasm()
376 memory->set_is_asmjs_memory(true); in InstantiateAsmWasm()
377 memory->set_is_detachable(false); in InstantiateAsmWasm()
378 size_t size = memory->byte_length(); in InstantiateAsmWasm()
390 wasm_engine->SyncInstantiate(isolate, &thrower, module, foreign, memory); in InstantiateAsmWasm()
394 if (isolate->has_pending_exception()) isolate->clear_pending_exception(); in InstantiateAsmWasm()
412 isolate->factory()->InternalizeUtf8String(AsmJs::kSingleFunctionName)); in InstantiateAsmWasm()
416 !single_function.ToHandleChecked()->IsUndefined(isolate)) { in InstantiateAsmWasm()
424 DCHECK(instance->exports_object().IsJSObject()); in InstantiateAsmWasm()
425 return handle(instance->exports_object(), isolate); in InstantiateAsmWasm()