summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/runtime/Completion.cpp
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2016-04-10 09:28:39 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2016-04-10 09:28:39 +0000
commit32761a6cee1d0dee366b885b7b9c777e67885688 (patch)
treed6bec92bebfb216f4126356e55518842c2f476a1 /Source/JavaScriptCore/runtime/Completion.cpp
parenta4e969f4965059196ca948db781e52f7cfebf19e (diff)
downloadWebKitGtk-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.cpp155
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