예제 #1
0
파일: ResMemberBind.cs 프로젝트: kzyg/spark
        public IResMemberTerm Substitute(Substitution subst)
        {
            var obj        = _obj.Substitute(subst);
            var memberSpec = _memberSpec.Substitute(subst);

            var objType  = obj.Type;
            var dataType = objType;

            if (objType is ResFreqQualType)
            {
                dataType = ((ResFreqQualType)objType).Type;
            }
            if (dataType is Spark.Resolve.ResDummyTypeArg)
            {
                var typeArg = (Spark.Resolve.ResDummyTypeArg)dataType;
                if (typeArg.ConcreteType != null)
                {
                    dataType = typeArg.ConcreteType;
                }
            }
            if (dataType is ResErrorTerm)
            {
            }
            else if (dataType is IResContainerRef)
            {
                var containerRef = (IResContainerRef)dataType;
                memberSpec = containerRef.FindMember(memberSpec).EffectiveSpec;
            }

            return(new ResMemberBind(
                       _range,
                       obj,
                       memberSpec));
        }
예제 #2
0
 public IResFreqQualType Substitute(Substitution subst)
 {
     return(new ResFreqQualType(
                _range,
                _freq.Substitute <IResElementRef>(subst),
                _type.Substitute(subst)));
 }
예제 #3
0
파일: ResMemberSpec.cs 프로젝트: kzyg/spark
 public IResMemberSpec Substitute(Substitution subst)
 {
     return(new ResMemberSpec(
                _range,
                _container.Substitute <IResContainerRef>(subst),
                _decl));
 }
예제 #4
0
 public override IResExp Substitute(Substitution subst)
 {
     return(new ResConceptVal(
                Range,
                _conceptClass.Substitute <IResConceptClassRef>(subst),
                from m in _memberRefs
                select m.Substitute(subst)));
 }
예제 #5
0
파일: ResBreakExp.cs 프로젝트: kzyg/spark
 public override IResExp Substitute(Substitution subst)
 {
     return(new ResSwitchExp(
                this.Range,
                _value.Substitute(subst),
                (from c in _cases
                 select c.Substitute(subst)).ToArray()));
 }
예제 #6
0
파일: ResBreakExp.cs 프로젝트: kzyg/spark
 public override IResExp Substitute(Substitution subst)
 {
     return(new ResIfExp(
                this.Range,
                _condition.Substitute(subst),
                _thenExp.Substitute(subst),
                _elseExp.Substitute(subst)));
 }
예제 #7
0
 public override IResExp Substitute(Substitution subst)
 {
     return(new ResMethodApp(
                this.Range,
                this.Type.Substitute(subst),
                _method.Substitute <IResMethodRef>(subst),
                from a in _args select a.Substitute(subst)));
 }
예제 #8
0
 public override IResExp Substitute(Substitution subst)
 {
     return(new ResAttributeFetch(
                this.Range,
                this.Type.Substitute(subst),
                _obj.Substitute(subst),
                _attribute.Substitute(subst)));
 }
예제 #9
0
파일: ResBreakExp.cs 프로젝트: kzyg/spark
        public override IResExp Substitute(Substitution subst)
        {
            var newExp = _exp == null ? null : _exp.Substitute(subst);

            return(new ResBreakExp(
                       this.Range,
                       subst.Lookup(_label),
                       newExp));
        }
예제 #10
0
 public ResGlobalMemberTerm(
     SourceRange range,
     ILazy <IResModuleDecl> module,
     IResMemberDecl decl)
 {
     _range  = range;
     _module = module;
     _decl   = decl;
     _subst  = new Substitution();
 }
예제 #11
0
        public override ResKind Substitute(Substitution subst)
        {
            if (this == ResKind.Star)
            {
                return(this);
            }

            return(new ResIntervalKind(
                       _lowerBound.Substitute(subst),
                       _upperBound.Substitute(subst)));
        }
예제 #12
0
        public ResMemberGenericApp(
            IResGenericRef fun,
            IEnumerable <IResGenericArg> args)
        {
            _fun  = fun;
            _args = args.ToArray();

            _subst = new Substitution(_fun.MemberTerm.Subst);
            foreach (var pair in _fun.Parameters.Zip(_args, Tuple.Create))
            {
                _subst.Insert(pair.Item1.Decl, pair.Item2);
            }
        }
예제 #13
0
파일: ResMemberBind.cs 프로젝트: kzyg/spark
        public ResMemberBind(
            SourceRange range,
            IResExp obj,
            IResMemberSpec memberSpec)
        {
            _range      = range;
            _obj        = obj;
            _memberSpec = memberSpec;

            _subst = new Substitution(memberSpec.Container.MemberTerm.Subst);
            // \todo: Need to ensure "obj" is clone-able...
            // \todo: Need to iteratively re-subst...
            _subst.Insert(
                memberSpec.Container.ThisParameter,
                (r) => obj);
        }
예제 #14
0
파일: ResBreakExp.cs 프로젝트: kzyg/spark
        public override IResExp Substitute(Substitution subst)
        {
            var newVar = new ResVarDecl(
                _var.Range,
                _var.Name,
                _var.Type.Substitute(subst));

            var newSubst = new Substitution(subst);

            newSubst.Insert(_var, newVar);

            return(new ResForExp(
                       this.Range,
                       newVar,
                       _sequence.Substitute(subst),
                       _body.Substitute(newSubst)));
        }
예제 #15
0
        public override IResExp Substitute(Substitution subst)
        {
            var newLabel = new ResLabel(
                _label.Range,
                _label.Name,
                _label.Type.Substitute(subst));

            var newSubst = new Substitution(subst);

            newSubst.Insert(_label, newLabel);

            return(new ResLabelExp(
                       this.Range,
                       newLabel,
                       this.Body.Substitute(newSubst)));

            throw new NotImplementedException();
        }
예제 #16
0
파일: ResBreakExp.cs 프로젝트: kzyg/spark
        public override IResExp Substitute(Substitution subst)
        {
            var newVar = new ResVarDecl(
                _var.Range,
                _var.Name,
                _var.Type.Substitute(subst));

            var newSubst = new Substitution(subst);

            newSubst.Insert(_var, newVar);

            var newValue = _value == null ? null :
                           _value.Substitute(subst);

            return(new ResLetExp(
                       this.Range,
                       newVar,
                       newValue,
                       _body.Substitute(newSubst)));
        }
예제 #17
0
 IResElementRef ISubstitutable <IResElementRef> .Substitute(Substitution subst)
 {
     return(this);
 }
예제 #18
0
 IResTypeExp ISubstitutable <IResTypeExp> .Substitute(Substitution subst)
 {
     return(this);
 }
예제 #19
0
 IResMemberTerm ISubstitutable <IResMemberTerm> .Substitute(Substitution subst)
 {
     throw new NotImplementedException();
 }
예제 #20
0
 IResConceptClassRef ISubstitutable <IResConceptClassRef> .Substitute(Substitution subst)
 {
     return(this);
 }
예제 #21
0
 IResFreqQualType ISubstitutable <IResFreqQualType> .Substitute(Substitution subst)
 {
     return(this);
 }
예제 #22
0
 public abstract ResKind Substitute(Substitution subst);
예제 #23
0
 public ResElementCtorArg Substitute(Substitution subst)
 {
     return(new ResElementCtorArg(
                (IResAttributeRef)Attribute.Substitute <IResMemberRef>(subst),
                Value.Substitute(subst)));
 }
예제 #24
0
 IResPipelineRef ISubstitutable <IResPipelineRef> .Substitute(Substitution subst)
 {
     throw new NotImplementedException();
 }
예제 #25
0
 IResContainerRef ISubstitutable <IResContainerRef> .Substitute(Substitution subst)
 {
     throw new NotImplementedException();
 }
예제 #26
0
 public override ResKind Substitute(Substitution subst)
 {
     throw new NotImplementedException();
 }
예제 #27
0
 public override IResExp Substitute(Substitution subst)
 {
     return(this);
 }
예제 #28
0
 public IResVarSpec Substitute(Substitution subst)
 {
     return(new ResVarSpec(
                _decl,
                _type.Substitute(subst)));
 }
예제 #29
0
 public IResMemberTerm Substitute(Substitution subst)
 {
     return(this);
 }
예제 #30
0
 public override ResKind Substitute(Substitution subst)
 {
     return(this);
 }