Esempio n. 1
0
        internal Expr ParseTypedLiteralArray()
        {
            var p = Mark();

            TypeExpr t = null;

            if (Expect(TokenType.LT))
            {
                t = ParseType();

                if (!Expect(TokenType.GT))
                {
                    t = null;
                }
            }

            if (t != null && La() == TokenType.LCURLY)
            {
                var la = ParseLiteralArray(t);

                return(la);
            }

            Rewind(p);

            return(null);
        }
Esempio n. 2
0
        public NullableType(TypeExpr underlying, Location l)
        {
            this.underlying = underlying;
            loc             = l;

            eclass = ExprClass.Type;
        }
Esempio n. 3
0
        FullNamedExpression ResolveMemberName(IMemberContext context, MemberName mn)
        {
            if (mn.Left == null)
            {
                return(context.LookupNamespaceOrType(mn.Name, mn.Arity, LookupMode.Probing, Location.Null));
            }

            var left = ResolveMemberName(context, mn.Left);
            var ns   = left as NamespaceExpression;

            if (ns != null)
            {
                return(ns.LookupTypeOrNamespace(context, mn.Name, mn.Arity, LookupMode.Probing, Location.Null));
            }

            TypeExpr texpr = left as TypeExpr;

            if (texpr != null)
            {
                var found = MemberCache.FindNestedType(texpr.Type, mn.Name, mn.Arity);
                if (found != null)
                {
                    return(new TypeExpression(found, Location.Null));
                }

                return(null);
            }

            return(left);
        }
Esempio n. 4
0
 public override void WriteToStream(IndentStream stream)
 {
     stream.Write("CREATE TYPE ");
     Name.WriteToStream(stream);
     stream.Write(" AS ");
     TypeExpr.WriteToStream(stream);
 }
Esempio n. 5
0
        internal VarDecl ParseForDecl(bool implied)
        {
            Token n = null;

            if (La() == TokenType.ID || TokenAttr.IsSoftKeyword(La()))
            {
                n = ConsumeAndGet();
            }
            Require(n, ErrorCode.Expected, "identifier");

            Expr init = null;

            if (Require(TokenType.ASSIGN_OP))
            {
                init = ParseExpression();
            }

            TypeExpr type = null;

            if (!implied && Expect(TokenType.AS))
            {
                type = Require(ParseType(), ErrorCode.Expected, "type");
            }

            return(implied ? new ImpliedVarDecl(n, init)
                : new VarDecl(n, null, type, init));
        }
Esempio n. 6
0
 public override AstStatement Clone()
 => CopyValuesTo(new AstConstantDeclaration(
                     Pattern.Clone(),
                     TypeExpr?.Clone(),
                     Initializer.Clone(),
                     Documentation,
                     Directives?.Select(d => d.Clone()).ToList()));
Esempio n. 7
0
            public override FullNamedExpression Resolve(IResolveContext rc)
            {
                if (resolved != null || value == null)
                {
                    return(resolved);
                }

                resolved = value.GetTypeExpression().ResolveAsTypeStep(rc, false);
                if (resolved == null)
                {
                    value = null;
                    return(null);
                }

                TypeExpr te = resolved as TypeExpr;

                if (te != null)
                {
                    if (!te.CheckAccessLevel(rc.DeclContainer))
                    {
                        Report.SymbolRelatedToPreviousError(te.Type);
                        Expression.ErrorIsInaccesible(resolved.Location, resolved.GetSignatureForError());
                    }
                }

                return(resolved);
            }
Esempio n. 8
0
        FullNamedExpression ResolveMemberName(IMemberContext context, MemberName mn)
        {
            // FIXME: Default namespace lookups to C# resolution semantics (for now).  Need a way to determine if PlayScript absolute
            // namespace lookups should be used here.
            bool absolute_ns = false;

            if (mn.Left == null)
            {
                return(context.LookupNamespaceOrType(mn.Name, mn.Arity, LookupMode.Probing, absolute_ns, Location.Null));
            }

            var left = ResolveMemberName(context, mn.Left);
            var ns   = left as Namespace;

            if (ns != null)
            {
                return(ns.LookupTypeOrNamespace(context, mn.Name, mn.Arity, LookupMode.Probing, Location.Null));
            }

            TypeExpr texpr = left as TypeExpr;

            if (texpr != null)
            {
                var found = MemberCache.FindNestedType(texpr.Type, ParsedName.Name, ParsedName.Arity);
                if (found != null)
                {
                    return(new TypeExpression(found, Location.Null));
                }

                return(null);
            }

            return(left);
        }
Esempio n. 9
0
        FullNamedExpression ResolveMemberName(IMemberContext context, MemberName mn)
        {
            if (mn.Left == null)
            {
                return(context.LookupNamespaceOrType(mn.Name, mn.Arity, Location.Null, /*ignore_cs0104=*/ false));
            }

            var left = ResolveMemberName(context, mn.Left);
            var ns   = left as Namespace;

            if (ns != null)
            {
                return(ns.Lookup(context, mn.Name, mn.Arity, Location.Null));
            }

            TypeExpr texpr = left as TypeExpr;

            if (texpr != null)
            {
                var found = MemberCache.FindNestedType(texpr.Type, ParsedName.Name, ParsedName.Arity);
                if (found != null)
                {
                    return(new TypeExpression(found, Location.Null));
                }

                return(null);
            }

            return(left);
        }
Esempio n. 10
0
		public NullableType (TypeExpr underlying, Location l)
		{
			this.underlying = underlying;
			loc = l;

			eclass = ExprClass.Type;
		}
Esempio n. 11
0
 private Create(TypeExpr token, GraphClass graphClass, OrientSqlExpr @from, OrientSqlExpr @to, OrientSqlExpr set)
 {
     _token      = token;
     _graphClass = graphClass;
     _from       = @from;
     _to         = to;
     _set        = set;
 }
Esempio n. 12
0
 public void CheckAddValCtor(string valCtorName, LexLocation loc, TypeExpr ty)
 {
     if (_valCtorMap.TryGetValue(valCtorName, out var other))
     {
         throw new ValueCtorDuplicatedException(other._lexLocation, loc);
     }
     _valCtorMap.Add(valCtorName, ty);
 }
Esempio n. 13
0
        /// <summary>
        /// TypeExpr
        ///     (ANY_TYPE | ID (DOT ID)*) (LBRACKET ConditionalExpr? RBRACKET)?
        /// </summary>
        /// <returns></returns>
        private TypeExpr ParseTypeExpr(bool expectArraySize = false)
        {
            TypeExpr ret = new TypeExpr();

            Token t = Consume();

            switch (t.Type)
            {
            case TokenType.BOOL:
                ret.Type = SyntacticValueType.BOOL;
                break;

            case TokenType.INT:
                ret.Type = SyntacticValueType.INT;
                break;

            case TokenType.DOUBLE:
                ret.Type = SyntacticValueType.DOUBLE;
                break;

            case TokenType.VOID:
                ret.Type = SyntacticValueType.VOID;
                break;

            case TokenType.STRING:
                ret.Type = SyntacticValueType.STRING;
                break;

            case TokenType.ID:
                ret.Type      = SyntacticValueType.CLASS;
                ret.ClassName = new List <string>()
                {
                    t.Literal
                };
                while (Check(TokenType.DOT))
                {
                    Consume(TokenType.DOT);
                    t = Consume(TokenType.ID);
                    ret.ClassName.Add(t.Literal);
                }
                break;

            default:
                throw new SyntaxError("Unknown type", t);
            }

            if (Check(TokenType.LBRACKET))
            {
                t         = Consume(TokenType.LBRACKET);
                ret.Expr1 = Expr.MakeOp(OpType.ARRAY_ACCESS, null, t.Line);
                if (expectArraySize)
                {
                    ret.Expr1.Expr1 = ParseCondtionalExpr();
                }
                Consume(TokenType.RBRACKET);
            }
            return(ret);
        }
Esempio n. 14
0
        public Enum(TypeContainer parent, TypeExpression type, Modifiers mod_flags, MemberName name, Attributes attrs)
            : base(parent, name, attrs, MemberKind.Enum)
        {
            underlying_type_expr = type;
            var accmods = IsTopLevel ? Modifiers.INTERNAL : Modifiers.PRIVATE;

            ModFlags = ModifiersExtensions.Check(AllowedModifiers, mod_flags, accmods, Location, Report);
            spec     = new EnumSpec(null, this, null, null, ModFlags);
        }
Esempio n. 15
0
        internal TypeExpr ParseTypeSuffix(TypeExpr t)
        {
            if (t != null)
            {
                // TODO nvk: parse PTR, array specifiers
            }

            return(t);
        }
Esempio n. 16
0
        internal TryStmt ParseTryStmt()
        {
            Token t = RequireAndGet(TokenType.TRY);

            Require(TokenType.EOS);
            var s = ParseStatementBlock();

            var cb = new List <CatchBlock>();

            while (La() == TokenType.CATCH)
            {
                cb.Add(ParseCatchBlock());
            }

            FinallyBlock fb = null;

            if (La() == TokenType.FINALLY)
            {
                var ft = ConsumeAndGet();
                Require(TokenType.EOS);
                fb = new FinallyBlock(ft, ParseStatementBlock());
            }

            Require(TokenType.END);
            Expect(TokenType.TRY);
            Require(TokenType.EOS);

            return(new TryStmt(t, s, cb.ToArray(), fb));

            CatchBlock ParseCatchBlock()
            {
                Token ct = RequireAndGet(TokenType.CATCH);

                Expect(TokenType.TO);

                Token n = ParseVarIdName();

                TypeExpr type = null;

                if (Expect(TokenType.AS))
                {
                    Require(type = ParseType(), ErrorCode.Expected, "type");
                }

                Expr when = null;

                if (Expect(TokenType.WHEN))
                {
                    when = RequireExpression();
                }

                Expect(TokenType.EOS);
                var cs = ParseStatementBlock();

                return(new CatchBlock(ct, n, type, when, cs));
            }
        }
Esempio n. 17
0
        public Enum(NamespaceEntry ns, DeclSpace parent, TypeExpr type,
                    int mod_flags, MemberName name, Attributes attrs)
            : base(ns, parent, name, attrs, Kind.Enum)
        {
            this.base_type = type;
            int accmods = IsTopLevel ? Modifiers.INTERNAL : Modifiers.PRIVATE;

            ModFlags = Modifiers.Check(AllowedModifiers, mod_flags, accmods, Location);
        }
Esempio n. 18
0
        internal Expr ParseLiteralArray(TypeExpr t = null)
        {
            Require(Expect(TokenType.LCURLY), ErrorCode.Expected, "{");

            var e = ParseExprList(true);

            Require(Expect(TokenType.RCURLY) || AllowMissingSyntax, ErrorCode.Expected, "}");

            return(new LiteralArray(e, t));
        }
Esempio n. 19
0
        protected void EmitCall(EmitContext ec, Expression binder, Arguments arguments, bool isStatement)
        {
            int      dyn_args_count = arguments == null ? 0 : arguments.Count;
            TypeExpr site_type      = CreateSiteType(ec, arguments, dyn_args_count, isStatement);
            var      field          = CreateSiteField(ec, site_type);

            if (field == null)
            {
                return;
            }

            FieldExpr site_field_expr = new FieldExpr(field, loc);

            SymbolWriter.OpenCompilerGeneratedBlock(ec);

            Arguments args = new Arguments(1);

            args.Add(new Argument(binder));
            StatementExpression s = new StatementExpression(new SimpleAssign(site_field_expr, new Invocation(new MemberAccess(site_type, "Create"), args)));

            BlockContext bc = new BlockContext(ec.MemberContext, null, TypeManager.void_type);

            if (s.Resolve(bc))
            {
                Statement init = new If(new Binary(Binary.Operator.Equality, site_field_expr, new NullLiteral(loc), loc), s, loc);
                init.Emit(ec);
            }

            args = new Arguments(1 + dyn_args_count);
            args.Add(new Argument(site_field_expr));
            if (arguments != null)
            {
                foreach (Argument a in arguments)
                {
                    if (a is NamedArgument)
                    {
                        // Name is not valid in this context
                        args.Add(new Argument(a.Expr, a.ArgType));
                        continue;
                    }

                    args.Add(a);
                }
            }

            Expression target = new DelegateInvocation(new MemberAccess(site_field_expr, "Target", loc).Resolve(bc), args, loc).Resolve(bc);

            if (target != null)
            {
                target.Emit(ec);
            }

            SymbolWriter.CloseCompilerGeneratedBlock(ec);
        }
Esempio n. 20
0
        TypeExpr LookupType(string name, Location loc)
        {
            if (cached_types.Contains(name))
            {
                return(cached_types [name] as TypeExpr);
            }

            Type t = null;

            if (declspaces != null)
            {
                DeclSpace tdecl = declspaces [name] as DeclSpace;
                if (tdecl != null)
                {
                    //
                    // Note that this is not:
                    //
                    //   t = tdecl.DefineType ()
                    //
                    // This is to make it somewhat more useful when a DefineType
                    // fails due to problems in nested types (more useful in the sense
                    // of fewer misleading error messages)
                    //
                    tdecl.DefineType();
                    t = tdecl.TypeBuilder;

                    if (RootContext.EvalMode)
                    {
                        // Replace the TypeBuilder with a System.Type, as
                        // Reflection.Emit fails otherwise (we end up pretty
                        // much with Random type definitions later on).
                        Type tt = t.Assembly.GetType(t.Name);
                        if (tt != null)
                        {
                            t = tt;
                        }
                    }
                }
            }
            string lookup = t != null ? t.FullName : (fullname.Length == 0 ? name : fullname + "." + name);
            Type   rt     = root.LookupTypeReflection(lookup, loc);

            // HACK: loc.IsNull when the type is core type
            if (t == null || (rt != null && loc.IsNull))
            {
                t = rt;
            }

            TypeExpr te = t == null ? null : new TypeExpression(t, Location.Null);

            cached_types [name] = te;
            return(te);
        }
Esempio n. 21
0
        public void AddDefiningValCtor(SimpleName valCtorName, TypeExpr final)
        {
            var loc  = valCtorName._lexLocation;
            var name = valCtorName.ToString();

            if (ValueCtorMap.TryGetValue(name, out var ty))
            {
                throw new ValueCtorDuplicatedException(ty._lexLocation, loc);
            }
            _definingCtor.CheckAddValCtor(name, loc, final);
            CheckValCtorType(valCtorName, final);
        }
Esempio n. 22
0
        /// <summary>
        /// Params
        ///     TypeExpr Id (COMMA Params)?
        /// </summary>
        /// <returns></returns>
        private VarStmt ParseParams()
        {
            TypeExpr type = ParseTypeExpr();
            IdExpr   id   = ParseId();
            VarStmt  vars = new VarStmt(AccessFlag.DefaultFlag, type, id.Id, null);

            if (Check(TokenType.COMMA))
            {
                Consume(TokenType.COMMA);
                vars.SiblingAST = ParseParams();
            }
            return(vars);
        }
Esempio n. 23
0
        internal VarDecl ParseXBaseVarDecl(bool local = false, bool parseArraySub = false, bool parseInit = false, bool parseType = false)
        {
            // Parse variable name
            Token n = RequireVarIdName();

            // Parse array sub indices
            List <Expr> asub = null;

            if (parseArraySub && Expect(TokenType.LBRKT))
            {
                asub = new List <Expr>();
                do
                {
                    asub.Add(RequireExpression());
                    if (Expect(TokenType.COMMA))
                    {
                        continue;
                    }
                    if (La() == TokenType.RBRKT && La(2) == TokenType.LBRKT)
                    {
                        Consume(2);
                        continue;
                    }
                    break;
                } while (true);
                Require(Expect(TokenType.RBRKT), ErrorCode.Expected, TokenType.RBRKT);
            }

            // Parse initializer
            Expr init = null;

            if (parseInit && Expect(TokenType.ASSIGN_OP))
            {
                init = ParseExpression();
            }

            // Parse type
            TypeExpr type = null;

            if (parseType && Expect(TokenType.AS)) // type parsed but ignored
            {
                Require(ParseType(), ErrorCode.Expected, "type");
                if (Expect(TokenType.OF))
                {
                    Require(ParseId(), ErrorCode.Expected, "identifier");
                }
            }

            return(local ? new VarDecl(n, asub?.ToArray(), type, init)
                : new MemVarDecl(n, asub?.ToArray(), type, init));
        }
Esempio n. 24
0
        // <summary>
        //   Resolve is used in method definitions
        // </summary>
        public virtual Type Resolve(IResolveContext ec)
        {
            // HACK: to resolve attributes correctly
            this.resolve_context = ec;

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

            TypeExpr texpr = TypeName.ResolveAsTypeTerminal(ec, false);

            if (texpr == null)
            {
                return(null);
            }

            parameter_type = texpr.Type;

            if ((modFlags & Parameter.Modifier.ISBYREF) != 0 &&
                TypeManager.IsSpecialType(parameter_type))
            {
                Report.Error(1601, Location, "Method or delegate parameter cannot be of type `{0}'",
                             GetSignatureForError());
                return(null);
            }

#if GMCS_SOURCE
            TypeParameterExpr tparam = texpr as TypeParameterExpr;
            if (tparam != null)
            {
                return(parameter_type);
            }
#endif

            if ((parameter_type.Attributes & Class.StaticClassAttribute) == Class.StaticClassAttribute)
            {
                Report.Error(721, Location, "`{0}': static types cannot be used as parameters",
                             texpr.GetSignatureForError());
                return(parameter_type);
            }

            if ((modFlags & Modifier.This) != 0 && parameter_type.IsPointer)
            {
                Report.Error(1103, Location, "The type of extension method cannot be `{0}'",
                             TypeManager.CSharpName(parameter_type));
            }

            return(parameter_type);
        }
Esempio n. 25
0
        //
        // System.Linq.Expressions.ParameterExpression type
        //
        public static TypeExpr ResolveParameterExpressionType(IMemberContext ec, Location location)
        {
            if (parameter_expr_tree_type != null)
            {
                return(parameter_expr_tree_type);
            }

            TypeSpec p_type = ec.Module.PredefinedTypes.ParameterExpression.Resolve(location);

            parameter_expr_tree_type = new TypeExpression(p_type, location).
                                       ResolveAsTypeTerminal(ec, false);

            return(parameter_expr_tree_type);
        }
 static partial void PrintExt(TypeExpr p, int _i_)
 {
     if (p is UType)
     {
         if (_i_ > 2)
         {
             Render(LEFT_PARENTHESIS);
         }
         Render("TYPE");
         if (_i_ > 2)
         {
             Render(RIGHT_PARENTHESIS);
         }
     }
 }
Esempio n. 27
0
        protected override TypeExpr [] ResolveBaseTypes(out TypeExpr base_class)
        {
            var mtype = Iterator.OriginalIteratorType;

            if (Mutator != null)
            {
                mtype = Mutator.Mutate(mtype);
            }

            iterator_type_expr = new TypeExpression(mtype, Location);
            generic_args       = new TypeArguments(iterator_type_expr);

            var list = new List <FullNamedExpression> ();

            if (Iterator.IsEnumerable)
            {
                enumerable_type = new TypeExpression(
                    TypeManager.ienumerable_type, Location);
                list.Add(enumerable_type);

                if (TypeManager.generic_ienumerable_type != null)
                {
                    generic_enumerable_type = new GenericTypeExpr(
                        TypeManager.generic_ienumerable_type,
                        generic_args, Location);
                    list.Add(generic_enumerable_type);
                }
            }

            enumerator_type = new TypeExpression(
                TypeManager.ienumerator_type, Location);
            list.Add(enumerator_type);

            list.Add(new TypeExpression(TypeManager.idisposable_type, Location));

            var ienumerator_generic = Module.PredefinedTypes.IEnumeratorGeneric;

            if (ienumerator_generic.Define())
            {
                generic_enumerator_type = new GenericTypeExpr(ienumerator_generic.TypeSpec, generic_args, Location);
                list.Add(generic_enumerator_type);
            }

            type_bases = list;

            return(base.ResolveBaseTypes(out base_class));
        }
Esempio n. 28
0
 private TypeCtorSig(ParsingContext ctx, string name, string[] pList, LexLocation lexLocation)
 {
     Name                  = name;
     ParamList             = pList;
     Loc                   = lexLocation;
     _definingTypeAsTyExpr = TyQName.Create(Name, Loc, ctx);
     if (ParamList.Length > 0)
     {
         ListTypeExpr pLst = new ListTypeExpr();
         foreach (var pNm in ParamList)
         {
             //TODO improve location of parameter
             pLst.AddLast(TyQName.Create(pNm, Loc, ctx));
         }
         _definingTypeAsTyExpr = new TyApp(_definingTypeAsTyExpr, pLst, Loc, ctx);
     }
 }
Esempio n. 29
0
        /// <summary>
        /// 这里用了LookAhead
        /// 此外不允许不带定义的声明
        /// DeclarationStmt
        ///     ACCESS_FLAG* TypeExpr FuncDeclarator BlockStmt
        ///     ACCESS_FLAG* TypeExpr VarDeclarator SEMICOLON
        /// </summary>
        /// <returns></returns>
        private DeclarationStmt ParseDeclOrDefStmt()
        {
            AccessFlag flag = ParserAccessFlag();
            TypeExpr   type = ParseTypeExpr();

            if (Check(TokenType.LPAREN) || CheckAt(1, TokenType.LPAREN))
            {
                FuncStmt ret = ParseFuncDeclarator(type, flag);
                ret.Body = ParseBlockStmt();
                return(ret);
            }
            else
            {
                VarStmt ret = ParseVarDeclarator(type, flag);
                Consume(TokenType.SEMICOLON);
                return(ret);
            }
        }
Esempio n. 30
0
        internal VarDecl ParseFoxDimVarDecl()
        {
            // Parse variable name
            Token n = RequireIdName();

            // Parse array sub indices
            List <Expr> asub = null;

            if (ExpectAndGetAny(TokenType.LBRKT, TokenType.LPAREN) is Token lp)
            {
                asub = new List <Expr>();
                do
                {
                    asub.Add(RequireExpression());
                    if (Expect(TokenType.COMMA))
                    {
                        continue;
                    }
                    if (La() == TokenType.RBRKT && La(2) == TokenType.LBRKT)
                    {
                        Consume(2);
                        continue;
                    }
                    break;
                } while (true);
                var rp = Expect(lp.Type == TokenType.LBRKT ? TokenType.RBRKT : TokenType.RPAREN);
                Require(rp, ErrorCode.Expected, rp);
            }

            // Parse type
            TypeExpr type = null;

            if (Expect(TokenType.AS)) // type parsed byt ignored
            {
                Require(ParseType(), ErrorCode.Expected, "type");
                if (Expect(TokenType.OF))
                {
                    Require(ParseId(), ErrorCode.Expected, "identifier");
                }
            }

            return(new VarDecl(n, asub?.ToArray(), type, null));
        }
        private void CheckTypeCtorKind(TypeCtorSig sig)
        {
            //TODO _definingCtor.Name != Int , Double, String

            TypeExpr ctorKind = UType.Instance;

            for (var i = 0; i < _definingCtor.ParamList.Length; i++)
            {
                if (_definingCtorEnv.ContainsKey(_definingCtor.ParamList[i]))
                {
                    throw new SemanticException($"duplicated parameter names of Type Constructor:{_definingCtor.ParamList[i]}", _definingCtor.Loc);
                }
                _definingCtorEnv.Add(_definingCtor.ParamList[i], UType.Instance);
                ctorKind = TyArr.Create(UType.Instance, ctorKind, this);
            }

            _definingCtorEnv.Add(_definingCtor.Name, ctorKind);
            _definingCtor.Kind = ctorKind;
        }
Esempio n. 32
0
			public AnonymousMethodMethod (TypeDefinition parent, AnonymousExpression am, AnonymousMethodStorey storey,
							  TypeExpr return_type,
							  Modifiers mod, MemberName name,
							  ParametersCompiled parameters)
				: base (parent, return_type, mod | Modifiers.COMPILER_GENERATED,
						name, parameters, null)
			{
				this.AnonymousMethod = am;
				this.Storey = storey;

				Parent.PartialContainer.Members.Add (this);
				Block = new ToplevelBlock (am.block, parameters);
			}
Esempio n. 33
0
 public override Null Visit(TypeExpr node)
 {
     context = null;
     node.computedType = new MetaType { instanceType = node.type };
     return null;
 }