// Do the work to create the function definition in addition to // parsing the body (compound_statement). bool HlslGrammar::acceptFunctionDefinition(TFunction& function, TIntermNode*& node) { TFunction* functionDeclarator = parseContext.handleFunctionDeclarator(token.loc, function, false /* not prototype */); // This does a symbol table push node = parseContext.handleFunctionDefinition(token.loc, *functionDeclarator); // compound_statement TIntermAggregate* functionBody = nullptr; if (acceptCompoundStatement(functionBody)) { node = intermediate.growAggregate(node, functionBody); intermediate.setAggregateOperator(node, EOpFunction, functionDeclarator->getType(), token.loc); node->getAsAggregate()->setName(functionDeclarator->getMangledName().c_str()); parseContext.symbolTable.pop(nullptr); return true; } return false; }