摘要: 生成字节码的逻辑大部分都在com.sun.tools.javac.jvm包中,核心对应Gen类, 但具体内容在ClassWriter.writeClass()完成.其中ClassWriter.writeClassFile()负责输出字节码。 要从AST生成字节码了,那么还需要完成一次转换,就是把AS 阅读全文
posted @ 2022-04-15 15:16 Mars.wang 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 去除语法糖分为三个阶段的内容,分别是: TRANSTYPES, //泛型擦除 UNLAMBDA, //lambda表达式转换成方法 LOWER, //内部类、foreach循环、断言等 核心的逻辑分别对应到三个类: com.sun.tools.javac.comp.TransTypes com.su 阅读全文
posted @ 2022-04-15 15:14 Mars.wang 阅读(100) 评论(0) 推荐(0) 编辑
摘要: 数据流分析flow(),对应Flow.analyzeTree()方法。 数据流分析分四个阶段,分别是活跃性分析、赋值分析、异常分析、本地变量捕获分析。 public void analyzeTree(Env<AttrContext> env, TreeMaker make) { new AliveA 阅读全文
posted @ 2022-04-15 15:13 Mars.wang 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 二、属性分析 属性分析attribute(),核心逻辑在Attr类的attrib()方法。 com.sun.tools.javac.comp.Attr 类的代码。在这个类的头注释里,你会发现原来 ATTR 做了四件事: Check:类型检查。 Resolve:做名称的消解, ConstFold:常量 阅读全文
posted @ 2022-04-15 15:12 Mars.wang 阅读(274) 评论(0) 推荐(0) 编辑
摘要: 注解处理processAnnotations(),其核心逻辑在com.sun.tools.javac.processing.JavacProcessingEnvironment类的doProcessing()方法中。 阅读全文
posted @ 2022-04-15 15:11 Mars.wang 阅读(122) 评论(0) 推荐(0) 编辑
摘要: 一、生成符号表 填充符号表的核心逻辑在com.sun.tools.javac.comp.Enter类。 在讨论填充符号表的逻辑之前,首先要明确一下,什么是符号? 我们在java代码中,可能会声明一个类,类中有属性和方法,这些对于计算机而言,都是一种符号。 在java编译器的实现中,定义了专门的符号类 阅读全文
posted @ 2022-04-15 11:02 Mars.wang 阅读(760) 评论(0) 推荐(0) 编辑