Ejemplo n.º 1
0
        public override InoTypeEnum Visit(AssignAstNode node)
        {
            if (node.Symbol.Type == SALTypeEnum.number)
            {
                node.InoType = EvaluateInoAssignment(node);
            }

            return(InoTypeEnum.undefined);
        }
Ejemplo n.º 2
0
        public override SALTypeEnum Visit(AssignAstNode node)
        {
            SALTypeEnum expr = Visit(node.Expr);

            if (expr != node.Symbol.Type)
            {
                Errors.Add(new Error(ErrorEnum.TypeMismatch, node.Token.Line, node.Symbol.Name));
            }

            return(node.Symbol.Type);
        }
Ejemplo n.º 3
0
        public override string Visit(AssignAstNode node)
        {
            if (!(AlreadyVisited.Any(x => x == node)))
            {
                AlreadyVisited.Add(node);
            }
            else
            {
                return("");
            }


            if (node.Symbol.Scope.Depth == 0 && IsLoop && node.Id is IdAstNode idnode)
            {
                if (idnode.Type != SALTypeEnum.undefined)
                {
                    return("");
                }
            }

            string AssignmentCode = "";
            string expression     = Visit(node.Expr);
            string id             = Visit(node.Id);

            if (node.InoType != InoTypeEnum.undefined && !(DeclOrInit.Any(x => x == node.Symbol)))
            {
                id = node.InoType + " " + id;
                DeclOrInit.Add(node.Symbol);
            }

            if (expression.Last() == ';')
            {
                AssignmentCode = id + " = " + expression;
            }
            else
            {
                AssignmentCode = id + " = " + expression + ";";
            }

            if (node.Symbol.Scope.Depth == 0 && IsGlobal)
            {
                GlobalVariables += AssignmentCode + "\n";
                return("");
            }

            return(AssignmentCode);
        }
Ejemplo n.º 4
0
        private InoTypeEnum EvaluateInoAssignment(AssignAstNode node)
        {
            InoTypeEnum expressionType = Visit(node.Expr);

            if (VariableTypes.ContainsKey(node.Symbol))
            {
                VariableTypes.TryGetValue(node.Symbol, out InoTypeEnum type);
                if (type == InoTypeEnum.undefined)
                {
                    VariableTypes[node.Symbol] = expressionType;
                }
            }
            else
            {
                VariableTypes.Add(node.Symbol, expressionType);
            }

            return(expressionType);
        }