Пример #1
0
 private void ConvertLocalVariables(ILocalVariableNode[] vars)
 {
     for (int i = 0; i < vars.Length; i++)
         ConvertLocalVariable(vars[i], false, 0, 0);
 }
 public virtual void visit(ILocalVariableNode value)
 {
 }
Пример #3
0
 //создание нелокальной переменной
 //нелок. перем. представляется в виде нестат. поля класса-обертки над процедурой
 private void ConvertNonLocalVariable(ILocalVariableNode var, MethodBuilder cb)
 {
     TypeInfo ti = helper.GetTypeReference(var.type);
     //cur_type сейчас хранит ссылку на созданный тип - обертку
     FieldBuilder fb = cur_type.DefineField(var.name, ti.tp, FieldAttributes.Public);
     VarInfo vi = helper.AddNonLocalVariable(var, fb);
     vi.meth = smi.Peek();
     //если перем. имеет тип массив, то выделяем под него память
     //che-to nelogichno massivy v konstruktore zapisi aktivacii, a konstanty v kode procedury, nado pomenjat
     if (ti.is_arr)
     {
         if (var.inital_value == null || var.inital_value is IArrayConstantNode)
             CreateArrayForClassField(cb.GetILGenerator(), fb, ti, var.inital_value as IArrayConstantNode, var.type);
         else if (var.inital_value is IArrayInitializer)
             CreateArrayForClassField(cb.GetILGenerator(), fb, ti, var.inital_value as IArrayInitializer, var.type);
     }
     else if (var.inital_value is IArrayConstantNode)
         CreateArrayForClassField(cb.GetILGenerator(), fb, ti, var.inital_value as IArrayConstantNode, var.type);
     else if (var.inital_value is IArrayInitializer)
         CreateArrayForClassField(cb.GetILGenerator(), fb, ti, var.inital_value as IArrayInitializer, var.type);
     else
         if (var.type.is_value_type || var.inital_value is IConstantNode && !(var.inital_value is INullConstantNode))
             AddInitCall(vi, fb, ti.init_meth, var.inital_value as IConstantNode);
     in_var_init = true;
     GenerateInitCode(var, il);
     in_var_init = false;
 }
Пример #4
0
 private void ConvertNonLocalVariables(ILocalVariableNode[] vars, MethodBuilder cb)
 {
     for (int i = 0; i < vars.Length; i++)
     {
         //если лок. переменная используется как нелокальная
         if (vars[i].is_used_as_unlocal == true)
             ConvertNonLocalVariable(vars[i], cb);
         else
             ConvertLocalVariable(vars[i], false, 0, 0);
     }
 }
Пример #5
0
 public void visit(ILocalVariableNode value)
 {
     string s = value.GetType().Name + ".";
     prepare_string_node(value.name, s + "name");
     //prepare_up_link_node(value.function.name.ToString(), s + "function", value.function);
     prepare_node(value.inital_value, s + "initial_value");
     prepare_string_node(value.is_used_as_unlocal.ToString(), s + "is_used_as_unlocal");
     prepare_string_node(value.node_location_kind.ToString(), s + "node_location_kind");
     prepare_node(value.type, s + "type");            
 }
Пример #6
0
		public virtual void visit(ILocalVariableNode value)
		{
		}
Пример #7
0
 public void visit(ILocalVariableNode value)
 {
     StringBuilder bodyBlock = new StringBuilder();
              
     if (value.inital_value == null)
         ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(ISemanticNodeConverter.ConvertPABCNETNodeVariable("var", value));            
     else
     {
         // кладем на стек сгенерированное в новый текст значение переменной
         value.inital_value.visit(this);   
         ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(ISemanticNodeConverter.ConvertPABCNETNodeVariable("var_init", value));
     }
 }