public override void visit(yield_node yn)
 {
     yn.visit(mids);
     // mids.vars - надо установить, какие из них - локальные, какие - из этого класса, какие - являются параметрами функции, а какие - глобальные (все остальные)
     // те, которые являются параметрами, надо скопировать в локальные переменные и переименовать использование везде по ходу данной функции 
     // самое сложное - переменные-поля этого класса - они требуют в создаваемом классе, реализующем итератор, хранить Self текущего класса и добавлять это Self везде по ходу алгоритма
     // вначале будем считать, что переменные-поля этого класса и переменные-параметры не захватываются yield
     //base.visit(yn);
 }
 public override void visit(yield_node yn)
 {
     var VarIdent = this.NewVarName();
     VarIdent.source_context = yn.ex.source_context;
     var_statement vs;
     if (yn.ex is nil_const)
         vs = new var_statement(VarIdent, new named_type_reference("System.Object"), yn.ex);
     else
         vs = new var_statement(VarIdent, yn.ex);
     vs.source_context = yn.ex.source_context;
     ReplaceStatement(yn, SeqStatements(vs, new yield_node(VarIdent, yn.ex.source_context)));
 }
 public override void visit(yield_node yn)
 {
     hasYields = true;
     if (mids != null) // если мы - внутри процедуры
         yn.visit(mids);
     else throw new SyntaxError("Yield must be in functions only", "", yn.source_context, yn);
     // mids.vars - надо установить, какие из них - локальные, какие - из этого класса, какие - являются параметрами функции, а какие - глобальные (все остальные)
     // те, которые являются параметрами, надо скопировать в локальные переменные и переименовать использование везде по ходу данной функции
     // самое сложное - переменные-поля этого класса - они требуют в создаваемом классе, реализующем итератор, хранить Self текущего класса и добавлять это Self везде по ходу алгоритма
     // вначале будем считать, что переменные-поля этого класса и переменные-параметры не захватываются yield
     //base.visit(yn);
 }
		public void write_yield_node(yield_node _yield_node)
		{
			write_statement(_yield_node);
			if (_yield_node.ex == null)
			{
				bw.Write((byte)0);
			}
			else
			{
				bw.Write((byte)1);
				_yield_node.ex.visit(this);
			}
		}
		public void visit(yield_node _yield_node)
		{
			bw.Write((Int16)201);
			write_yield_node(_yield_node);
		}
		public void read_yield_node(yield_node _yield_node)
		{
			read_statement(_yield_node);
			_yield_node.ex = _read_node() as expression;
		}
		public void visit(yield_node _yield_node)
		{
			read_yield_node(_yield_node);
		}
示例#8
0
 public override void visit(yield_node yn)
 {
     sb.Append("yield ");
     visit_node(yn.ex);
 }
 public override void visit(yield_node yn)
 {
     visit_yield_helper(yn);
     base.visit(yn);
 }
示例#10
0
 public override void visit(yield_node _yield_node)
 {
     _yield_node.ex.visit(this);
 }