public override object Execute(Ambit ambit) { Identifier buscar = new Identifier(); //BUSCA LA VARIABLE SI NO HA SIDO DECLARADA if (!ambit.Ambit_name_inmediato.Equals("Function") && !ambit.Ambit_name_inmediato.Equals("Procedure")) { buscar = ambit.getVariable(id); } //SIGFINICA QUE ES UNA DECLARACION EN FUNCION else { buscar = ambit.getVariableFunctionInAmbit(id); } if (buscar.IsNull) { try { Returned val = this.value.Execute(ambit); //VERIFICA QUE NO HAYA ERROR if (val.getDataType == DataType.ERROR) { return(null); } if (this.type == DataType.CONST) { ambit.save(this.id, val.Value, val.getDataType, true, true, "Constante"); return(val.Value); } else { if (val.getDataType == this.type) { ambit.save(this.id, val.Value, val.getDataType, false, isAssigned, "Variable"); return(val.Value); } else { set_error("El tipo " + val.getDataType + " no es asignable con " + this.type.ToString(), row, column); return(null); } } } catch (Exception) { } } else { set_error("La variable '" + id + "' ya fue declarada", row, column); return(null); } return(0); }
//METODO PARA SINTETIZAR VALORES public void sintetizar_referencia(Ambit ambit, Function funcion_llamada) { if (funcion_llamada.Parametros_referencia.Count > 0) { foreach (SimboloReferencia simbolo in funcion_llamada.Parametros_referencia) { var variable = ambit.getVariableFunctionInAmbit(simbolo.Actual); ambit.setVariableInAmbit(simbolo.Padre, variable.Value, variable.DataType, false, "Variable"); } funcion_llamada.Parametros_referencia.Clear(); } }