Introspector/GccCpp/tree-dump.c/字符类switch
外观
< Introspector | GccCpp
如果我们查看节点类的汇编代码,我们将看到以下内容
L5
subl $12, %esp #, leal -56(%ebp), %eax #, tmp119 pushl %eax # tmp119 call TReftree_code_class::operator char() # addl $4, %esp #, movsbl %al,%eax # tmp120, tmp121 pushl %eax # tmp121 call IS_EXPR_CODE_CLASS(char) # addl $16, %esp #, testb %al, %al # tmp122 je L21 #, subl $8, %esp #, pushl -24(%ebp) # t pushl 8(%ebp) # di call queue_and_dump_type(dump_info*, tree_common*) # addl $16, %esp #, subl $12, %esp #, leal -56(%ebp), %eax #, tmp132 pushl %eax # tmp132 call TReftree_code_class::operator char() # addl $16, %esp #, movb %al, -257(%ebp) #,
cmpb $101, -257(%ebp) #, "e" je L32 #,
如果我们等于一个“e”,则跳至#块 L32
cmpb $101, -257(%ebp) #, jg L30 #,
如果我们大于一个“e”,则跳至#块 L30
cmpb $50, -257(%ebp) #, je L25 #,
如果我们等于一个“2”,则跳至块#块 L25
cmpb $50, -257(%ebp) #, // 2 jg L31 #,
如果我们大于一个“2”,则跳至块#块 L31
cmpb $49, -257(%ebp) #, // '1' je L23 #, // case '1' jmp L29 #
如果我们有一个“1”,则跳至块#块 L29
L31: cmpb $60, -257(%ebp) #, je L25 #, jmp L29 #
如果我们有一个“<”,则跳至#块 L25,否则跳至#块 L29
L30: movb -257(%ebp), %al #, tmp134 subl $114, %eax #, tmp134 cmpb $1, %al #, tmp134 ja L29 #, jmp L32 #\
从eax中减去“r”
跳至#块 L29 跳过
如果我们等于一个“e”,则跳至#块 L32