public object VisitFieldAccessNode(FieldAccessNode n) { WriteLine(n.kind + " - " + n.fieldname + ":" + n.Type); Indent(); Visit(n.basestruct); Dedent(); return(null); }
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); }
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); }
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); }
public override LLVMRegister VisitFieldAccessNode(FieldAccessNode n) { throw new NotImplementedException(); }
public override LData VisitFieldAccessNode(FieldAccessNode n) { LData struc = Visit(n.basestruct); return(struc.GetValue(n.fieldname)); }
public virtual T VisitFieldAccessNode(FieldAccessNode n) { T a = n.basestruct.Accept(this); return(default(T)); }