Пример #1
0
        public override MIPSRegister VisitIdenExprNode(IdenExprNode n)
        {
            var iden = vars.IsInScope(n.name);

            if (iden.FirstSet)
            {
                return(iden.First);
            }
            var reg = GetMIPSRegister();

            emit.EmitLoadStore("lw", reg, iden.Second, rm.SP);
            return(reg);
        }
Пример #2
0
            public override object VisitIdenExprNode(IdenExprNode n)
            {
                string name = n.name;

                if (n.Type.Kind == TypeSymbol.TypeKind.FUNCTION)
                {
                    if (n.Type.ParameterTypes.Count > 0)
                    {
                        name += $"`({n.Type.ParameterTypes.Select(ts => ts.Name).Aggregate((a, b) => $"{a},{b}")})";
                    }
                    else
                    {
                        name += "`(void)";
                    }
                }
                semanticChecker.CheckAndReport(varTypes.IsInScope(name) != null, n.sourceLoc, $"Undeclared Variable {n.name}");
                return(null);
            }
Пример #3
0
        public override object VisitIdenExprNode(IdenExprNode n)
        {
            n.Type = varTypes.IsInScope(n.name);

            if (n.Type == null)
            {
                var funmatches = varTypes.GetPredicateMatches((s, ts) => ts.FunctionName != null && ts.FunctionName.StartsWith(n.name + "`"));
                if (funmatches.Count == 1)
                {
                    n.Type = funmatches.ElementAt(0);
                }
                else if (funmatches.Count > 1)
                {
                    n.Type = TypeSymbol.INFER_FROM_SYMBOL(n.name, funmatches);
                }
            }

            return(null);
        }
Пример #4
0
 public override LLVMRegister VisitIdenExprNode(IdenExprNode n)
 {
     throw new NotImplementedException();
 }
Пример #5
0
 public object VisitIdenExprNode(IdenExprNode n)
 {
     WriteLine(n.kind + " - " + n.name + ":" + n.Type);
     return(null);
 }
Пример #6
0
 public override LData VisitIdenExprNode(IdenExprNode n)
 {
     return(Vars.IsInScope(n.name));
 }
Пример #7
0
 public virtual T VisitIdenExprNode(IdenExprNode n)
 {
     return(default(T));
 }