package parsing.C.Modules.builder;
import java.util.Stack;
import org.antlr.v4.runtime.ParserRuleContext;
import parsing.ParseTreeUtils;
import parsing.C.Functions.builder.ParameterListBuilder;
import antlr.C.ModuleParser.Function_nameContext;
import antlr.C.ModuleParser.Function_param_listContext;
import antlr.C.ModuleParser.Parameter_declContext;
import antlr.C.ModuleParser.Return_typeContext;
import ast.ASTNodeBuilder;
import ast.expressions.Identifier;
import ast.functionDef.FunctionDef;
import ast.functionDef.ParameterList;
import ast.functionDef.ReturnType;
import ast.statements.CompoundStatement;
public class FunctionDefBuilder extends ASTNodeBuilder
{
FunctionDef thisItem;
ParameterListBuilder paramListBuilder = new ParameterListBuilder();
@Override
public void createNew(ParserRuleContext ctx)
{
item = new FunctionDef();
item.initializeFromContext(ctx);
thisItem = (FunctionDef) item;
}
public void setName(Function_nameContext ctx,
Stack<ASTNodeBuilder> itemStack)
{
thisItem.name = new Identifier();
thisItem.name.initializeFromContext(ctx);
}
public void setReturnType(Return_typeContext ctx,
Stack<ASTNodeBuilder> itemStack)
{
ReturnType returnType = new ReturnType();
returnType.initializeFromContext(ctx);
returnType
.setBaseType(ParseTreeUtils.childTokenString(ctx.type_name()));
returnType.setCompleteType(ParseTreeUtils.childTokenString(ctx));
thisItem.setReturnType(returnType);
}
public void setParameterList(Function_param_listContext ctx,
Stack<ASTNodeBuilder> itemStack)
{
paramListBuilder.createNew(ctx);
thisItem.setParameterList((ParameterList) paramListBuilder.getItem());
}
public void addParameter(Parameter_declContext ctx,
Stack<ASTNodeBuilder> itemStack)
{
paramListBuilder.addParameter(ctx, itemStack);
}
public void setContent(CompoundStatement functionContent)
{
thisItem.setContent(functionContent);
}
}