예제 #1
0
        public void CreateAssignment(IValueRegister targetRegister, IValue value)
        {
            JavaScriptRegister registerToUse = targetRegister as JavaScriptRegister;
            JavaScriptValue valueToUse = value as JavaScriptValue;

            AppendFormatLine("{0} = {1};", registerToUse.Expression, valueToUse.Expression);
        }
예제 #2
0
        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)));
        }
예제 #3
0
        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);
        }
예제 #5
0
        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)));
        }
예제 #6
0
        public void CreateAssignment(IValueRegister targetRegister, IValue value)
        {
            JavaScriptRegister registerToUse = targetRegister as JavaScriptRegister;
            JavaScriptValue    valueToUse    = value as JavaScriptValue;

            AppendFormatLine("{0} = {1};", registerToUse.Expression, valueToUse.Expression);
        }
예제 #7
0
 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 && 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);
        }
예제 #15
0
 public IValue GetRegisterValue(IValueRegister register)
 {
     throw new NotImplementedException();
 }
예제 #16
0
 public void CreateAssignment(IValueRegister targetRegister, IValue value)
 {
     throw new NotImplementedException();
 }
예제 #17
0
 public void CreateAssignment(IValueRegister targetRegister, IValue value)
 {
     throw new NotImplementedException();
 }
예제 #18
0
 public IValue GetRegisterValue(IValueRegister register)
 {
     throw new NotImplementedException();
 }
예제 #19
0
 public IValue GetRegisterValue(IValueRegister register)
 {
     JavaScriptRegister registerToUse = register as JavaScriptRegister;
     var ret = new JavaScriptValue(registerToUse.Expression, registerToUse.ExpressionType);
     return ret;
 }
        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");
            }
        }