예제 #1
0
        private SmallType Copy()
        {
            var st = new SmallType(Namespace, Name, IsValueType)
            {
                _fields               = _fields,
                GenericTypeArgs       = GenericTypeArgs,
                GenericTypeParameters = GenericTypeParameters,
                _elementType          = _elementType,
                _systemType           = _systemType,
                Exported              = Exported
            };

            return(st);
        }
예제 #2
0
        public static SmallType RegisterType(string pNamespace, string pName, bool pIsValueType, IList <string> pTypeHints)
        {
            List <SmallType> types = new List <SmallType>();

            foreach (var t in pTypeHints)
            {
                types.Add(CreateGenericParameter(t));
            }

            var st = new SmallType(pNamespace, pName, pIsValueType)
            {
                GenericTypeParameters = types
            };

            _types.AddType(st);
            return(st);
        }
예제 #3
0
        public static SmallType FromSystemType(Type pType)
        {
            if (pType.IsByRef)
            {
                pType = pType.GetElementType();
            }
            var t = _types.FromSystemType(pType);

            if (t != null)
            {
                return(t);
            }

            if (pType.IsArray)
            {
                t = FromSystemType(pType.GetElementType());
                t = t.MakeArrayType();
                return(t);
            }
            else if (pType.IsConstructedGenericType)
            {
                var         ts    = pType.GetGenericArguments();
                SmallType[] types = new SmallType[ts.Length];
                for (int i = 0; i < ts.Length; i++)
                {
                    types[i] = FromSystemType(ts[i]);
                }
                return(CreateTupleOf(types));
            }

            if (pType.IsGenericParameter)
            {
                return(CreateGenericParameter(pType.Name));
            }
            return(null);
        }
예제 #4
0
 public static string CastFunction(SmallType pType1, SmallType pType2)
 {
     return(pType1.ToString() + "___" + pType2.ToString());
 }
예제 #5
0
        public static MethodDefinition AddImportedCast(string pNamespace, SmallType pType1, string pParameterName, SmallType pType2)
        {
            var name = CastFunction(pType1, pType2);
            var md   = AddImportedMethod(pNamespace,
                                         name,
                                         new MethodDefinition.Parameter[] { new MethodDefinition.Parameter(pType1, pParameterName, false) },
                                         new SmallType[] { pType2 },
                                         new List <SmallType>()); //TODO?

            _casts.Add(name);
            return(md);
        }
예제 #6
0
 public static LocalDefinition DefineField(Syntax.IdentifierSyntax pNode, SmallType pType, SmallType pStructType)
 {
     return(LocalDefinition.CreateAsField(pNode, pNode.Value, pType, pStructType));
 }
예제 #7
0
 public static LocalDefinition CreateAsField(SyntaxNode pNode, string pValue, SmallType pType, SmallType pStructType)
 {
     return(new LocalDefinition(false, false, true, pValue, pType, pStructType));
 }
예제 #8
0
 public static LocalDefinition CreateAsParameter(SyntaxNode pNode, bool pIsAddress, string pValue, SmallType pType)
 {
     return(new LocalDefinition(true, pIsAddress, false, pValue, pType, null));
 }
예제 #9
0
 public static LocalDefinition Create(SyntaxNode pNode, string pValue, SmallType pType)
 {
     return(new LocalDefinition(false, false, false, pValue, pType, null));
 }
예제 #10
0
 private LocalDefinition(bool pParm, bool pIsAddress, bool pField, string pValue, SmallType pType, SmallType pStructType)
 {
     Parameter   = pParm;
     IsAddress   = pIsAddress;
     Field       = pField;
     Value       = pValue;
     Type        = pType;
     _structType = pStructType;
 }
예제 #11
0
            public void SetSystemType(SmallType pType, Type pSystemType)
            {
                var key = GetKey(pType.Namespace, pType.Name);

                _types[key] = Tuple.Create(pType, pSystemType);
            }
예제 #12
0
 public Parameter(SmallType pType, string pName, bool pIsRef)
 {
     Type  = pType;
     Name  = pName;
     IsRef = pIsRef;
 }
예제 #13
0
 public FieldDefinition(string pName, SmallType pType)
 {
     Name = pName;
     Type = pType;
 }