コード例 #1
0
ファイル: MarshalType.cs プロジェクト: nt153133/MemoryLib
        static MarshalType()
        {
            IsIntPtr = typeof(T) == typeof(IntPtr);
            RealType = typeof(T);
            if (RealType.IsEnum)
            {
                RealType = RealType.GetEnumUnderlyingType();
            }
            TypeCode = Type.GetTypeCode(RealType);
            Size     = TypeCode == TypeCode.Boolean ? 1 : Marshal.SizeOf(RealType);

            CanBeStoredInRegisters =
                IsIntPtr ||
                TypeCode == TypeCode.Boolean ||
                TypeCode == TypeCode.Byte ||
                TypeCode == TypeCode.Char ||
                TypeCode == TypeCode.Int16 ||
                TypeCode == TypeCode.Int32 ||
                TypeCode == TypeCode.Int64 ||
                TypeCode == TypeCode.Single ||
                TypeCode == TypeCode.UInt16 ||
                TypeCode == TypeCode.UInt32 ||
                TypeCode == TypeCode.UInt64 ||
                TypeCode == TypeCode.SByte;
        }
コード例 #2
0
ファイル: Impromptu.cs プロジェクト: xela-trawets/dynamitey
        public void FauxTypeTest()
        {
            var testProp = new Dictionary <String, Type>()
            {
                { "test", typeof(bool) }
            };


            var propType = new PropretySpecType(testProp);

            var propMembers = propType.GetMemberNames();

            Expect(propMembers, Contains("test"));

            var realType    = new RealType(typeof(ISimpeleClassProps));
            var realMembers = realType.GetMemberNames();

            Expect(realMembers, Contains("Prop2"));



            var aggrType = new AggreType(propType, realType);

            var aggrMembers = aggrType.GetMemberNames();

            Expect(aggrMembers, Contains("Prop2"));
            Expect(aggrMembers, Contains("test"));
        }
コード例 #3
0
        public void Can_Serialize_bytes_as_Hex()
        {
            JsConfig <byte[]> .SerializeFn   = BitConverter.ToString;
            JsConfig <byte[]> .DeSerializeFn = hex =>
            {
                hex = hex.Replace("-", "");
                return(Enumerable.Range(0, hex.Length)
                       .Where(x => x % 2 == 0)
                       .Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
                       .ToArray());
            };

            var dto = new RealType
            {
                Name = "Red",
                Data = new byte[] { 255, 0, 0 }
            };

            var json = dto.ToJson();

            Assert.That(json, Is.StringContaining("FF-00-00"));

            var fromJson = json.FromJson <RealType>();

            Assert.That(fromJson.Data, Is.EquivalentTo(dto.Data));

            JsConfig <byte[]> .SerializeFn   = null;
            JsConfig <byte[]> .DeSerializeFn = null;
            JsConfig.Reset();

            json = dto.ToJson();
            json.Print();
            fromJson = json.FromJson <RealType>();
            Assert.That(fromJson.Data, Is.EquivalentTo(dto.Data));
        }
コード例 #4
0
        public void Can_Serialize_bytes_as_Hex()
        {
            JsConfig<byte[]>.SerializeFn = BitConverter.ToString;
            JsConfig<byte[]>.DeSerializeFn = hex =>
            {
                hex = hex.Replace("-", "");
                return Enumerable.Range(0, hex.Length)
                    .Where(x => x % 2 == 0)
                    .Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
                    .ToArray();
            };

            var dto = new RealType
            {
                Name = "Red",
                Data = new byte[] { 255, 0, 0 }
            };

            var json = dto.ToJson();
            Assert.That(json, Is.StringContaining("FF-00-00"));

            var fromJson = json.FromJson<RealType>();

            Assert.That(fromJson.Data, Is.EquivalentTo(dto.Data));

            JsConfig<byte[]>.SerializeFn = null;
            JsConfig<byte[]>.DeSerializeFn = null;
            JsConfig.Reset();

            json = dto.ToJson();
            json.Print();
            fromJson = json.FromJson<RealType>();
            Assert.That(fromJson.Data, Is.EquivalentTo(dto.Data));
        }
コード例 #5
0
 public TypeParameterSymbolInfo(Type type) : base(type)
 {
     Ordinal = type.GenericParameterPosition;
     HasReferenceTypeConstraint = (type.GenericParameterAttributes & GenericParameterAttributes.ReferenceTypeConstraint) == GenericParameterAttributes.ReferenceTypeConstraint;
     HasValueTypeConstraint     = (type.GenericParameterAttributes & GenericParameterAttributes.NotNullableValueTypeConstraint) == GenericParameterAttributes.NotNullableValueTypeConstraint;
     HasConstructorConstraint   = (type.GenericParameterAttributes & GenericParameterAttributes.DefaultConstructorConstraint) == GenericParameterAttributes.DefaultConstructorConstraint;
     RefKind         = type.GenericParameterAttributes.ConvertToStructure();
     ConstraintTypes = EnumerableExtensions.CreateLazyImmutableArray(() => RealType.GetGenericParameterConstraints().Where(i => i != typeof(ValueType)).Select(i => i.GetSymbolInfo()));
 }
コード例 #6
0
        static public object Parse(this RealType item, string input)
        {
            switch (item)
            {
            case RealType.Float: return(input.ParseFloat());

            case RealType.Double: return(input.ParseDouble());

            case RealType.Decimal: return(input.ParseDecimal());
            }

            throw new UnaccountedBranchException("item", item);
        }
コード例 #7
0
ファイル: 03-Resolver.cs プロジェクト: zwl568633995/MyAutofac
        /// <summary>
        ///
        /// </summary>
        public object GetInstance()
        {
            var constructors = RealType.GetConstructors();
            var parasInfos   = constructors[0].GetParameters();
            var paras        = new List <object>();

            foreach (var parasInfo in parasInfos)
            {
                var obj = GetParameterInstance(parasInfo.ParameterType);
                paras.Add(obj);
            }

            return(constructors[0].Invoke(paras.ToArray()));
        }
コード例 #8
0
        public TypeInspector(Type type)
        {
            Type     = type;
            RealType = Nullable.GetUnderlyingType(Type) ?? Type;

            _typeInfo     = type.GetTypeInfo();
            _realTypeInfo = RealType.GetTypeInfo();

            if (type.IsArray)
            {
                _elementTypeInspector = type.GetElementType().Inspector();
            }

            TypeFlags = BuildTypeFlags();
        }
コード例 #9
0
        public void Can_Serialize_TypeProperties_WithCustomFunction()
        {
            var test = new RealType { Name = "Test", Data = new byte[] { 1, 2, 3, 4, 5 } };

            // Act: now we set a custom function for byte[]
            JsConfig<byte[]>.RawSerializeFn = c =>
                {
                    var temp = new int[c.Length];
                    Array.Copy(c, temp, c.Length);
                    return JsonSerializer.SerializeToString(temp);
                };
            var json = JsonSerializer.SerializeToString(test);

            // Assert:
            Assert.That(json, Is.EquivalentTo("{\"Name\":\"Test\",\"Data\":[1,2,3,4,5]}"));
        }
コード例 #10
0
        public object GetInstance()
        {
            //取得Type的构造函数, 这里为了简便,默认使用最后一个,实际的Autofac默认会使用参数最长的一个
            var constructors = RealType.GetConstructors();
            var paramsInfos  = constructors[constructors.Length - 1].GetParameters();

            List <object> objParams = new List <object>();

            foreach (var parameterInfo in paramsInfos)
            {
                var tempPara = GetParameterInstance(parameterInfo.ParameterType);
                objParams.Add(tempPara);
            }

            //调用构造函数构造对象
            return(constructors[0].Invoke(objParams.ToArray()));
        }
コード例 #11
0
        public void Can_Serialize_TypeProperties_WithCustomFunction()
        {
            var test = new RealType {
                Name = "Test", Data = new byte[] { 1, 2, 3, 4, 5 }
            };

            // Act: now we set a custom function for byte[]
            JsConfig <byte[]> .RawSerializeFn = c =>
            {
                var temp = new int[c.Length];
                Array.Copy(c, temp, c.Length);
                return(JsonSerializer.SerializeToString(temp));
            };
            var json = JsonSerializer.SerializeToString(test);

            // Assert:
            Assert.That(json, Is.EquivalentTo("{\"Name\":\"Test\",\"Data\":[1,2,3,4,5]}"));
        }
コード例 #12
0
        public object GetInstance()
        {
            //取得Type的构造函数, 这里为了简便,默认使用最后一个,实际的Autofac默认会使用参数最长的一个
            var constructors = RealType.GetConstructors();
            var paramsInfos  = constructors[constructors.Length - 1].GetParameters();
            //准备构造函数的参数
            var @params = new List <object>();

            foreach (var parameterInfo in paramsInfos)
            {
                //根据类型,取的参数的实例。本人注:这里根据type自动匹配注册的类型,然后利用委托循环调用,类似递归
                var tempPara = GetParameterInstance(parameterInfo.ParameterType);
                @params.Add(tempPara);
            }

            //调用构造函数构造对象
            return(constructors[0].Invoke(@params.ToArray()));
        }
コード例 #13
0
ファイル: ImportResult.cs プロジェクト: xzaz/FIRE.X
        public DataTable ImportRulesAsDataTable()
        {
            var dt = new DataTable();

            dt.Locale = CultureInfo.InvariantCulture;

            // add the columns
            foreach (var property in RealType.GetProperties())
            {
                dt.Columns.Add(property.Name, Nullable.GetUnderlyingType(property.PropertyType) ?? property.PropertyType);
            }

            // add the rows
            foreach (var row in ImportRules)
            {
                object[] values = RealType.GetProperties().Select(f => f.GetValue(row)).ToArray();
                dt.Rows.Add(values);
            }

            return(dt);
        }
コード例 #14
0
 public IType GetSemiResolvedType(ISessionFactoryImplementor factory)
 {
     return(RealType.GetSemiResolvedType(factory));
 }
コード例 #15
0
 public virtual T Visit(RealType node)
 {
     return(Visit((ScalarType)node));
 }
コード例 #16
0
 public void SetToXMLNode(XmlNode node, object value, ISessionFactoryImplementor factory)
 {
     RealType.SetToXMLNode(node, value, factory);
 }
コード例 #17
0
 public override bool Visit(RealType node)
 {
     Visit((ScalarType)node);
     return(true);
 }
コード例 #18
0
 public object SemiResolve(object value, ISessionImplementor session, object owner)
 {
     return(RealType.SemiResolve(value, session, owner));
 }
コード例 #19
0
 public bool[] ToColumnNullness(object value, IMapping mapping)
 {
     return(RealType.ToColumnNullness(value, mapping));
 }
コード例 #20
0
 public object Replace(object original, object target, ISessionImplementor session, object owner, IDictionary copyCache, ForeignKeyDirection foreignKeyDirection)
 {
     return(RealType.Replace(original, target, session, owner, copyCache, foreignKeyDirection));
 }
コード例 #21
0
 public int Compare(object x, object y, EntityMode?entityMode)
 {
     return(RealType.Compare(x, y, entityMode));
 }
コード例 #22
0
 public object Hydrate(IDataReader rs, string[] names, ISessionImplementor session, object owner)
 {
     return(RealType.Hydrate(rs, names, session, owner));
 }
コード例 #23
0
 public bool IsEqual(object x, object y, EntityMode entityMode)
 {
     return(RealType.IsEqual(x, y, entityMode));
 }
コード例 #24
0
ファイル: Parser.cs プロジェクト: Chris-Hawblitzel/dafny
        void TypeAndToken(out IToken tok, out Type ty, bool inExpressionContext)
        {
            Contract.Ensures(Contract.ValueAtReturn(out tok)!=null); Contract.Ensures(Contract.ValueAtReturn(out ty) != null);
            tok = Token.NoToken;  ty = new BoolType();  /*keep compiler happy*/
            List<Type> gt; List<Type> tupleArgTypes = null;

            switch (la.kind) {
            case 7: {
            Get();
            tok = t;
            break;
            }
            case 8: {
            Get();
            tok = t;  ty = new CharType();
            break;
            }
            case 9: {
            Get();
            tok = t;  ty = new IntType();
            break;
            }
            case 10: {
            Get();
            tok = t;  ty = new UserDefinedType(tok, tok.val, null);
            break;
            }
            case 11: {
            Get();
            tok = t;  ty = new RealType();
            break;
            }
            case 6: {
            Get();
            tok = t;
            int w = StringToInt(tok.val.Substring(2), 0, "bitvectors that wide");
            ty = new BitvectorType(w);

            break;
            }
            case 12: {
            Get();
            tok = t;  ty = new ObjectType();
            break;
            }
            case 14: {
            Get();
            tok = t;
            OptGenericInstantiation(out gt, inExpressionContext);
            if (gt != null && gt.Count > 1) {
             SemErr("set type expects only one type argument");
            }
            ty = new SetType(true, gt != null ?gt[0] : null);

            break;
            }
            case 15: {
            Get();
            tok = t;
            OptGenericInstantiation(out gt, inExpressionContext);
            if (gt != null && gt.Count > 1) {
             SemErr("set type expects only one type argument");
            }
            ty = new SetType(false, gt != null ? gt[0] : null);

            break;
            }
            case 16: {
            Get();
            tok = t;
            OptGenericInstantiation(out gt, inExpressionContext);
            if (gt != null && gt.Count > 1) {
             SemErr("multiset type expects only one type argument");
            }
            ty = new MultiSetType(gt != null ? gt[0] : null);

            break;
            }
            case 17: {
            Get();
            tok = t;
            OptGenericInstantiation(out gt, inExpressionContext);
            if (gt != null && gt.Count > 1) {
             SemErr("seq type expects only one type argument");
            }
            ty = new SeqType(gt != null ? gt[0] : null);

            break;
            }
            case 13: {
            Get();
            tok = t;  ty = new UserDefinedType(tok, tok.val, null);
            break;
            }
            case 18: {
            Get();
            tok = t;
            OptGenericInstantiation(out gt, inExpressionContext);
            if (gt == null) {
             ty = new MapType(true, null, null);
            } else if (gt.Count != 2) {
             SemErr("map type expects two type arguments");
             ty = new MapType(true, gt[0], gt.Count == 1 ? new InferredTypeProxy() : gt[1]);
            } else {
             ty = new MapType(true, gt[0], gt[1]);
            }

            break;
            }
            case 19: {
            Get();
            tok = t;
            OptGenericInstantiation(out gt, inExpressionContext);
            if (gt == null) {
             ty = new MapType(false, null, null);
            } else if (gt.Count != 2) {
             SemErr("imap type expects two type arguments");
             ty = new MapType(false, gt[0], gt.Count == 1 ? new InferredTypeProxy() : gt[1]);
            } else {
             ty = new MapType(false, gt[0], gt[1]);
            }

            break;
            }
            case 5: {
            Get();
            tok = t;
            OptGenericInstantiation(out gt, inExpressionContext);
            int dims = StringToInt(tok.val.Substring(5), 1, "arrays of that many dimensions");
            ty = theBuiltIns.ArrayType(tok, dims, gt, true);

            break;
            }
            case 54: {
            Get();
            tok = t; tupleArgTypes = new List<Type>();
            if (StartOf(6)) {
                Type(out ty);
                tupleArgTypes.Add(ty);
                while (la.kind == 23) {
                    Get();
                    Type(out ty);
                    tupleArgTypes.Add(ty);
                }
            }
            Expect(55);
            if (tupleArgTypes.Count == 1) {
             // just return the type 'ty'
            } else {
             var dims = tupleArgTypes.Count;
             var tmp = theBuiltIns.TupleType(tok, dims, true);  // make sure the tuple type exists
             ty = new UserDefinedType(tok, BuiltIns.TupleTypeName(dims), dims == 0 ? null : tupleArgTypes);
            }

            break;
            }
            case 1: {
            Expression e;
            NameSegmentForTypeName(out e, inExpressionContext);
            tok = t;
            while (la.kind == 28) {
                Get();
                Expect(1);
                tok = t; List<Type> typeArgs;
                OptGenericInstantiation(out typeArgs, inExpressionContext);
                e = new ExprDotName(tok, e, tok.val, typeArgs);
            }
            ty = new UserDefinedType(e.tok, e);
            break;
            }
            default: SynErr(182); break;
            }
            if (IsArrow()) {
            Expect(32);
            tok = t; Type t2;
            Type(out t2);
            if (tupleArgTypes != null) {
             gt = tupleArgTypes;
            } else {
             gt = new List<Type>{ ty };
            }
            ty = new ArrowType(tok, gt, t2);
            theBuiltIns.CreateArrowTypeDecl(gt.Count);

            }
        }
コード例 #25
0
ファイル: Parser.cs プロジェクト: Chris-Hawblitzel/dafny
        void ConstAtomExpression(out Expression e, bool allowSemi, bool allowLambda)
        {
            Contract.Ensures(Contract.ValueAtReturn(out e) != null);
            IToken/*!*/ x;  BigInteger n;   Basetypes.BigDec d;
            e = dummyExpr;  Type toType = null;

            switch (la.kind) {
            case 138: {
            Get();
            e = new LiteralExpr(t, false);
            break;
            }
            case 139: {
            Get();
            e = new LiteralExpr(t, true);
            break;
            }
            case 140: {
            Get();
            e = new LiteralExpr(t);
            break;
            }
            case 2: case 3: {
            Nat(out n);
            e = new LiteralExpr(t, n);
            break;
            }
            case 4: {
            Dec(out d);
            e = new LiteralExpr(t, d);
            break;
            }
            case 20: {
            Get();
            e = new CharLiteralExpr(t, t.val.Substring(1, t.val.Length - 2));
            break;
            }
            case 21: {
            Get();
            bool isVerbatimString;
            string s = Util.RemoveParsedStringQuotes(t.val, out isVerbatimString);
            e = new StringLiteralExpr(t, s, isVerbatimString);

            break;
            }
            case 141: {
            Get();
            e = new ThisExpr(t);
            break;
            }
            case 142: {
            Get();
            x = t;
            Expect(54);
            Expression(out e, true, true);
            Expect(55);
            e = new UnaryOpExpr(x, UnaryOpExpr.Opcode.Fresh, e);
            break;
            }
            case 143: {
            Get();
            x = t;
            Expect(54);
            Expression(out e, true, true);
            Expect(55);
            e = new UnaryOpExpr(x, UnaryOpExpr.Opcode.Allocated, e);
            break;
            }
            case 144: {
            Get();
            x = t; FrameExpression fe; var mod = new List<FrameExpression>();
            Expect(54);
            FrameExpression(out fe, false, false);
            mod.Add(fe);
            while (la.kind == 23) {
                Get();
                FrameExpression(out fe, false, false);
                mod.Add(fe);
            }
            Expect(55);
            e = new UnchangedExpr(x, mod);
            break;
            }
            case 145: {
            Get();
            x = t;
            Expect(54);
            Expression(out e, true, true);
            Expect(55);
            e = new OldExpr(x, e);
            break;
            }
            case 24: {
            Get();
            x = t;
            Expression(out e, true, true, false);
            e = new UnaryOpExpr(x, UnaryOpExpr.Opcode.Cardinality, e);
            Expect(24);
            break;
            }
            case 9: case 11: {
            if (la.kind == 9) {
                Get();
                x = t; toType = new IntType();
            } else {
                Get();
                x = t; toType = new RealType();
            }
            errors.Deprecated(t, string.Format("the syntax \"{0}(expr)\" for type conversions has been deprecated; the new syntax is \"expr as {0}\"", x.val));
            Expect(54);
            Expression(out e, true, true);
            Expect(55);
            e = new ConversionExpr(x, e, toType);
            break;
            }
            case 54: {
            ParensExpression(out e, allowSemi, allowLambda);
            break;
            }
            default: SynErr(262); break;
            }
        }
コード例 #26
0
 public bool IsEqual(object x, object y, EntityMode entityMode, ISessionFactoryImplementor factory)
 {
     return(RealType.IsEqual(x, y, entityMode, factory));
 }
コード例 #27
0
ファイル: Parser.cs プロジェクト: dbremner/dafny
        void ConstAtomExpression(out Expression e, bool allowSemi, bool allowLambda)
        {
            Contract.Ensures(Contract.ValueAtReturn(out e) != null);
            IToken/*!*/ x;  BigInteger n;   Basetypes.BigDec d;
            e = dummyExpr;  Type toType = null;

            switch (la.kind) {
            case 131: {
            Get();
            e = new LiteralExpr(t, false);
            break;
            }
            case 132: {
            Get();
            e = new LiteralExpr(t, true);
            break;
            }
            case 133: {
            Get();
            e = new LiteralExpr(t);
            break;
            }
            case 2: case 3: {
            Nat(out n);
            e = new LiteralExpr(t, n);
            break;
            }
            case 4: {
            Dec(out d);
            e = new LiteralExpr(t, d);
            break;
            }
            case 19: {
            Get();
            e = new CharLiteralExpr(t, t.val.Substring(1, t.val.Length - 2));
            break;
            }
            case 20: {
            Get();
            bool isVerbatimString;
            string s = Util.RemoveParsedStringQuotes(t.val, out isVerbatimString);
            e = new StringLiteralExpr(t, s, isVerbatimString);

            break;
            }
            case 134: {
            Get();
            e = new ThisExpr(t);
            break;
            }
            case 135: {
            Get();
            x = t;
            Expect(50);
            Expression(out e, true, true);
            Expect(51);
            e = new UnaryOpExpr(x, UnaryOpExpr.Opcode.Fresh, e);
            break;
            }
            case 136: {
            Get();
            x = t;
            Expect(50);
            Expression(out e, true, true);
            Expect(51);
            e = new OldExpr(x, e);
            break;
            }
            case 23: {
            Get();
            x = t;
            Expression(out e, true, true);
            e = new UnaryOpExpr(x, UnaryOpExpr.Opcode.Cardinality, e);
            Expect(23);
            break;
            }
            case 8: case 10: {
            if (la.kind == 8) {
                Get();
                x = t; toType = new IntType();
            } else {
                Get();
                x = t; toType = new RealType();
            }
            Expect(50);
            Expression(out e, true, true);
            Expect(51);
            e = new ConversionExpr(x, e, toType);
            break;
            }
            case 50: {
            ParensExpression(out e, allowSemi, allowLambda);
            break;
            }
            default: SynErr(234); break;
            }
        }
コード例 #28
0
 public object ResolveIdentifier(object value, ISessionImplementor session, object owner)
 {
     return(RealType.ResolveIdentifier(value, session, owner));
 }
コード例 #29
0
ファイル: Parser.cs プロジェクト: dbremner/dafny
        void TypeAndToken(out IToken tok, out Type ty)
        {
            Contract.Ensures(Contract.ValueAtReturn(out tok)!=null); Contract.Ensures(Contract.ValueAtReturn(out ty) != null);
            tok = Token.NoToken;  ty = new BoolType();  /*keep compiler happy*/
            List<Type> gt; List<Type> tupleArgTypes = null;

            switch (la.kind) {
            case 6: {
            Get();
            tok = t;
            break;
            }
            case 7: {
            Get();
            tok = t;  ty = new CharType();
            break;
            }
            case 9: {
            Get();
            tok = t;  ty = new NatType();
            break;
            }
            case 8: {
            Get();
            tok = t;  ty = new IntType();
            break;
            }
            case 10: {
            Get();
            tok = t;  ty = new RealType();
            break;
            }
            case 11: {
            Get();
            tok = t;  ty = new ObjectType();
            break;
            }
            case 13: {
            Get();
            tok = t;  gt = new List<Type>();
            if (la.kind == 52) {
                GenericInstantiation(gt);
            }
            if (gt.Count > 1) {
             SemErr("set type expects only one type argument");
            }
            ty = new SetType(true, gt.Count == 1 ? gt[0] : null);

            break;
            }
            case 14: {
            Get();
            tok = t;  gt = new List<Type>();
            if (la.kind == 52) {
                GenericInstantiation(gt);
            }
            if (gt.Count > 1) {
             SemErr("set type expects only one type argument");
            }
            ty = new SetType(false, gt.Count == 1 ? gt[0] : null);

            break;
            }
            case 15: {
            Get();
            tok = t;  gt = new List<Type>();
            if (la.kind == 52) {
                GenericInstantiation(gt);
            }
            if (gt.Count > 1) {
             SemErr("multiset type expects only one type argument");
            }
            ty = new MultiSetType(gt.Count == 1 ? gt[0] : null);

            break;
            }
            case 16: {
            Get();
            tok = t;  gt = new List<Type>();
            if (la.kind == 52) {
                GenericInstantiation(gt);
            }
            if (gt.Count > 1) {
             SemErr("seq type expects only one type argument");
            }
            ty = new SeqType(gt.Count == 1 ? gt[0] : null);

            break;
            }
            case 12: {
            Get();
            tok = t;  ty = new UserDefinedType(tok, tok.val, null);
            break;
            }
            case 17: {
            Get();
            tok = t;  gt = new List<Type>();
            if (la.kind == 52) {
                GenericInstantiation(gt);
            }
            if (gt.Count == 0) {
             ty = new MapType(true, null, null);
            } else if (gt.Count != 2) {
             SemErr("map type expects two type arguments");
             ty = new MapType(true, gt[0], gt.Count == 1 ? new InferredTypeProxy() : gt[1]);
            } else {
             ty = new MapType(true, gt[0], gt[1]);
            }

            break;
            }
            case 18: {
            Get();
            tok = t;  gt = new List<Type>();
            if (la.kind == 52) {
                GenericInstantiation(gt);
            }
            if (gt.Count == 0) {
             ty = new MapType(false, null, null);
            } else if (gt.Count != 2) {
             SemErr("imap type expects two type arguments");
             ty = new MapType(false, gt[0], gt.Count == 1 ? new InferredTypeProxy() : gt[1]);
            } else {
             ty = new MapType(false, gt[0], gt[1]);
            }

            break;
            }
            case 5: {
            Get();
            tok = t;  gt = null;
            if (la.kind == 52) {
                gt = new List<Type>();
                GenericInstantiation(gt);
            }
            int dims = tok.val.Length == 5 ? 1 : int.Parse(tok.val.Substring(5));
            ty = theBuiltIns.ArrayType(tok, dims, gt, true);

            break;
            }
            case 50: {
            Get();
            tok = t; tupleArgTypes = new List<Type>();
            if (StartOf(3)) {
                Type(out ty);
                tupleArgTypes.Add(ty);
                while (la.kind == 22) {
                    Get();
                    Type(out ty);
                    tupleArgTypes.Add(ty);
                }
            }
            Expect(51);
            if (tupleArgTypes.Count == 1) {
             // just return the type 'ty'
            } else {
             var dims = tupleArgTypes.Count;
             var tmp = theBuiltIns.TupleType(tok, dims, true);  // make sure the tuple type exists
             ty = new UserDefinedType(tok, BuiltIns.TupleTypeName(dims), dims == 0 ? null : tupleArgTypes);
            }

            break;
            }
            case 1: {
            Expression e; tok = t;
            NameSegmentForTypeName(out e);
            tok = t;
            while (la.kind == 27) {
                Get();
                Expect(1);
                tok = t; List<Type> typeArgs = null;
                if (la.kind == 52) {
                    typeArgs = new List<Type>();
                    GenericInstantiation(typeArgs);
                }
                e = new ExprDotName(tok, e, tok.val, typeArgs);
            }
            ty = new UserDefinedType(e.tok, e);
            break;
            }
            default: SynErr(164); break;
            }
            if (la.kind == 30) {
            Type t2;
            Get();
            tok = t;
            Type(out t2);
            if (tupleArgTypes != null) {
             gt = tupleArgTypes;
            } else {
             gt = new List<Type>{ ty };
            }
            ty = new ArrowType(tok, gt, t2);
            theBuiltIns.CreateArrowTypeDecl(gt.Count);

            }
        }
コード例 #30
0
 public int GetHashCode(object x, EntityMode entityMode, ISessionFactoryImplementor factory)
 {
     return(RealType.GetHashCode(x, entityMode, factory));
 }
コード例 #31
0
 public override int GetHashCode()
 {
     return(RealType.GetHashCode() ^ MemberName.GetHashCode());
 }
コード例 #32
0
 public virtual bool IsEqualTo(Type entityType, sbyte idIndex, Object id)
 {
     return(Id.Equals(id) && RealType.Equals(entityType) && IdNameIndex == idIndex);
 }
コード例 #33
0
 public void Read(BinaryReader br)
 {
     _offset = (int)br.BaseStream.Position;
     _type   = (RealType)br.ReadUInt32();
     _length = br.ReadInt32();
 }
コード例 #34
0
 public object FromXMLNode(XmlNode xml, IMapping factory)
 {
     return(RealType.FromXMLNode(xml, factory));
 }
コード例 #35
0
 public object Replace(object original, object target, ISessionImplementor session, object owner, IDictionary copiedAlready)
 {
     return(RealType.Replace(original, target, session, owner, copiedAlready));
 }
コード例 #36
0
 public int GetHashCode(object x, EntityMode entityMode)
 {
     return(RealType.GetHashCode(x, entityMode));
 }