Пример #1
0
 static Expression UnwindBoundExpression(BoundExpression be)
 {
     if (be.Variable.AssumedValue != null && be.Variable.AssumedValue is BoundExpression)
       {
     return UnwindBoundExpression(be.Variable.AssumedValue as BoundExpression);
       }
       return be.Variable.AssumedValue ?? be;
 }
                protected override bool Walk(BoundExpression node)
                {
                    BoundExpression e = node;
                      Dictionary<Variable, bool> loopcheck = new Dictionary<Variable, bool>();
                      while (e.Variable.AssumedValue is BoundExpression)
                      {
                    var be = e.Variable.AssumedValue as BoundExpression;
                    if (loopcheck.ContainsKey(e.Variable))
                    {
                      e = node;
                      break;
                    }
                    loopcheck.Add(e.Variable, true);

                    if (!CanAlias(node.Variable, be.Variable))
                    {
                      e = node;
                      break;
                    }

                    if (e.Variable.Lift)
                    {
                      break;
                    }

                    e = be;
                      }
                      node.Variable = e.Variable;

                      return base.Walk(node);
                }
 protected override bool Walk(BoundExpression node)
 {
     if (references.ContainsKey(node.Variable))
       {
     references[node.Variable]++;
       }
       else
       {
     references[node.Variable] = 1;
       }
       return base.Walk(node);
 }
Пример #4
0
 protected internal override bool Walk(BoundExpression node)
 {
     node.Ref = Reference(node.Variable);
     return true;
 }
Пример #5
0
 // BoundExpression
 protected internal override bool Walk(BoundExpression node)
 {
     bool defined;
     if (TryCheckVariable(node.Variable, out defined)) {
         node.IsDefined = defined;
     }
     return true;
 }
Пример #6
0
 // BoundExpression
 private void DefaultWalk(BoundExpression node)
 {
     Walk(node);
     PostWalk(node);
 }
Пример #7
0
 protected internal override bool Walk(BoundExpression node) {
     node.Ref = GetOrMakeRef(node.Variable);
     return true;
 }
Пример #8
0
                protected override bool Walk(BoundExpression node)
                {
                    var var = node.Variable;

                      if (!refmap.ContainsKey(var))
                      {
                    refmap[var] = 1;
                      }
                      else
                      {
                    refmap[var]++;
                      }

                      return base.Walk(node);
                }