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) { }
//создание нелокальной переменной //нелок. перем. представляется в виде нестат. поля класса-обертки над процедурой 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; }
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); } }
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"); }
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)); } }