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);
        }
示例#3
0
        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);
            }
            //
        }