public bool Resolve(TypeResolveContext trc, bool errors) { if (BaseClass.ResolveExtension("RTemplate", trc, errors)) { return(true); } bool?ret = BaseClass.ResolvesAsRule(trc, errors); if (ret == null) { return(true); } if ((bool)ret) { // We derive from a Rule. Our Template's base class // should be the default TargetTemplate. The rule's // BaseClass is our BaseClass. rb.BaseClass = BaseClass; return(false); } UserType rule = BaseClass.ResolveBoundRuleType(trc, errors); if (rule == null) { Console.Error.WriteLine("Rule baseclass {0} of {1} is not either a rule " + "or a rule-bound template", BaseClass, this); return(true); } rb.BaseClass = rule; tmpl.BaseClass = BaseClass; return(false); }
public override bool Resolve(TypeResolveContext trc, bool errors) { bool ret = base.Resolve(trc, errors); ret |= MatchType.ResolveExtension("RTemplate", trc, errors); // RegexMatcher will handle distinguishing between when // we return a Rule type and a TargetTemplate type, but we need // to check if we require a binding. bool?foo = MatchType.ResolvesAsRule(trc, errors); if (foo == null) { // MatchType unresolved, can't say. return(true); } if ((bool)foo) { // We point to a Rule, and ResolveUsedStructureType will // complain if we call it on MatchType. if (UsesStructure) { throw ExHelp.App("Odd, MatcherBuilder {0} is using its structure" + "even though it points to a plain rule {1}", this, MatchType); } return(false); } // We have a template, so see if it uses a structure UserType stype = MatchType.ResolveUsedStructureType(trc, errors); if (errors) { if (stype == null && UsesStructure) { // XXX is this actually an error? Shouldn't happen, I think. Console.Error.WriteLine("Matcher {0} is bound to structure {1} but its " + "associated template {2} is unbound", this, Params, MatchType); return(true); } else if (stype != null && !UsesStructure) { UseStructure(); } else if (stype != null && !NS.ParamsType.Equals(stype)) { // FIXME: see if Structure has a member of type stype. Console.Error.WriteLine("Matcher {0} is bound to the structure {1} but its " + "associated template {2} is bound to {3}", this, Params, MatchType, stype); return(true); } } return(ret); }