Пример #1
0
 public ResBreakExp(
     SourceRange range,
     ResLabel label,
     IResExp exp)
     : base(range, new ResBottomType())
 {
     _label = label;
     _exp   = exp;
 }
Пример #2
0
 public ResLabelExp(
     SourceRange range,
     ResLabel label,
     IResExp body)
     : base(range, label.Type)
 {
     _label = label;
     _body  = body;
 }
Пример #3
0
        public ResLabel Lookup(ResLabel key)
        {
            ResLabel result;

            if (_labels.TryGetValue(key, out result))
            {
                return(result);
            }

            if (_base != null)
            {
                return(_base.Lookup(key));
            }

            return(key);
        }
Пример #4
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();
        }
Пример #5
0
 public ResLabelExp(
     SourceRange range,
     ResLabel label,
     IResExp body )
     : base(range, label.Type)
 {
     _label = label;
     _body = body;
 }
Пример #6
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();
        }
Пример #7
0
 public void Insert(ResLabel key, ResLabel value)
 {
     _labels[key] = value;
 }