public override object VisitMemberDeclarationStatement([NotNull] ClepsParser.MemberDeclarationStatementContext context) { string memberName = context.FieldName.Name.Text; ClepsClassBuilder classBuilder = ClassManager.GetClassBuilder(FullyQualifiedClassName); if (classBuilder == null) { //This is probably because of some earlier error. Return gracefully return(false); } if (classBuilder.DoesClassContainMember(memberName)) { string errorMessage = String.Format("Class {0} has multiple definitions of member {1}", FullyQualifiedClassName, memberName); Status.AddError(new CompilerError(FileName, context.Start.Line, context.Start.Column, errorMessage)); //Don't process this member return(false); } bool isStatic = context.STATIC() != null; ClepsType memberType = Visit(context.typename()) as ClepsType; if (memberType.IsFunctionType) { CodeGenerator.CreateMethod(FullyQualifiedClassName, isStatic, memberType, memberName); } classBuilder.AddNewMember(isStatic, memberType, memberName); return(true); }
public override object VisitMemberDeclarationStatement([NotNull] ClepsParser.MemberDeclarationStatementContext context) { string memberName; if (context.OPERATOR() == null) { memberName = context.FieldName.Name.Text; } else { memberName = context.OperatorName.GetText(); } ClepsClassBuilder classBuilder = ClassManager.GetClassBuilder(FullyQualifiedClassName); if (classBuilder == null) { //This is probably because of some earlier error. Return gracefully return(false); } bool isStatic = context.STATIC() != null; ClepsType memberType = Visit(context.typename()) as ClepsType; string cantAddReason; if (!classBuilder.CanAddMemberToClass(memberName, memberType, isStatic, out cantAddReason)) { Status.AddError(new CompilerError(FileName, context.Start.Line, context.Start.Column, cantAddReason)); //Don't process this member return(false); } bool isConst = context.CONST() != null; classBuilder.AddNewMember(isStatic, new ClepsVariable(memberName, memberType, isConst)); EntryPointManager.NewMemberSeen(FullyQualifiedClassName, memberName, memberType, isStatic); return(true); }