Introspector/GccCpp/tree-dump.c/char class switch

If we look at the assembly the switch for the node class, we will see the following :

Block L5

edit

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	 #,

Jump to #Block L32 if we are equal to a "e"


	cmpb	$101, -257(%ebp)	 #,
	jg	L30	 #,

Jump to #Block L30 if we are greater than a "e"



	cmpb	$50, -257(%ebp)	 #,
	je	L25	 #,

Jump to block #Block L25 if we are equal to a "2"


	cmpb	$50, -257(%ebp)	 #, // 2
	jg	L31	 #,

Jump to block #Block L31 if we are greater than a "2"


	cmpb	$49, -257(%ebp)	 #, // '1'
	je	L23	 #, // case '1'
	jmp	L29	 #

Jump to block #Block L29 if we have a "1"

Block L31

edit
L31:
	cmpb	$60, -257(%ebp)	 #,
	je	L25	 #,
	jmp	L29	 #

Jump to #Block L25 if we have a "<" else jump to #Block L29

Block L30

edit
L30:
	movb	-257(%ebp), %al	 #, tmp134
	subl	$114, %eax	 #, tmp134
	cmpb	$1, %al	 #, tmp134
	ja	L29	 #,
	jmp	L32	 #\

Subtract "r" from the eax

Jump to #Block L29 Jump Above

Jump to #Block L32 if we are equal to a "e"

Block L29

edit

Block L32

edit

Block L25

edit