⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 transtypes.java

📁 是一款用JAVA 编写的编译器 具有很强的编译功能
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
    public void visitConditional(JCConditional tree) {        tree.cond = translate(tree.cond, syms.booleanType);        tree.truepart = translate(tree.truepart, erasure(tree.type));        tree.falsepart = translate(tree.falsepart, erasure(tree.type));        tree.type = erasure(tree.type);        result = tree;    }   public void visitIf(JCIf tree) {        tree.cond = translate(tree.cond, syms.booleanType);        tree.thenpart = translate(tree.thenpart);        tree.elsepart = translate(tree.elsepart);        result = tree;    }    public void visitExec(JCExpressionStatement tree) {        tree.expr = translate(tree.expr, null);        result = tree;    }    public void visitReturn(JCReturn tree) {        tree.expr = translate(tree.expr, currentMethod.sym.erasure(types).getReturnType());        result = tree;    }    public void visitThrow(JCThrow tree) {        tree.expr = translate(tree.expr, erasure(tree.expr.type));        result = tree;    }    public void visitAssert(JCAssert tree) {        tree.cond = translate(tree.cond, syms.booleanType);        if (tree.detail != null)            tree.detail = translate(tree.detail, erasure(tree.detail.type));        result = tree;    }    public void visitApply(JCMethodInvocation tree) {        tree.meth = translate(tree.meth, null);        Symbol meth = TreeInfo.symbol(tree.meth);        Type mt = meth.erasure(types);        List<Type> argtypes = mt.getParameterTypes();        if (allowEnums &&            meth.name==names.init &&            meth.owner == syms.enumSym)            argtypes = argtypes.tail.tail;        if (tree.varargsElement != null)            tree.varargsElement = types.erasure(tree.varargsElement);        else            assert tree.args.length() == argtypes.length();        tree.args = translateArgs(tree.args, argtypes, tree.varargsElement);        // Insert casts of method invocation results as needed.        result = retype(tree, mt.getReturnType(), pt);    }    public void visitNewClass(JCNewClass tree) {        if (tree.encl != null)            tree.encl = translate(tree.encl, erasure(tree.encl.type));        tree.clazz = translate(tree.clazz, null);        if (tree.varargsElement != null)            tree.varargsElement = types.erasure(tree.varargsElement);        tree.args = translateArgs(            tree.args, tree.constructor.erasure(types).getParameterTypes(), tree.varargsElement);        tree.def = translate(tree.def, null);        tree.type = erasure(tree.type);        result = tree;    }    public void visitNewArray(JCNewArray tree) {        tree.elemtype = translate(tree.elemtype, null);        translate(tree.dims, syms.intType);        tree.elems = translate(tree.elems,                               (tree.type == null) ? null                               : erasure(types.elemtype(tree.type)));        tree.type = erasure(tree.type);        result = tree;    }    public void visitParens(JCParens tree) {        tree.expr = translate(tree.expr, pt);        tree.type = erasure(tree.type);        result = tree;    }    public void visitAssign(JCAssign tree) {        tree.lhs = translate(tree.lhs, null);        tree.rhs = translate(tree.rhs, erasure(tree.lhs.type));        tree.type = erasure(tree.type);        result = tree;    }    public void visitAssignop(JCAssignOp tree) {        tree.lhs = translate(tree.lhs, null);        tree.rhs = translate(tree.rhs, erasure(tree.rhs.type));        tree.type = erasure(tree.type);        result = tree;    }    public void visitUnary(JCUnary tree) {        tree.arg = translate(tree.arg, tree.operator.type.getParameterTypes().head);        result = tree;    }    public void visitBinary(JCBinary tree) {        tree.lhs = translate(tree.lhs, tree.operator.type.getParameterTypes().head);        tree.rhs = translate(tree.rhs, tree.operator.type.getParameterTypes().tail.head);        result = tree;    }    public void visitTypeCast(JCTypeCast tree) {        tree.clazz = translate(tree.clazz, null);        tree.type = erasure(tree.type);        tree.expr = translate(tree.expr, tree.type);        result = tree;    }    public void visitTypeTest(JCInstanceOf tree) {        tree.expr = translate(tree.expr, null);        tree.clazz = translate(tree.clazz, null);        result = tree;    }    public void visitIndexed(JCArrayAccess tree) {        tree.indexed = translate(tree.indexed, erasure(tree.indexed.type));        tree.index = translate(tree.index, syms.intType);        // Insert casts of indexed expressions as needed.        result = retype(tree, types.elemtype(tree.indexed.type), pt);    }    // There ought to be nothing to rewrite here;    // we don't generate code.    public void visitAnnotation(JCAnnotation tree) {        result = tree;    }    public void visitIdent(JCIdent tree) {        Type et = tree.sym.erasure(types);        // Map type variables to their bounds.        if (tree.sym.kind == TYP && tree.sym.type.tag == TYPEVAR) {            result = make.at(tree.pos).Type(et);        } else        // Map constants expressions to themselves.        if (tree.type.constValue() != null) {            result = tree;        }        // Insert casts of variable uses as needed.        else if (tree.sym.kind == VAR) {            result = retype(tree, et, pt);        }        else {            tree.type = erasure(tree.type);            result = tree;        }    }    public void visitSelect(JCFieldAccess tree) {        Type t = tree.selected.type;        if (t.isCompound() || (t.tag == TYPEVAR && t.getUpperBound().isCompound())) {            if ((tree.sym.flags() & IPROXY) != 0) {                tree.sym = ((MethodSymbol)tree.sym).                    implemented((TypeSymbol)tree.sym.owner, types);            }            tree.selected = cast(                translate(tree.selected, erasure(t)),                erasure(tree.sym.owner.type));        } else            tree.selected = translate(tree.selected, erasure(t));                // Map constants expressions to themselves.        if (tree.type.constValue() != null) {            result = tree;        }        // Insert casts of variable uses as needed.        else if (tree.sym.kind == VAR) {            result = retype(tree, tree.sym.erasure(types), pt);        }        else {            tree.type = erasure(tree.type);            result = tree;        }    }    public void visitTypeArray(JCArrayTypeTree tree) {        tree.elemtype = translate(tree.elemtype, null);        tree.type = erasure(tree.type);        result = tree;    }    /** Visitor method for parameterized types.     */    public void visitTypeApply(JCTypeApply tree) {        // Delete all type parameters.        result = translate(tree.clazz, null);    }/************************************************************************** * utility methods *************************************************************************/    private Type erasure(Type t) {        return types.erasure(t);    }/************************************************************************** * main method *************************************************************************/    private Env<AttrContext> env;    void translateClass(ClassSymbol c) {        Type st = types.supertype(c.type);        // process superclass before derived        if (st.tag == CLASS)            translateClass((ClassSymbol)st.tsym);        Env<AttrContext> myEnv = enter.typeEnvs.remove(c);        if (myEnv == null)            return;        Env<AttrContext> oldEnv = env;        try {            env = myEnv;            // class has not been translated yet            TreeMaker savedMake = make;            Type savedPt = pt;            make = make.forToplevel(env.toplevel);            pt = null;            try {                JCClassDecl tree = (JCClassDecl) env.tree;                tree.typarams = List.nil();                super.visitClassDef(tree);                make.at(tree.pos);                if (addBridges) {                    ListBuffer<JCTree> bridges = new ListBuffer<JCTree>();                    if ((tree.sym.flags() & INTERFACE) == 0)                        addBridges(tree.pos(), tree.sym, bridges);                    tree.defs = bridges.toList().prependList(tree.defs);                }                tree.type = erasure(tree.type);            } finally {                make = savedMake;                pt = savedPt;            }        } finally {            env = oldEnv;        }    }    /** Translate a toplevel class definition.     *  @param cdef    The definition to be translated.     */    public JCTree translateTopLevelClass(JCTree cdef, TreeMaker make) {        // note that this method does NOT support recursion.        this.make = make;        pt = null;        return translate(cdef, null);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -