diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-04-10 09:28:39 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-04-10 09:28:39 +0000 |
commit | 32761a6cee1d0dee366b885b7b9c777e67885688 (patch) | |
tree | d6bec92bebfb216f4126356e55518842c2f476a1 /Source/JavaScriptCore/runtime/Completion.cpp | |
parent | a4e969f4965059196ca948db781e52f7cfebf19e (diff) | |
download | WebKitGtk-tarball-32761a6cee1d0dee366b885b7b9c777e67885688.tar.gz |
webkitgtk-2.4.11webkitgtk-2.4.11
Diffstat (limited to 'Source/JavaScriptCore/runtime/Completion.cpp')
-rw-r--r-- | Source/JavaScriptCore/runtime/Completion.cpp | 155 |
1 files changed, 13 insertions, 142 deletions
diff --git a/Source/JavaScriptCore/runtime/Completion.cpp b/Source/JavaScriptCore/runtime/Completion.cpp index c178a4a52..9d7fd1a74 100644 --- a/Source/JavaScriptCore/runtime/Completion.cpp +++ b/Source/JavaScriptCore/runtime/Completion.cpp @@ -26,19 +26,11 @@ #include "CallFrame.h" #include "CodeProfiling.h" #include "Debugger.h" -#include "Exception.h" -#include "IdentifierInlines.h" #include "Interpreter.h" -#include "JSCInlines.h" #include "JSGlobalObject.h" -#include "JSInternalPromise.h" -#include "JSInternalPromiseDeferred.h" #include "JSLock.h" -#include "JSModuleRecord.h" -#include "ModuleAnalyzer.h" -#include "ModuleLoaderObject.h" +#include "Operations.h" #include "Parser.h" -#include "ScriptProfilingScope.h" #include <wtf/WTFThreadData.h> namespace JSC { @@ -46,7 +38,7 @@ namespace JSC { bool checkSyntax(ExecState* exec, const SourceCode& source, JSValue* returnedException) { JSLockHolder lock(exec); - RELEASE_ASSERT(exec->vm().atomicStringTable() == wtfThreadData().atomicStringTable()); + RELEASE_ASSERT(exec->vm().identifierTable == wtfThreadData().currentIdentifierTable()); ProgramExecutable* program = ProgramExecutable::create(exec, source); JSObject* error = program->checkSyntax(exec); @@ -62,40 +54,24 @@ bool checkSyntax(ExecState* exec, const SourceCode& source, JSValue* returnedExc bool checkSyntax(VM& vm, const SourceCode& source, ParserError& error) { JSLockHolder lock(vm); - RELEASE_ASSERT(vm.atomicStringTable() == wtfThreadData().atomicStringTable()); - return !!parse<ProgramNode>( - &vm, source, Identifier(), JSParserBuiltinMode::NotBuiltin, - JSParserStrictMode::NotStrict, SourceParseMode::ProgramMode, SuperBinding::NotNeeded, error); + RELEASE_ASSERT(vm.identifierTable == wtfThreadData().currentIdentifierTable()); + RefPtr<ProgramNode> programNode = parse<ProgramNode>(&vm, source, 0, Identifier(), JSParseNormal, JSParseProgramCode, error); + return programNode; } -bool checkModuleSyntax(ExecState* exec, const SourceCode& source, ParserError& error) -{ - VM& vm = exec->vm(); - JSLockHolder lock(vm); - RELEASE_ASSERT(vm.atomicStringTable() == wtfThreadData().atomicStringTable()); - std::unique_ptr<ModuleProgramNode> moduleProgramNode = parse<ModuleProgramNode>( - &vm, source, Identifier(), JSParserBuiltinMode::NotBuiltin, - JSParserStrictMode::Strict, SourceParseMode::ModuleAnalyzeMode, SuperBinding::NotNeeded, error); - if (!moduleProgramNode) - return false; - - PrivateName privateName(PrivateName::Description, "EntryPointModule"); - ModuleAnalyzer moduleAnalyzer(exec, Identifier::fromUid(privateName), source, moduleProgramNode->varDeclarations(), moduleProgramNode->lexicalVariables()); - moduleAnalyzer.analyze(*moduleProgramNode); - return true; -} - -JSValue evaluate(ExecState* exec, const SourceCode& source, JSValue thisValue, NakedPtr<Exception>& returnedException) +JSValue evaluate(ExecState* exec, const SourceCode& source, JSValue thisValue, JSValue* returnedException) { JSLockHolder lock(exec); - RELEASE_ASSERT(exec->vm().atomicStringTable() == wtfThreadData().atomicStringTable()); + RELEASE_ASSERT(exec->vm().identifierTable == wtfThreadData().currentIdentifierTable()); RELEASE_ASSERT(!exec->vm().isCollectorBusy()); CodeProfiling profile(source); ProgramExecutable* program = ProgramExecutable::create(exec, source); if (!program) { - returnedException = exec->vm().exception(); + if (returnedException) + *returnedException = exec->vm().exception(); + exec->vm().clearException(); return jsUndefined(); } @@ -106,7 +82,9 @@ JSValue evaluate(ExecState* exec, const SourceCode& source, JSValue thisValue, N JSValue result = exec->interpreter()->execute(program, exec, thisObj); if (exec->hadException()) { - returnedException = exec->exception(); + if (returnedException) + *returnedException = exec->exception(); + exec->clearException(); return jsUndefined(); } @@ -115,111 +93,4 @@ JSValue evaluate(ExecState* exec, const SourceCode& source, JSValue thisValue, N return result; } -JSValue profiledEvaluate(ExecState* exec, ProfilingReason reason, const SourceCode& source, JSValue thisValue, NakedPtr<Exception>& returnedException) -{ - ScriptProfilingScope profilingScope(exec->vmEntryGlobalObject(), reason); - return evaluate(exec, source, thisValue, returnedException); -} - -static Symbol* createSymbolForEntryPointModule(VM& vm) -{ - // Generate the unique key for the source-provided module. - PrivateName privateName(PrivateName::Description, "EntryPointModule"); - return Symbol::create(vm, *privateName.uid()); -} - -static JSInternalPromise* rejectPromise(ExecState* exec, JSGlobalObject* globalObject) -{ - ASSERT(exec->hadException()); - JSValue exception = exec->exception()->value(); - exec->clearException(); - JSInternalPromiseDeferred* deferred = JSInternalPromiseDeferred::create(exec, globalObject); - deferred->reject(exec, exception); - return deferred->promise(); -} - -static JSInternalPromise* loadAndEvaluateModule(const JSLockHolder&, ExecState* exec, JSGlobalObject* globalObject, JSValue moduleName, JSValue referrer) -{ - return globalObject->moduleLoader()->loadAndEvaluateModule(exec, moduleName, referrer); -} - -static JSInternalPromise* loadAndEvaluateModule(const JSLockHolder& lock, ExecState* exec, JSGlobalObject* globalObject, const Identifier& moduleName) -{ - return loadAndEvaluateModule(lock, exec, globalObject, identifierToJSValue(exec->vm(), moduleName), jsUndefined()); -} - -JSInternalPromise* loadAndEvaluateModule(ExecState* exec, const String& moduleName) -{ - JSLockHolder lock(exec); - RELEASE_ASSERT(exec->vm().atomicStringTable() == wtfThreadData().atomicStringTable()); - RELEASE_ASSERT(!exec->vm().isCollectorBusy()); - - return loadAndEvaluateModule(lock, exec, exec->vmEntryGlobalObject(), Identifier::fromString(exec, moduleName)); -} - -JSInternalPromise* loadAndEvaluateModule(ExecState* exec, const SourceCode& source) -{ - JSLockHolder lock(exec); - RELEASE_ASSERT(exec->vm().atomicStringTable() == wtfThreadData().atomicStringTable()); - RELEASE_ASSERT(!exec->vm().isCollectorBusy()); - - Symbol* key = createSymbolForEntryPointModule(exec->vm()); - - JSGlobalObject* globalObject = exec->vmEntryGlobalObject(); - - // Insert the given source code to the ModuleLoader registry as the fetched registry entry. - globalObject->moduleLoader()->provide(exec, key, ModuleLoaderObject::Status::Fetch, source.view().toString()); - if (exec->hadException()) - return rejectPromise(exec, globalObject); - - return loadAndEvaluateModule(lock, exec, globalObject, key, jsUndefined()); -} - -static JSInternalPromise* loadModule(const JSLockHolder&, ExecState* exec, JSGlobalObject* globalObject, JSValue moduleName, JSValue referrer) -{ - return globalObject->moduleLoader()->loadModule(exec, moduleName, referrer); -} - -static JSInternalPromise* loadModule(const JSLockHolder& lock, ExecState* exec, JSGlobalObject* globalObject, const Identifier& moduleName) -{ - return loadModule(lock, exec, globalObject, identifierToJSValue(exec->vm(), moduleName), jsUndefined()); -} - -JSInternalPromise* loadModule(ExecState* exec, const String& moduleName) -{ - JSLockHolder lock(exec); - RELEASE_ASSERT(exec->vm().atomicStringTable() == wtfThreadData().atomicStringTable()); - RELEASE_ASSERT(!exec->vm().isCollectorBusy()); - - return loadModule(lock, exec, exec->vmEntryGlobalObject(), Identifier::fromString(exec, moduleName)); -} - -JSInternalPromise* loadModule(ExecState* exec, const SourceCode& source) -{ - JSLockHolder lock(exec); - RELEASE_ASSERT(exec->vm().atomicStringTable() == wtfThreadData().atomicStringTable()); - RELEASE_ASSERT(!exec->vm().isCollectorBusy()); - - Symbol* key = createSymbolForEntryPointModule(exec->vm()); - - JSGlobalObject* globalObject = exec->vmEntryGlobalObject(); - - // Insert the given source code to the ModuleLoader registry as the fetched registry entry. - globalObject->moduleLoader()->provide(exec, key, ModuleLoaderObject::Status::Fetch, source.view().toString()); - if (exec->hadException()) - return rejectPromise(exec, globalObject); - - return loadModule(lock, exec, globalObject, key, jsUndefined()); -} - -JSInternalPromise* linkAndEvaluateModule(ExecState* exec, const Identifier& moduleKey) -{ - JSLockHolder lock(exec); - RELEASE_ASSERT(exec->vm().atomicStringTable() == wtfThreadData().atomicStringTable()); - RELEASE_ASSERT(!exec->vm().isCollectorBusy()); - - JSGlobalObject* globalObject = exec->vmEntryGlobalObject(); - return globalObject->moduleLoader()->linkAndEvaluateModule(exec, identifierToJSValue(exec->vm(), moduleKey)); -} - } // namespace JSC |