public SpringVariableDeclarationElement(CParser.DirectDeclaratorContext ctx) { context = ctx; var ctxIdentifier = ctx.Identifier(); if (ctxIdentifier != null) { name = ctxIdentifier.GetText(); } DeclaredElement = new CVariableDeclared(this); }
public override void ExitDeclarator(CParser.DeclaratorContext context) { if (context.gccDeclaratorExtension().Count > 0) { throw new SemanticException("gcc Declarator Extensions not supported"); } bool isPointer = context.pointer() != null; CParser.DirectDeclaratorContext directDecltor = context.directDeclarator(); if (directDecltor.Identifier() != null) { CDeclaration.PushIdentifierDeclarator(isPointer, directDecltor.GetText()); } else if (directDecltor.declarator() != null) { CDeclaration.NestedDeclarator(isPointer); } else if (directDecltor.GetText().EndsWith("*]")) { SematicError(context, "VLA not supported"); } else { if (directDecltor.directDeclarator().Identifier() != null) { CDeclaration.PushIdentifierDeclarator(false, directDecltor.directDeclarator().GetText()); } if (directDecltor.GetText().EndsWith(")")) { if (directDecltor.identifierList() != null) { SematicError(context, "old style (K&R) style functions not supported"); } else if (directDecltor.parameterTypeList() != null) { CDeclaration.EndFunctionDeclarator(isPointer, GetParameterListCount(directDecltor.parameterTypeList().parameterList())); } else { CDeclaration.EndFunctionDeclarator(isPointer, 0); } } else { bool hasAssgnExpr = directDecltor.assignmentExpression() != null; int numTypeQualifiers = GetTypeQualifierListCount(directDecltor.typeQualifierList()); CDeclaration.ArrayDeclarator(isPointer, numTypeQualifiers, hasAssgnExpr); } } }
public override Unit VisitDirectDeclarator(CParser.DirectDeclaratorContext context) { if (context.Identifier() != null) { _builder.ResetCurrentLexeme(context.SourceInterval.a, context.SourceInterval.a); var mark = _builder.Mark(); base.VisitChildren(context); _builder.Done(mark, SpringDeclarationNodeElement.NODE_TYPE, context); } else { VisitChildren(context); } return(Unit.Instance); }