public override object VisitFunctionVariableDeclarationStatement([NotNull] ClepsParser.FunctionVariableDeclarationStatementContext context) { ClepsVariable variable = Visit(context.variableDeclaration()) as ClepsVariable; VariableManager variableManager = VariableManagers.Last(); if (!variableManager.IsVariableNameAvailable(variable.VariableName)) { string errorMessage = String.Format("Variable {0} is already defined", variable.VariableName); Status.AddError(new CompilerError(FileName, context.Start.Line, context.Start.Column, errorMessage)); //Use a different variable name to avoid stopping the compilation string newVariableName = variableManager.GetAvailableVariableName(variable.VariableName); variable = new ClepsVariable(newVariableName, variable.VariableType, variable.IsConstant); } IValue value = null; if (context.rightHandExpression() != null) { value = Visit(context.rightHandExpression()) as IValue; if (variable.VariableType != value.ExpressionType) { throw new NotImplementedException("Assignment for non identical types not supported yet"); } } IValueRegister variableRegister = CurrMethodGenerator.CreateNewVariable(variable, value); variableManager.AddLocalVariable(variable, variableRegister); return variable; }
public override object VisitFunctionVariableDeclarationStatement([NotNull] ClepsParser.FunctionVariableDeclarationStatementContext context) { ClepsVariable variable = Visit(context.variableDeclaration()) as ClepsVariable; VariableManager variableManager = VariableManagers.Last(); if (!variableManager.IsVariableNameAvailable(variable.VariableName)) { string errorMessage = String.Format("Variable {0} is already defined", variable.VariableName); Status.AddError(new CompilerError(FileName, context.Start.Line, context.Start.Column, errorMessage)); //Use a different variable name to avoid stopping the compilation string newVariableName = variableManager.GetAvailableVariableName(variable.VariableName); variable = new ClepsVariable(newVariableName, variable.VariableType, variable.IsConstant); } IValue value = null; if (context.rightHandExpression() != null) { value = Visit(context.rightHandExpression()) as IValue; if (variable.VariableType != value.ExpressionType) { throw new NotImplementedException("Assignment for non identical types not supported yet"); } } IValueRegister variableRegister = CurrMethodGenerator.CreateNewVariable(variable, value); variableManager.AddLocalVariable(variable, variableRegister); return(variable); }
public void AddLocalVariable(ClepsVariable variable, IValueRegister variableRegister) { Debug.Assert(LocalVariableBlocks.Count > 0 && IsVariableNameAvailable(variable.VariableName)); LocalVariableBlocks.Last().Add(variable.VariableName, new VariableAndRegister() { Variable = variable, Register = variableRegister }); }
public IValueRegister CreateNewVariable(ClepsVariable variable, IValue initialValue = null) { string varName = NameGenerator.GetAvailableName(JavaScriptCodeParameters.VARIABLEPREFIX + variable.VariableName, variablesCreated); variablesCreated.Add(varName); if (initialValue == null) { AppendFormatLine("var {0};", varName); } else { AppendFormatLine("var {0} = {1};", varName, (initialValue as JavaScriptValue).Expression); } var ret = new JavaScriptRegister(varName, variable.VariableType); return ret; }
public IValueRegister CreateNewVariable(ClepsVariable variable, IValue initialValue = null) { string varName = NameGenerator.GetAvailableName(JavaScriptCodeParameters.VARIABLEPREFIX + variable.VariableName, variablesCreated); variablesCreated.Add(varName); if (initialValue == null) { AppendFormatLine("var {0};", varName); } else { AppendFormatLine("var {0} = {1};", varName, (initialValue as JavaScriptValue).Expression); } var ret = new JavaScriptRegister(varName, variable.VariableType); return(ret); }
public void AddNewMember(bool isStatic, ClepsVariable member) { string cantAddReason; Debug.Assert(CanAddMemberToClass(member.VariableName, member.VariableType, isStatic, out cantAddReason)); OrderedDictionary <string, ClepsVariable> variables; Dictionary <string, List <ClepsVariable> > methods; if (isStatic) { variables = StaticMemberVariables; methods = StaticMemberMethods; } else { variables = MemberVariables; methods = MemberMethods; } if (member.VariableType.IsFunctionType) { List <ClepsVariable> functions; if (methods.ContainsKey(member.VariableName)) { functions = methods[member.VariableName]; } else { functions = new List <ClepsVariable>(); methods[member.VariableName] = functions; } functions.Add(member); } else { variables.Add(member.VariableName, member); } }
public void AddNewMember(bool isStatic, ClepsVariable member) { string cantAddReason; Debug.Assert(CanAddMemberToClass(member.VariableName, member.VariableType, isStatic, out cantAddReason)); OrderedDictionary<string, ClepsVariable> variables; Dictionary<string, List<ClepsVariable>> methods; if (isStatic) { variables = StaticMemberVariables; methods = StaticMemberMethods; } else { variables = MemberVariables; methods = MemberMethods; } if (member.VariableType.IsFunctionType) { List<ClepsVariable> functions; if(methods.ContainsKey(member.VariableName)) { functions = methods[member.VariableName]; } else { functions = new List<ClepsVariable>(); methods[member.VariableName] = functions; } functions.Add(member); } else { variables.Add(member.VariableName, member); } }
public IValueRegister CreateNewVariable(ClepsVariable variable, IValue initialValue = null) { throw new NotImplementedException(); }