Exemplo n.º 1
0
 public TypeVisitor(DemiTasse.symbol.SymbolTable symtab, ClassRec c, MethodRec m)
 {
     symTable = symtab;
     currClass = c;
     currMethod = m;
     hasReturn = false;
 }
Exemplo n.º 2
0
 public ClassRec(AstId cid)
 {
     _id = cid;
     _parent = null;
     _vars = new List<VarRec>();
     _methods = new Dictionary<String, MethodRec>();
 }
Exemplo n.º 3
0
 // ***********************************************************
 // * constructor -- a symbol table is passed in as a parameter
 // ***********************************************************
 public TypeVisitor(SymbolTable symtab)
 {
     symTable = symtab;
     currClass = null;
     currMethod = null;
     hasReturn = false;
 }
Exemplo n.º 4
0
 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;
 }
Exemplo n.º 5
0
        private int GetNumObjVars(ClassRec c)
        {
            int numVars = 0;

            while (null != c)
            {
                numVars += c.VarCnt();
                c = c.Parent();
            }
            return numVars;
        }
Exemplo n.º 6
0
        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();
        }
Exemplo n.º 7
0
        // 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;
        }
Exemplo n.º 8
0
 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);
 }
Exemplo n.º 9
0
 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");
 }
Exemplo n.º 10
0
 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");
 }
Exemplo n.º 11
0
 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");
 }
Exemplo n.º 12
0
 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);
 }
Exemplo n.º 13
0
    public void visit(AstClassDecl n) {

        currClass = symTable.getClass(n.cid);
        //n.vl.accept(this);
        n.ml.accept(this);
        currClass = null;

    }
Exemplo n.º 14
0
        private MethodRec currMethod; // the current method scope

        #endregion Fields

        #region Constructors

        public SymbolVisitor()
        {
            symTable = new symbol.SymbolTable();
            currClass = null;
            currMethod = null;
        }
Exemplo n.º 15
0
 public void setClass(ClassRec c)
 {
     currClass = c;
 }