public override InoTypeEnum Visit(AssignAstNode node) { if (node.Symbol.Type == SALTypeEnum.number) { node.InoType = EvaluateInoAssignment(node); } return(InoTypeEnum.undefined); }
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); }
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); }
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); }