haikuwebkit/LayoutTests/js/class-syntax-call.html

9 lines
209 B
HTML
Raw Permalink Normal View History

Class constructor should throw TypeError when "called" https://bugs.webkit.org/show_bug.cgi?id=142566 Reviewed by Michael Saboff. Source/JavaScriptCore: Added ConstructorKind::None to denote code that doesn't belong to an ES6 class. This allows BytecodeGenerator to emit code to throw TypeError when generating code block to call ES6 class constructors. Most of changes are about increasing the number of bits to store ConstructorKind from one bit to two bits. * bytecode/UnlinkedCodeBlock.cpp: (JSC::generateFunctionCodeBlock): (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable): (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock): * bytecode/UnlinkedCodeBlock.h: (JSC::ExecutableInfo::ExecutableInfo): (JSC::ExecutableInfo::needsActivation): (JSC::ExecutableInfo::usesEval): (JSC::ExecutableInfo::isStrictMode): (JSC::ExecutableInfo::isConstructor): (JSC::ExecutableInfo::isBuiltinFunction): (JSC::ExecutableInfo::constructorKind): (JSC::UnlinkedFunctionExecutable::constructorKind): (JSC::UnlinkedCodeBlock::constructorKind): (JSC::UnlinkedFunctionExecutable::constructorKindIsDerived): Deleted. (JSC::UnlinkedCodeBlock::constructorKindIsDerived): Deleted. * bytecompiler/BytecodeGenerator.cpp: (JSC::BytecodeGenerator::generate): Don't emit bytecode when we had already emitted code to throw TypeError. (JSC::BytecodeGenerator::BytecodeGenerator): Emit code to throw TypeError when generating code to call. (JSC::BytecodeGenerator::emitReturn): * bytecompiler/BytecodeGenerator.h: (JSC::BytecodeGenerator::constructorKind): (JSC::BytecodeGenerator::constructorKindIsDerived): Deleted. * bytecompiler/NodesCodegen.cpp: (JSC::ThisNode::emitBytecode): (JSC::FunctionCallValueNode::emitBytecode): * parser/Nodes.cpp: (JSC::FunctionBodyNode::FunctionBodyNode): * parser/Nodes.h: * parser/Parser.cpp: (JSC::Parser<LexerType>::parseFunctionInfo): Renamed the incoming function argument to ownerClassKind. Set constructorKind to Base or Derived only if we're parsing a constructor. (JSC::Parser<LexerType>::parseFunctionDeclaration): (JSC::Parser<LexerType>::parseClass): Don't parse static methods using MethodMode since that would result in BytecodeGenerator erroneously treating static method named "constructor" as a class constructor. (JSC::Parser<LexerType>::parsePropertyMethod): (JSC::Parser<LexerType>::parsePrimaryExpression): * parser/Parser.h: * parser/ParserModes.h: * runtime/Executable.h: (JSC::EvalExecutable::executableInfo): (JSC::ProgramExecutable::executableInfo): LayoutTests: Added tests for calling class constructors. * TestExpectations: Skipped the test since ES6 class syntax isn't enabled by default. * js/class-syntax-call-expected.txt: Added. * js/class-syntax-call.html: Added. * js/script-tests/class-syntax-call.js: Added. Canonical link: https://commits.webkit.org/160694@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@181490 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-03-13 23:01:51 +00:00
<!DOCTYPE html>
<html>
<body>
<script src="../resources/js-test-pre.js"></script>
<script src="script-tests/class-syntax-call.js"></script>
<script src="../resources/js-test-post.js"></script>
</body>
</html>