Ejemplo n.º 1
0
        // General

        public override bool Resolve(TypeResolveContext trc, bool errors)
        {
            bool ret = base.Resolve(trc, errors);

            if (bf_ret_class != null)
            {
                // Null if rule doesn't have a build func of its
                // own (eg, it inherits)
                ret |= bf_ret_class.Resolve(trc, errors);

                if (errors && OverrideResultType != null)
                {
                    Console.Error.WriteLine("Can't have a build function and separately " +
                                            "specify a general result type in {0}", ClassName);
                    return(true);
                }
            }

            if (OverrideResultType != null)
            {
                ret |= OverrideResultType.Resolve(trc, errors);
            }

            for (int i = 0; i < arguments.Count; i++)
            {
                ret |= arguments[i].Resolve(trc, errors);
            }

            return(ret);
        }
Ejemplo n.º 2
0
        public virtual bool Resolve(TypeResolveContext trc, bool errors)
        {
            if (!registered)
            {
                trc.Driver.DefineUserType(FullName, this);
                registered = true;
            }

            if (errors && baseclass == null)
            {
                Console.Error.WriteLine("No base class set for item {0}", this);
                return(true);
            }

            bool ret = baseclass.Resolve(trc, errors);

            if (implements != null)
            {
                foreach (UserType ut in implements)
                {
                    ret |= ut.Resolve(trc, errors);
                }
            }

            return(ret);
        }
Ejemplo n.º 3
0
        public UserType ResolveSelfType(TypeResolveContext trc, bool errors)
        {
            UserType ut = new UserType(FullName);

            if (ut.Resolve(trc, errors) && errors)
            {
                throw ExHelp.App("Failed to resolve SelfType of {0}?", this);
            }

            return(ut);
        }
Ejemplo n.º 4
0
        // The rest

        public bool Resolve(bool errors)
        {
            bool ret = paramstype.Resolve(trc, errors);

            foreach (MetaRuleBuilder mrb in metarules)
            {
                ret |= mrb.Resolve(trc, errors);
            }
            foreach (TypeExpressedItem tei in items)
            {
                ret |= tei.Resolve(trc, errors);
            }

            return(ret);
        }
Ejemplo n.º 5
0
            public bool Resolve(TypeResolveContext trc, bool errors)
            {
                if (Type.Resolve(trc, errors))
                {
                    return(true);
                }

                arg_class = Type.ResultConversion;

                if (arg_class == null)
                {
                    conv      = RuleArgConversion.None;
                    arg_class = Type;
                }
                else
                {
                    // The arg type is some primitive type (bool, string)
                    // that we must convert from a result wrapper

                    Type type = Type.AsSystem;

                    if (type == null)
                    {
                        throw new Exception("Can't handle convertible user types");
                    }

                    if (type.IsValueType)
                    {
                        conv = RuleArgConversion.ToValueType;
                    }
                    else
                    {
                        conv = RuleArgConversion.ToRefType;
                    }
                }

                return(arg_class.Resolve(trc, errors));
            }
Ejemplo n.º 6
0
	public UserType ResolveSelfType (TypeResolveContext trc, bool errors)
	{
	    UserType ut = new UserType (FullName);

	    if (ut.Resolve (trc, errors) && errors)
		throw ExHelp.App ("Failed to resolve SelfType of {0}?", this);

	    return ut;
	}
Ejemplo n.º 7
0
 public override bool Resolve(TypeResolveContext trc, bool errors)
 {
     return(base.Resolve(trc, errors) | ResultType.Resolve(trc, errors));
 }