Ignore:
Timestamp:
Aug 10, 2015, 1:24:35 PM (10 years ago)
Author:
[email protected]
Message:

Let's rename FunctionBodyNode
https://bugs.webkit.org/show_bug.cgi?id=147292

Reviewed by Mark Lam & Saam Barati.

FunctionBodyNode => FunctionMetadataNode

Make FunctionMetadataNode inherit from Node instead of StatementNode
because a FunctionMetadataNode can appear in expression context and does
not have a next statement.

(I decided to continue allocating FunctionMetadataNode in the AST arena,
and to retain "Node" in its name, because it really is a parsing
construct, and we transform its data before consuming it elsewhere.

There is still room for a future patch to distill and simplify the
metadata we track about functions between FunDeclNode/FuncExprNode,
FunctionMetadataNode, and UnlinkedFunctionExecutable. But this is a start.)

  • builtins/BuiltinExecutables.cpp:

(JSC::BuiltinExecutables::createExecutableInternal):

  • bytecode/UnlinkedCodeBlock.cpp:

(JSC::generateFunctionCodeBlock):
(JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):

  • bytecode/UnlinkedCodeBlock.h:
  • bytecompiler/BytecodeGenerator.cpp:

(JSC::BytecodeGenerator::generate):
(JSC::BytecodeGenerator::BytecodeGenerator):
(JSC::BytecodeGenerator::emitNewArray):
(JSC::BytecodeGenerator::emitNewFunction):
(JSC::BytecodeGenerator::emitNewFunctionExpression):

  • bytecompiler/BytecodeGenerator.h:

(JSC::BytecodeGenerator::makeFunction):

  • bytecompiler/NodesCodegen.cpp:

(JSC::EvalNode::emitBytecode):
(JSC::FunctionNode::emitBytecode):
(JSC::FunctionBodyNode::emitBytecode): Deleted.

  • parser/ASTBuilder.h:

(JSC::ASTBuilder::createFunctionExpr):
(JSC::ASTBuilder::createFunctionBody):

  • parser/NodeConstructors.h:

(JSC::FunctionParameters::FunctionParameters):
(JSC::FuncExprNode::FuncExprNode):
(JSC::FuncDeclNode::FuncDeclNode):

  • parser/Nodes.cpp:

(JSC::EvalNode::EvalNode):
(JSC::FunctionMetadataNode::FunctionMetadataNode):
(JSC::FunctionMetadataNode::finishParsing):
(JSC::FunctionMetadataNode::setEndPosition):
(JSC::FunctionBodyNode::FunctionBodyNode): Deleted.
(JSC::FunctionBodyNode::finishParsing): Deleted.
(JSC::FunctionBodyNode::setEndPosition): Deleted.

  • parser/Nodes.h:

(JSC::FuncExprNode::body):
(JSC::FuncDeclNode::body):

  • parser/Parser.h:

(JSC::Parser::isFunctionMetadataNode):
(JSC::Parser::next):
(JSC::Parser<LexerType>::parse):
(JSC::Parser::isFunctionBodyNode): Deleted.

  • runtime/CodeCache.cpp:

(JSC::CodeCache::getFunctionExecutableFromGlobalCode):

  • runtime/CodeCache.h:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/builtins/BuiltinExecutables.cpp

    r187205 r188219  
    8585    RELEASE_ASSERT(funcExpr);
    8686    RELEASE_ASSERT(funcExpr->isFuncExprNode());
    87     FunctionBodyNode* body = static_cast<FuncExprNode*>(funcExpr)->body();
     87    FunctionMetadataNode* metadata = static_cast<FuncExprNode*>(funcExpr)->metadata();
    8888    RELEASE_ASSERT(!program->hasCapturedVariables());
    8989   
    90     body->setEndPosition(positionBeforeLastNewline);
    91     RELEASE_ASSERT(body);
    92     RELEASE_ASSERT(body->ident().isNull());
     90    metadata->setEndPosition(positionBeforeLastNewline);
     91    RELEASE_ASSERT(metadata);
     92    RELEASE_ASSERT(metadata->ident().isNull());
    9393   
    9494    // This function assumes an input string that would result in a single anonymous function expression.
    95     body->setEndPosition(positionBeforeLastNewline);
    96     RELEASE_ASSERT(body);
     95    metadata->setEndPosition(positionBeforeLastNewline);
     96    RELEASE_ASSERT(metadata);
    9797    for (const auto& closedVariable : program->closedVariables()) {
    9898        if (closedVariable == m_vm.propertyNames->arguments.impl())
     
    102102            continue;
    103103    }
    104     body->overrideName(name);
     104    metadata->overrideName(name);
    105105    VariableEnvironment dummyTDZVariables;
    106     UnlinkedFunctionExecutable* functionExecutable = UnlinkedFunctionExecutable::create(&m_vm, source, body, kind, constructAbility, dummyTDZVariables, WTF::move(sourceOverride));
     106    UnlinkedFunctionExecutable* functionExecutable = UnlinkedFunctionExecutable::create(&m_vm, source, metadata, kind, constructAbility, dummyTDZVariables, WTF::move(sourceOverride));
    107107    functionExecutable->m_nameValue.set(m_vm, functionExecutable, jsString(&m_vm, name.string()));
    108108    return functionExecutable;
Note: See TracChangeset for help on using the changeset viewer.