public void CreateAssignment(IValueRegister targetRegister, IValue value) { JavaScriptRegister registerToUse = targetRegister as JavaScriptRegister; JavaScriptValue valueToUse = value as JavaScriptValue; AppendFormatLine("{0} = {1};", registerToUse.Expression, valueToUse.Expression); }
public void CreateAssignment(IValueRegister targetRegister, IValue value) { JavaScriptRegister registerToUse = targetRegister as JavaScriptRegister; JavaScriptValue valueToUse = value as JavaScriptValue; AppendFormatLine("{0} = {1};", registerToUse.Expression, valueToUse.Expression.Replace("\n", "\n" + new String('\t', IndentationLevel))); }
public IValue GetRegisterValue(IValueRegister register) { JavaScriptRegister registerToUse = register as JavaScriptRegister; var ret = new JavaScriptValue(registerToUse.Expression, registerToUse.ExpressionType); return(ret); }
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 override object VisitVariableAssignment([NotNull] ClepsParser.VariableAssignmentContext context) { IValueRegister register = GetVariableRegister(context); if (register == null) { return(false); } IValue variableValue = CodeGenerator.GetRegisterValue(register); return(variableValue); }
public override object VisitFunctionVariableAssignmentStatement([NotNull] ClepsParser.FunctionVariableAssignmentStatementContext context) { IValueRegister register = GetVariableRegisterOrNullWithError(context.variableAssignment()); if (register == null) { return(false); } CreateAssignment(register, context.rightHandExpression()); return(register); }
private void CreateAssignment(IValueRegister register, ClepsParser.RightHandExpressionContext rightHandExpression) { IValue value = Visit(rightHandExpression) as IValue; if (register.ExpressionType == value.ExpressionType && CompilerConstants.SystemSupportedTypes.Contains(register.ExpressionType)) { CurrMethodGenerator.CreateAssignment(register, value); } else { throw new NotImplementedException("assignment for non byte types not supported yet"); } }
private void CreateAssignment(IValueRegister register, ClepsParser.RightHandExpressionContext rightHandExpression) { IValue value = Visit(rightHandExpression) as IValue; if (register.ExpressionType == value.ExpressionType && register.ExpressionType == CompilerConstants.ClepsByteType) { IMethodRegister methodRegister = CodeGenerator.GetMethodRegister(FullyQualifiedClassName, CurrMemberIsStatic, CurrMemberType, CurrMemberName); methodRegister.CreateAssignment(register, value); } else { throw new NotImplementedException("assignment for non byte types not supported yet"); } }
public override object VisitVariableAssignment([NotNull] ClepsParser.VariableAssignmentContext context) { IValueRegister register = GetVariableRegisterOrNullWithError(context); IValue variableValue; if (register == null) { //Error occurred finding the register. Return some value to avoid stopping the compilation variableValue = CodeGenerator.CreateByte(0); } else { variableValue = CodeGenerator.GetRegisterValue(register); } return(variableValue); }
public override object VisitFunctionArrayAssignmentStatement([NotNull] ClepsParser.FunctionArrayAssignmentStatementContext context) { IValue expressionValue = Visit(context.ArrayExpression) as IValue; if (!expressionValue.ExpressionType.IsArrayType) { string errorMessage = String.Format("Expression {0} is not an array and so array access is not possible.", context.ArrayExpression.GetText()); Status.AddError(new CompilerError(FileName, context.ArrayExpression.Start.Line, context.ArrayExpression.Start.Column, errorMessage)); //return something to avoid stopping the compilation return(expressionValue); } ArrayClepsType expressionType = (expressionValue.ExpressionType as ArrayClepsType); List <IValue> indexValues = ArrayIndexAccess(expressionType, context._ArrayIndexExpression); IValueRegister register = CodeGenerator.GetArrayElementRegister(expressionValue, indexValues); CreateAssignment(register, context.RightExpression); return(register); }
public IValue GetRegisterValue(IValueRegister register) { throw new NotImplementedException(); }
public void CreateAssignment(IValueRegister targetRegister, IValue value) { throw new NotImplementedException(); }
public IValue GetRegisterValue(IValueRegister register) { JavaScriptRegister registerToUse = register as JavaScriptRegister; var ret = new JavaScriptValue(registerToUse.Expression, registerToUse.ExpressionType); return ret; }