mirror of
https://github.com/Samsung/escargot.git
synced 2026-06-22 10:01:50 +00:00
Optimize execution speed (#374)
* Set ALWAYS_INLINE flag for SmallValue <-> Value convertor function * Implement ScriptGeneratorFunctionObject for remove if-statement in FunctionCall * Remove calling Object::call in CallFunction, CallFunctionWithReceiver opcode * if function uses global variable only, we should not use heap env for the function * Don't use bitfield for ExecutionState::m_inStrictMode because we have only one flag at there. * Remove useless submodules (test262-master, test262-harness) Signed-off-by: seonghyun kim <sh8281.kim@samsung.com>
This commit is contained in:
parent
9ff6ee34c5
commit
bffa9402b1
17 changed files with 195 additions and 59 deletions
|
|
@ -117,8 +117,7 @@ NEVER_INLINE void ScriptFunctionObject::generateByteCodeBlock(ExecutionState& st
|
|||
|
||||
Value ScriptFunctionObject::call(ExecutionState& state, const Value& thisValue, const size_t argc, NULLABLE Value* argv)
|
||||
{
|
||||
ASSERT(!codeBlock()->hasCallNativeFunctionCode());
|
||||
return FunctionObjectProcessCallGenerator::processCall<ScriptFunctionObject, false, false, false, FunctionObjectThisValueBinder, FunctionObjectNewTargetBinder, FunctionObjectReturnValueBinder>(state, this, thisValue, argc, argv, nullptr);
|
||||
return FunctionObjectProcessCallGenerator::processCall<ScriptFunctionObject, false, false, false, false, FunctionObjectThisValueBinder, FunctionObjectNewTargetBinder, FunctionObjectReturnValueBinder>(state, this, thisValue, argc, argv, nullptr);
|
||||
}
|
||||
|
||||
class ScriptFunctionObjectObjectThisValueBinderWithConstruct {
|
||||
|
|
@ -149,7 +148,6 @@ public:
|
|||
|
||||
Object* ScriptFunctionObject::construct(ExecutionState& state, const size_t argc, NULLABLE Value* argv, Object* newTarget)
|
||||
{
|
||||
ASSERT(!codeBlock()->hasCallNativeFunctionCode());
|
||||
// Assert: Type(newTarget) is Object.
|
||||
ASSERT(newTarget->isObject());
|
||||
ASSERT(newTarget->isConstructor());
|
||||
|
|
@ -178,7 +176,7 @@ Object* ScriptFunctionObject::construct(ExecutionState& state, const size_t argc
|
|||
|
||||
// We don't need to setNewTarget here
|
||||
// only `super` keyword uses getNewTarget on executing
|
||||
return FunctionObjectProcessCallGenerator::processCall<ScriptFunctionObject, true, false, false, ScriptFunctionObjectObjectThisValueBinderWithConstruct, FunctionObjectNewTargetBinder, ScriptFunctionObjectReturnValueBinderWithConstruct>(state, this, Value(thisArgument), argc, argv, newTarget).asObject();
|
||||
return FunctionObjectProcessCallGenerator::processCall<ScriptFunctionObject, false, true, false, false, ScriptFunctionObjectObjectThisValueBinderWithConstruct, FunctionObjectNewTargetBinder, ScriptFunctionObjectReturnValueBinderWithConstruct>(state, this, Value(thisArgument), argc, argv, newTarget).asObject();
|
||||
}
|
||||
|
||||
void ScriptFunctionObject::generateArgumentsObject(ExecutionState& state, size_t argc, Value* argv, FunctionEnvironmentRecord* environmentRecordWillArgumentsObjectBeLocatedIn, Value* stackStorage, bool isMapped)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue