public TypeVisitor(DemiTasse.symbol.SymbolTable symtab, ClassRec c, MethodRec m) { symTable = symtab; currClass = c; currMethod = m; hasReturn = false; }
public ClassRec(AstId cid) { _id = cid; _parent = null; _vars = new List<VarRec>(); _methods = new Dictionary<String, MethodRec>(); }
// *********************************************************** // * constructor -- a symbol table is passed in as a parameter // *********************************************************** public TypeVisitor(SymbolTable symtab) { symTable = symtab; currClass = null; currMethod = null; hasReturn = false; }
public IrgenVisitor(SymbolTable symTable_, TypeVisitor tv_) { cOne = new IrConst(1); cZero = new IrConst(0); cWordSize = new IrName("wSZ"); symTable = symTable_; tv = tv_; currClass = null; currMethod = null; }
private int GetNumObjVars(ClassRec c) { int numVars = 0; while (null != c) { numVars += c.VarCnt(); c = c.Parent(); } return numVars; }
private int GetInitStmts(ClassRec c, IrStmtList stmts, IrTemp tmp) { ClassRec saveCurrClass; VarRec v; int varCnt = 0; // Get init STMTs from inherited class if (null != c.Parent()) { varCnt = GetInitStmts(c.Parent(), stmts, tmp); } // Add init STMTs from this class for (int i = 0; i < c.VarCnt(); i++) { v = c.GetClassVarAt(i); if (null == v.Init()) { stmts.add(ObjVarInitStmt(tmp, varCnt + i, v.Idx - 1, cZero)); } else { saveCurrClass = currClass; currClass = c; IrExp e = v.Init().accept(this); currClass = saveCurrClass; stmts.add(ObjVarInitStmt(tmp, varCnt + i, v.Idx - 1, e)); } } return varCnt + c.VarCnt(); }
// ClassDecl --- // Id cid, pid; // VarDeclList vl; // MethodDeclList ml; public IrFuncList visit(AstClassDecl n) { currClass = symTable.GetClass(n.cid); IrFuncList funcs = n.ml.accept(this); currClass = null; return funcs; }
public void LinkParent(ClassRec p) { _parent = p; int start_idx = AncestorVarCnt() + 1; for (int i = 0; i < _vars.Count; i++) _vars[i].Idx = (start_idx + i); }
public MethodRec GetMethod(ClassRec c, AstId mid) { MethodRec m; while (c != null) { if ((m = c.GetMethod(mid)) != null) return m; c = c.Parent(); } throw new SymbolException("Method " + mid.s + " not defined"); }
public string UniqueMethodName(ClassRec c, AstId mid) { MethodRec m; while (c != null) { if ((m = c.GetMethod(mid)) != null) return c.Id().s + "_" + mid.s; c = c.Parent(); } throw new SymbolException("Method " + mid.s + " not defined"); }
public VarRec GetVar(ClassRec c, AstId vid) { VarRec v; while (c != null) { if ((v = c.GetClassVar(vid)) != null) return v; c = c.Parent(); } throw new SymbolException("Var " + vid.s + " not defined"); }
public VarRec GetVar(ClassRec c, MethodRec m, AstId vid) { VarRec v; if (m != null) { if ((v = m.GetLocal(vid)) != null) return v; if ((v = m.GetParam(vid)) != null) return v; } return GetVar(c, vid); }
public void visit(AstClassDecl n) { currClass = symTable.getClass(n.cid); //n.vl.accept(this); n.ml.accept(this); currClass = null; }
private MethodRec currMethod; // the current method scope #endregion Fields #region Constructors public SymbolVisitor() { symTable = new symbol.SymbolTable(); currClass = null; currMethod = null; }
public void setClass(ClassRec c) { currClass = c; }