/** Access codes for dereferencing(解引用), assignment,
 * and pre/post increment/decrement.
 * Access codes for assignment operations are determined
 * by method accessCode below.
 *
 *  All access codes for accesses to the current class are even. 都是偶数
 *  If a member of the superclass should be accessed instead (because
 *  access was via a qualified super), add one to the corresponding code
 *  for the current class, making the number odd.
 *  This numbering scheme is used by the backend to decide whether
 *  to issue an invokevirtual or invokespecial call.
 *  后端使用他的编号方案来决定是否发出一个invokevirtual或invokespecial call。
 *  @see Gen.visitSelect(Select tree)
 */
// 关于invokevirtual与invokespecial指令相关介绍:
// https://www.cnblogs.com/extjs4/p/9103190.html
// 如下的编号都为偶数
private static final int
    DEREFcode = 0, // deref
    ASSIGNcode = 2, // assign
    PREINCcode = 4, // preinc
    PREDECcode = 6, // predec
    POSTINCcode = 8, // postinc
    POSTDECcode = 10, // postdec
    FIRSTASGOPcode = 12; // first assignment op

定义了accessCode为:0、2、4、6、8、10、12

举个例子,如下:

class TestAccessPrivateVar {
	private int a = 1;
	class MyInner {
		public void t() {
			int b = a; // deref
			a = 2;   // assign
			int c;
			c = ++a; // preinc
			c = --a; // predec
			c = a++; // postinc
			c = a--; // postdec
			a += 1; // first assignment op
		}
	}
}
iadd            = 96,// 0x60	iadd	将栈顶两int型数值相加并将结果压入栈顶
ladd            = 97,// 0x61	ladd	将栈顶两long型数值相加并将结果压入栈顶
fadd            = 98,// 0x62	fadd	将栈顶两float型数值相加并将结果压入栈顶
dadd            = 99,// 0x63	dadd	将栈顶两double型数值相加并将结果压入栈顶
isub            = 100,// 0x64	is	    将栈顶两int型数值相减并将结果压入栈顶
lsub            = 101,// 0x65	ls	    将栈顶两long型数值相减并将结果压入栈顶
fsub            = 102,// 0x66	fs	    将栈顶两float型数值相减并将结果压入栈顶
dsub            = 103,// 0x67	ds	    将栈顶两double型数值相减并将结果压入栈顶
imul            = 104,// 0x68	imul	将栈顶两int型数值相乘并将结果压入栈顶
lmul            = 105,// 0x69	lmul	将栈顶两long型数值相乘并将结果压入栈顶
fmul            = 106,// 0x6a	fmul	将栈顶两float型数值相乘并将结果压入栈顶
dmul            = 107,// 0x6b	dmul	将栈顶两double型数值相乘并将结果压入栈顶
idiv            = 108,// 0x6c           将栈顶两int型数值相除并将结果压入栈顶
ldiv            = 109,// 0x6d	ldiv	将栈顶两long型数值相除并将结果压入栈顶
fdiv            = 110,// 0x6e	fdiv	将栈顶两float型数值相除并将结果压入栈顶
ddiv            = 111,// 0x6f	ddiv	将栈顶两double型数值相除并将结果压入栈顶
imod            = 112,// 0x70	irem	将栈顶两int型数值作取模运算并将结果压入栈顶
lmod            = 113,// 0x71	lrem	将栈顶两long型数值作取模运算并将结果压入栈顶
fmod            = 114,// 0x72	frem	将栈顶两float型数值作取模运算并将结果压入栈顶
dmod            = 115,// 0x73	drem	将栈顶两double型数值作取模运算并将结果压入栈顶
ineg            = 116,// 0x74	ineg	将栈顶int型数值取负并将结果压入栈顶
lneg            = 117,// 0x75	lneg	将栈顶long型数值取负并将结果压入栈顶
fneg            = 118,// 0x76	fneg	将栈顶float型数值取负并将结果压入栈顶
dneg            = 119,// 0x77	dneg	将栈顶double型数值取负并将结果压入栈顶

ishl            = 120,// 0x78	ishl	将int型数值左移位指定位数并将结果压入栈顶
lshl            = 121,// 0x79	lshl	将long型数值左移位指定位数并将结果压入栈顶
ishr            = 122,// 0x7a	ishr	将int型数值右(符号)移位指定位数并将结果压入栈顶
lshr            = 123,// 0x7b	lshr	将long型数值右(符号)移位指定位数并将结果压入栈顶
iushr           = 124,// 0x7c	iushr	将int型数值右(无符号)移位指定位数并将结果压入栈顶
lushr           = 125,// 0x7d	lushr	将long型数值右(无符号)移位指定位数并将结果压入栈顶

iand            = 126,// 0x7e	iand	将栈顶两int型数值作“按位与”并将结果压入栈顶
land            = 127,// 0x7f	land	将栈顶两long型数值作“按位与”并将结果压入栈顶
ior             = 128,// 0x80	ior	将栈顶两int型数值作“按位或”并将结果压入栈顶
lor             = 129,// 0x81	lor	将栈顶两long型数值作“按位或”并将结果压入栈顶
ixor            = 130,// 0x82	ixor	将栈顶两int型数值作“按位异或”并将结果压入栈顶
lxor            = 131,// 0x83	lxor	将栈顶两long型数值作“按位异或”并将结果压入栈顶

算出来的accessCode为:12、14、16 ... 80 、 82

int string_add      = 256,  // string +

算出来的accessCode为:84

 int ishll           = 270,  // int shift left with long count 向左移动,移动类型为long
        lshll           = 271,  // long shift left with long count
        ishrl           = 272,  // int shift right with long count
        lshrl           = 273,  // long shift right with long count
        iushrl          = 274,  // int unsigned shift right with long count
        lushrl          = 275;  // long unsigned shift right with long count 例如>>>

算出来的accessCode为:86、88、... 96  

  

 

lower类的accessCode解读的更多相关文章

  1. java.lang.system 类源码解读

    通过每块代码进行源码解读,并发现源码使用的技术栈,扩展视野. registerNatives 方法解读 /* register the natives via the static initializ ...

  2. java.lang.String 类源码解读

    String类定义实现了java.io.Serializable, Comparable<String>, CharSequence 三个接口:并且为final修饰. public fin ...

  3. java.lang.Long 类源码解读

    总体阅读了Long的源码,基本跟Integer类类似,所以特别全部贴出源码,直接注释进行理解. // final修饰符 public final class Long extends Number i ...

  4. 【QT相关】类头文件解读、QT编辑模式、读取text文本

    Wizard产生的头文件类包含了必须的#include文件.构造函数.析构函数和UI对象: #include <QMainWindow> namespace Ui {class Notep ...

  5. SimpleVisitorMemberType类的visitClassType解读

    举个例子,如下: class CA<T>{ public T getVal(){ return null; } } interface IA{} interface IB{} public ...

  6. python装饰器2:类装饰器

    装饰器1:函数装饰器 装饰器2:类装饰器 装饰器3:进阶 本文是装饰器相关内容的第二篇,关于类装饰器. "类装饰器"有两种解读方式:用来装饰类的装饰器:类作为装饰器装饰其它东西.你 ...

  7. Volley 框架解析(二)--RequestQueue核心解读

    主要围绕RequestQueue进行解读,它的两个请求队列CacheQueue.NetworkQueue是如何调用的,第一条请求的执行过程及如何处理重复请求?对RequestQueue及相关的类进行详 ...

  8. Large Class--过大的类--要重构的信号

    如果想利用单个类做太多事情,其内往往就会出现太多实例变量.一旦如此,Duplicated Code也就接踵而至.     解决方法:     1.将类内彼此相关的变量,将它们放在一起.使用Extrac ...

  9. TypeScript完全解读(26课时)_汇总贴

    ECMAScript 6 入门:http://es6.ruanyifeng.com/ 官网:http://www.typescriptlang.org/ 中文网:https://www.tslang. ...

随机推荐

  1. MOD13A1: MODIS/Terra Vegetation Indices 16-Day L3 Global 500 m SIN Grid V006

    https://lpdaac.usgs.gov/node/838 Description The MOD13A1 Version 6 product provides a Vegetation Ind ...

  2. POJ1062不错的题——spfa倒向建图——枚举等级限制

    POJ1062 虽然是中文题目但是还是有一定几率都不准题目意思的:1.所有可能降价的措施不是降价多少钱而是降至多少钱2.等级范围:是你所走的那一条路中所有人中最好最低等级差不允许超过limit限制 思 ...

  3. 如何将Jenkins multiline string parameter的多行文本优雅的保存为文件

    [现象]: 使用multi-line string parameter获取的文本变量,在jenkins shell里面显示为单行文本(空格分割). [问题]:能否转换为多行文本,并存入文件. [解决方 ...

  4. 设计模式之命令模式(Command Pattern)

    一.什么是命令模式? 命令模式,封装了方法调用细节,以解耦请求者与执行者,具体流程如下: 1.从请求者(客户)的角度看 请求者(客户)发出请求 -> 调用者(系统)构造命令对象封装请求 -> ...

  5. wpf使用DynamicDataDisplay插件,修改x轴的样式,改成透明的。

    时光偷走的,永远都是我们眼皮底下看不见的珍贵. 问题:X轴会显示灰色拖动条. 解决:将X轴颜色改为透明. DDD插件是开源的,但是网上的参考资料却很少,所以,很多问题在网上搜索不到,因为没有找到该插件 ...

  6. Asp.net MVC Linq to SQL Model verification

    Models public class Student { public int Id { get; set; } [Required(ErrorMessage = "姓名不能为空!&quo ...

  7. Hello World! 我的程序员入坑之旅!

    先说下本文标题,各行各业都有自己的行规和一些内行人玩的梗什么的,这是我开始写技术博客的第一篇,所以它的标题毫无疑问只能是Hello World! 介绍一下我自己 我算是一个少见的科班出身的开发者了,1 ...

  8. (转)为什么要重写 hashcode 和 equals 方法?

    作者丨hsm_computer cnblogs.com/JavaArchitect/p/10474448.html 我在面试Java初级开发的时候,经常会问:你有没有重写过hashcode方法?不少候 ...

  9. Codeforces450 B. Jzzhu and Sequences (找规律)

    题目链接:https://vjudge.net/problem/CodeForces-450B Jzzhu has invented a kind of sequences, they meet th ...

  10. 平衡二叉树(AVL)的理解和实现(Java)

    AVL的定义 平衡二叉树:是一种特殊的二叉排序树,其中每一个节点的左子树和右子树的高度差至多等于1.从平衡二叉树的名字中可以看出来,它是一种高度平衡的二叉排序树.那么什么叫做高度平衡呢?意思就是要么它 ...