/// <summary> /// Este metodo es usado para asociar a la funcion una variable que es de ella y que se usa en sus hijas /// </summary> /// <param name="var"></param> public void AsociatteVarToFunctionAsUsedForChildFunction(string var) { VarInfo varInfo = GetVarInfo(var); FunctionInfo funInfo = GetFunction(varInfo.FunctionNameParent); funInfo.VarsUsedForAnotherFunction.Add(varInfo); }
/// <summary> /// Adiciona al scope una variable que representa una variable de un for /// </summary> /// <param name="varId"></param> /// <param name="typeId"></param> public void AddVarFor(string varId, string typeId) { var varInfo = new VarInfo { IsLocalVariable = true, CodeName = string.Format("{0}_{1}", varId, Utils.GetUID()) }; AddVar(varId, typeId, varInfo); }
/// <summary> /// Adiciona una variable al scope /// </summary> /// <param name="varId">El identificador de la variable en el codigo del programa</param> /// <param name="typeId">El identificador del tipo en el codigo del programa</param> public void AddVar(string varId, string typeId) { var varInfo = new VarInfo { IsLocalVariable = true, //Esto esta OK,se asume que la variable es local ,si no lo es se le cambia luego CodeName = string.Format("{0}_{1}", varId, Utils.GetUID()), }; AddVar(varId, typeId, varInfo); }
/// <summary> /// Adiciona al scope una variable que representa un parametro de funcion /// </summary> /// <param name="varId"></param> /// <param name="typeId"></param> /// <param name="posParams"></param> /// <param name="functionName"></param> public void AddVarParameter(string varId, string typeId, int posParams, string functionName) { var varInfo = new VarInfo { IsParameterFunction = true, ParameterNumber = posParams, ParamInFunction = functionName, FunctionNameParent = functionName, CodeName = string.Format("{0}_{1}", varId, Utils.GetUID()) }; AddVar(varId, typeId, varInfo); }
/// <summary> /// Se encarga de annadir una variable al scope /// </summary> /// <param name="varId">El id de la variable en el fichero de codigo</param> /// <param name="typeId">El id del tipo en el ficheo de codigo</param> /// <param name="varInfo">La informacion asociada a la variable</param> private void AddVar(string varId, string typeId, VarInfo varInfo) { if (HasType(typeId) == ScopeLocation.NotDeclared) { throw new ArgumentException("El tipo no esta en el scope"); } varInfo.VarName = varId; varInfo.TypeInfo = GetTypeInfo(typeId); //asociarle la funcion en la cual se encuentra declarada esta variable. varInfo.FunctionNameParent = varInfo.FunctionNameParent ?? (CurrentFunction != null ? CurrentFunction.FunctionName : null); if (HasVar(varId) == ScopeLocation.NotDeclared) { varInfo.CodeName = varInfo.CodeName ?? varInfo.VarName; } //es dejar el mismo nombre en el CodeNameGenereted que en VarID else { //la variable oculta a otra con el mismo nombre varInfo.Hides = true; varInfo.CodeName = string.Format("{0}_{1}", varId, Utils.GetUID()); } vars.Add(varId, varInfo); }