protected XCodeTypeReference BuildDataType(XSharpParser.DatatypeContext context) { // // Datatype is ptrDatatype // or arrayDatatype // or simpleDatatype // or nullableDatatype // they all have a TypeName XSharpParser.TypeNameContext tn = null; var sName = context.GetText(); if (context is XSharpParser.PtrDatatypeContext) { XSharpParser.PtrDatatypeContext ptrData = (XSharpParser.PtrDatatypeContext)context; tn = ptrData.TypeName; } else if (context is XSharpParser.ArrayDatatypeContext) { XSharpParser.ArrayDatatypeContext aData = (XSharpParser.ArrayDatatypeContext)context; tn = aData.TypeName; } else if (context is XSharpParser.SimpleDatatypeContext) { XSharpParser.SimpleDatatypeContext sdt = (XSharpParser.SimpleDatatypeContext)context; tn = sdt.TypeName; } else if (context is XSharpParser.NullableDatatypeContext) { XSharpParser.NullableDatatypeContext ndc = context as XSharpParser.NullableDatatypeContext; tn = ndc.TypeName; } XCodeTypeReference expr = null; if (tn != null) { if (tn.NativeType != null) { expr = BuildNativeType(tn.NativeType); } else if (tn.XType != null) { expr = BuildXBaseType(tn.XType); } else if (tn.Name != null) { expr = BuildName(tn.Name); } } else { expr = new XCodeTypeReference(typeof(void)); } if (sName.Contains("[") || sName.Contains(">")) { // work around to fix type problems with generics and arrays expr.UserData[XSharpCodeConstants.USERDATA_CODE] = sName; } return(expr); }
protected XCodeTypeReference BuildDataType(XSharpParser.DatatypeContext context) { // // Datatype is ptrDatatype // or arrayDatatype // or simpleDatatype // or nullableDatatype // they all have a TypeName XSharpParser.TypeNameContext tn = null; if (context is XSharpParser.PtrDatatypeContext) { XSharpParser.PtrDatatypeContext ptrData = (XSharpParser.PtrDatatypeContext)context; tn = ptrData.TypeName; } else if (context is XSharpParser.ArrayDatatypeContext) { XSharpParser.ArrayDatatypeContext aData = (XSharpParser.ArrayDatatypeContext)context; tn = aData.TypeName; } else if (context is XSharpParser.SimpleDatatypeContext) { XSharpParser.SimpleDatatypeContext sdt = (XSharpParser.SimpleDatatypeContext)context; tn = sdt.TypeName; } else if (context is XSharpParser.NullableDatatypeContext) { XSharpParser.NullableDatatypeContext ndc = context as XSharpParser.NullableDatatypeContext; tn = ndc.TypeName; } XCodeTypeReference expr = null; if (tn != null) { if (tn.NativeType != null) { expr = BuildNativeType(tn.NativeType); } else if (tn.XType != null) { expr = BuildXBaseType(tn.XType); } else if (tn.Name != null) { expr = BuildName(tn.Name); } } else { expr = new XCodeTypeReference(typeof(void)); } // return(expr); }
public override void EnterClassvars([NotNull] XSharpParser.ClassvarsContext context) { // PROTECT a,b as STRING // copy type from b to a var classVarModifiers = decodeClassVarModifiers(context.Modifiers); if (context._Vars.Count > 1) { XSharpParser.DatatypeContext dtc = null; foreach (var classvar in context._Vars.Reverse()) { if (classvar.DataType != null) { dtc = classvar.DataType; } else { classvar.DataType = dtc; } } } foreach (var varContext in context._Vars) { var field = new XCodeMemberField(); var fieldType = BuildDataType(varContext.DataType); field.Name = varContext.Id.GetText(); field.Type = fieldType; field.Attributes = classVarModifiers; if (varContext.Initializer != null) { field.InitExpression = BuildExpression(varContext.Initializer, false); SaveSourceCode(field.InitExpression, varContext.Initializer); } FillCodeDomDesignerData(field, varContext.Start.Line, varContext.Start.Column); // write original source for the attributes AddMemberAttributes(field, classVarModifiers, context.Modifiers); writeTrivia(field, context); SaveSourceCode(field, varContext); // FieldList[currentContext].Add(field); } // }