mirror of
https://github.com/Samsung/escargot.git
synced 2026-06-22 10:01:50 +00:00
Fix class bugs (#418)
* Fixup class parsing error check in esprima
* Class cannot have property named 'prototype'
* When define {getter, setter} in interpreter, property key can be symbol
* Reorder properties on class constructor
* Fixup public API
Signed-off-by: seonghyun kim <sh8281.kim@samsung.com>
This commit is contained in:
parent
f6e1e5d966
commit
98d3c9c26e
19 changed files with 222 additions and 99 deletions
|
|
@ -39,19 +39,9 @@
|
|||
namespace Escargot {
|
||||
|
||||
ScriptFunctionObject::ScriptFunctionObject(ExecutionState& state, CodeBlock* codeBlock, LexicalEnvironment* outerEnv, bool isConstructor, bool isGenerator)
|
||||
: FunctionObject(state,
|
||||
((isConstructor || isGenerator) ? (ESCARGOT_OBJECT_BUILTIN_PROPERTY_NUMBER + 3) : (ESCARGOT_OBJECT_BUILTIN_PROPERTY_NUMBER + 2)) + (codeBlock->isStrict() ? 2 : 0))
|
||||
: ScriptFunctionObject(state, codeBlock, outerEnv,
|
||||
((isConstructor || isGenerator) ? (ESCARGOT_OBJECT_BUILTIN_PROPERTY_NUMBER + 3) : (ESCARGOT_OBJECT_BUILTIN_PROPERTY_NUMBER + 2)) + (codeBlock->isStrict() ? 2 : 0))
|
||||
{
|
||||
m_codeBlock = codeBlock;
|
||||
m_outerEnvironment = outerEnv;
|
||||
|
||||
if (m_outerEnvironment) {
|
||||
ASSERT(m_outerEnvironment->isAllocatedOnHeap());
|
||||
if (m_outerEnvironment->record()->isDeclarativeEnvironmentRecord() && m_outerEnvironment->record()->asDeclarativeEnvironmentRecord()->isFunctionEnvironmentRecord()) {
|
||||
ASSERT(!m_outerEnvironment->record()->asDeclarativeEnvironmentRecord()->asFunctionEnvironmentRecord()->isFunctionEnvironmentRecordOnStack());
|
||||
}
|
||||
}
|
||||
|
||||
initStructureAndValues(state, isConstructor, isGenerator);
|
||||
|
||||
if (isGenerator) {
|
||||
|
|
@ -61,6 +51,22 @@ ScriptFunctionObject::ScriptFunctionObject(ExecutionState& state, CodeBlock* cod
|
|||
}
|
||||
}
|
||||
|
||||
ScriptFunctionObject::ScriptFunctionObject(ExecutionState& state, CodeBlock* codeBlock, LexicalEnvironment* outerEnvironment, size_t defaultPropertyCount)
|
||||
: FunctionObject(state, defaultPropertyCount)
|
||||
{
|
||||
m_codeBlock = codeBlock;
|
||||
m_outerEnvironment = outerEnvironment;
|
||||
|
||||
#ifdef NDEBUG
|
||||
if (m_outerEnvironment) {
|
||||
ASSERT(m_outerEnvironment->isAllocatedOnHeap());
|
||||
if (m_outerEnvironment->record()->isDeclarativeEnvironmentRecord() && m_outerEnvironment->record()->asDeclarativeEnvironmentRecord()->isFunctionEnvironmentRecord()) {
|
||||
ASSERT(!m_outerEnvironment->record()->asDeclarativeEnvironmentRecord()->asFunctionEnvironmentRecord()->isFunctionEnvironmentRecordOnStack());
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
NEVER_INLINE void ScriptFunctionObject::generateByteCodeBlock(ExecutionState& state)
|
||||
{
|
||||
Vector<CodeBlock*, GCUtil::gc_malloc_allocator<CodeBlock*>>& v = state.context()->compiledCodeBlocks();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue