Exemple #1
0
        public object VisitFieldAccessNode(FieldAccessNode n)
        {
            WriteLine(n.kind + " - " + n.fieldname + ":" + n.Type);
            Indent();
            Visit(n.basestruct);
            Dedent();

            return(null);
        }
Exemple #2
0
        public override MIPSRegister VisitFieldAccessNode(FieldAccessNode n)
        {
            var basestruct = Gen(n.basestruct);

            var(ftype, foffset) = n.basestruct.Type.Fields[n.fieldname];
            emit.EmitLoadStore("lw", basestruct, (short)foffset, basestruct);

            return(basestruct);
        }
Exemple #3
0
 public override object VisitFieldAccessNode(FieldAccessNode n)
 {
     Visit(n.basestruct);
     if (n.basestruct.Type.Kind == TypeSymbol.TypeKind.POINTER)
     {
         n.Type = MakeTypeSymbolForString(n.basestruct.Type.Name).Fields[n.fieldname].Item1;
     }
     else if (n.basestruct.Type.Kind == TypeSymbol.TypeKind.STRUCT)
     {
         n.Type = n.basestruct.Type.Fields[n.fieldname].Item1;
     }
     else if (n.basestruct.Type.Kind == TypeSymbol.TypeKind.ENUM)
     {
         n.Type = TypeSymbol.INT_SYMBOL;
     }
     return(null);
 }
Exemple #4
0
            public override object VisitFieldAccessNode(FieldAccessNode n)
            {
                Visit(n.basestruct);

                if (n.basestruct.Type.Kind == TypeSymbol.TypeKind.STRUCT)
                {
                    semanticChecker.CheckAndReport(n.basestruct.Type.Fields.ContainsKey(n.fieldname), n.sourceLoc, $"Undeclared Field {n.fieldname} in {n.basestruct.Type.Name}");
                }
                else if (n.basestruct.Type.Kind == TypeSymbol.TypeKind.POINTER)
                {
                    var structsymbol = TypeMaker.MakeTypeSymbolForString(n.basestruct.Type.Name);
                    semanticChecker.CheckAndReport(structsymbol.Fields.ContainsKey(n.fieldname), n.sourceLoc, $"Undeclared Field {n.fieldname} in {structsymbol.Name}");
                }
                else if (n.basestruct.Type.Kind == TypeSymbol.TypeKind.ENUM)
                {
                    semanticChecker.CheckAndReport(n.basestruct.Type.EnumItems.ContainsKey(n.fieldname), n.sourceLoc, $"Enum {n.basestruct.Type.Name} has no item {n.fieldname}");
                }
                else
                {
                    semanticChecker.CheckAndReport(n.basestruct.Type.Kind == TypeSymbol.TypeKind.STRUCT, n.sourceLoc, "Struct not typeof struct or pointer");
                }
                return(null);
            }
Exemple #5
0
 public override LLVMRegister VisitFieldAccessNode(FieldAccessNode n)
 {
     throw new NotImplementedException();
 }
Exemple #6
0
            public override LData VisitFieldAccessNode(FieldAccessNode n)
            {
                LData struc = Visit(n.basestruct);

                return(struc.GetValue(n.fieldname));
            }
Exemple #7
0
        public virtual T VisitFieldAccessNode(FieldAccessNode n)
        {
            T a = n.basestruct.Accept(this);

            return(default(T));
        }