mirror of
https://github.com/Samsung/escargot.git
synced 2026-06-22 10:01:50 +00:00
Implement runtime part of dynamic-import
* Implement one of parsing error of module * Fix one of stack usage error on FunctionObjectInlines Signed-off-by: Seonghyun Kim <sh8281.kim@samsung.com>
This commit is contained in:
parent
5dc636380c
commit
ba4763e888
12 changed files with 181 additions and 347 deletions
|
|
@ -530,6 +530,37 @@ public:
|
|||
}
|
||||
loadedModules.push_back(std::make_tuple(path, relatedContext, PersistentRefHolder<ScriptRef>(loadedModule)));
|
||||
}
|
||||
|
||||
virtual void hostImportModuleDynamically(ContextRef* relatedContext, ScriptRef* referrer, StringRef* src, PromiseObjectRef* promise) override
|
||||
{
|
||||
LoadModuleResult loadedModuleResult = onLoadModule(relatedContext, referrer, src);
|
||||
|
||||
Evaluator::EvaluatorResult executionResult = Evaluator::execute(relatedContext, [](ExecutionStateRef* state, LoadModuleResult loadedModuleResult, PromiseObjectRef* promise) -> ValueRef* {
|
||||
if (loadedModuleResult.script) {
|
||||
if (loadedModuleResult.script.value()->isExecuted()) {
|
||||
if (loadedModuleResult.script.value()->wasThereErrorOnModuleEvaluation()) {
|
||||
state->throwException(loadedModuleResult.script.value()->moduleEvaluationError());
|
||||
}
|
||||
} else {
|
||||
loadedModuleResult.script.value()->execute(state);
|
||||
}
|
||||
} else {
|
||||
state->throwException(ErrorObjectRef::create(state, loadedModuleResult.errorCode, loadedModuleResult.errorMessage));
|
||||
}
|
||||
return loadedModuleResult.script.value()->moduleNamespace(state);
|
||||
},
|
||||
loadedModuleResult, promise);
|
||||
|
||||
Evaluator::execute(relatedContext, [](ExecutionStateRef* state, bool isSuccessful, ValueRef* value, PromiseObjectRef* promise) -> ValueRef* {
|
||||
if (isSuccessful) {
|
||||
promise->fulfill(state, value);
|
||||
} else {
|
||||
promise->reject(state, value);
|
||||
}
|
||||
return ValueRef::createUndefined();
|
||||
},
|
||||
executionResult.isSuccessful(), executionResult.isSuccessful() ? executionResult.result : executionResult.error.value(), promise);
|
||||
}
|
||||
};
|
||||
|
||||
static bool evalScript(ContextRef* context, StringRef* str, StringRef* fileName, bool shouldPrintScriptResult, bool isModule)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue