// File: /workspace/github_c_makefile_star2_O0/nimble-code[P]Uno/Src/explore.c
// Function: walker
void
walker(treenode *n, int level, int pre)
{
	if (level >= sizeof(XBuf_Levels)/sizeof(char *))
	{	fprintf(stderr, "error: exceeded builtin depth limit\n");
		clean_tmps();
		exit(1);
	}
	if (!XBuf_Levels[level])
	{	XBuf_Levels[level] = emalloc(BufLimit * sizeof(char));
	}
	Xbuf = XBuf_Levels[level];

	if (n->hdr.warned || exclude_location(n))
	{	return;
	}

	/**** rule 4.1.14  all if/then/else/if chains must end with an else */
	/**** rule 4.1.13  all if stmnts must be compound statements */

	if (IF_THEN_ELSE(n))
	{	if (follow_chain(IF_ELSE(n)->rnode))
		{	if (pre)
			{	found_4_1_14++;
				Xbuf[0] = '\0';
			} else
			{	if (--found_4_1_14 == 0)
				{	location(n);
					printf("if-then-else-if chain does not end with 'else' (%s)\n",
					Xbuf);
		}	}	}

		if (IF_BODY(n)->rnode == NULL
		|| (W_TYPE(IF_BODY(n)->rnode) != TN_BLOCK && W_TYPE(IF_BODY(n)->rnode) != TN_IF ))
		{	location(n);
			printf("body of if-statement is not enclosed in braces\n");
		}
		if (ELSE_BODY(n)->rnode == NULL
		|| (W_TYPE(ELSE_BODY(n)->rnode) != TN_BLOCK && W_TYPE(ELSE_BODY(n)->rnode) != TN_IF ))
		{	location(n);
			printf("body of else is not enclosed in braces\n");
	}	}

	/**** rule 4.1.13  all if stmnts must be compound statements */
	if (IF_THEN(n))
	{	if (IF_BODY(n)->rnode == NULL
		|| (W_TYPE(IF_BODY(n)->rnode) != TN_BLOCK && W_TYPE(IF_BODY(n)->rnode) != TN_IF ))
		{	location(n);
			printf("body of if-statement is not enclosed in braces\n");
	}	}


	/**** rule 4.1.12 all loops must be compound statements */

	if (pre && FOR_LOOP(n)
	&& (FOR_BODY(n)->rnode == NULL || W_TYPE(FOR_BODY(n)->rnode) != TN_BLOCK))
	{	location(n);
		printf("body of for-stmnt is not enclosed in braces\n");
		/* name_of_node(W_TYPE(FOR_BODY(n))) */
	}

	if (pre && (WHILE_LOOP(n) || UNTIL_LOOP(n))
	&& W_TYPE(WHILE_BODY(n->rnode)) != TN_BLOCK)
	{	location(n);
		printf("body of while is not enclosed in braces\n");
		/* name_of_node(W_TYPE(WHILE_BODY(n->rnode))) */
	}

	/**** rule 4.1.15 every switch statement must have a default */

	if (pre && SWITCH(n) && W_TYPE(SWITCH_BODY(n)->rnode) == TN_BLOCK)
	{	if (!has_default(SWITCH_BODY(n)->rnode->lnode))
		{	location(n);
			printf("switch has no default case\n");
		}
	}

	/**** rule 4.9.5 enum and macro names must be in upper case */
	if (pre && B_TYPE(n) == NODE_T && W_TYPE(n) == TN_ENUM_LIST)
	{	char *p = has_lower_case(n);
		if (p)
		{	location(n);
			printf("enum name '%s' has lower-case characters\n", p);
	}	}

	/**** rule 4.9.4 variable and function names, and tags, have no uppercase */
	/**** rule 4.1.5 function prototypes must be declared at file scope */
	if (pre && B_TYPE(n) == NODE_T && W_TYPE(n) == TN_FUNC_DECL)
	{
		if (n->lnode
		&&  W_TYPE(n->lnode) == TN_IDENT)
		{	if (has_upper(((leafnode *)n->lnode)->data.sval->str))
			{	location(n);
				printf("function name '%s' has uppercase chars\n",
					((leafnode *)n->lnode)->data.sval->str);
			}
			if (n->lnode->syment->nes->level > 3)
			{	location(n);
				printf("function prototype '%s' not declared at file-scope\n",
					((leafnode *)n->lnode)->data.sval->str);
	}	}	}

	/**** rule 4.1.4 no objects or functions may be defined in header files */

	if (W_TYPE(n) == TN_DECL
	&&  strstr(W_FILE, ".h")
	&&  n->lnode
	&&  n->rnode
	&&  W_TYPE(n->lnode) == TN_TYPE_LIST
	&&  has_non_obj(n->lnode))
	{	if (has_extern(n->lnode))
		{	if (pre)
			{	found_4_1_4++;
			} else
			{	found_4_1_4--;
			}
		} else if (n->rnode)
		{	if (found_4_1_4 == 0)
			{	if (pre)
				{	Xbuf[0] = '\0';
				} else
				{	location(n);
					printf("object '%s' defined in header file\n", Xbuf);
					Xbuf[0] = '\0';
	}	}	}	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
movl %edx, -0x10(%rbp)
movslq -0xc(%rbp), %rax
cmpq $0x200, %rax            # imm = 0x200
jb 0x2ad75
movq 0x232a3(%rip), %rax     # 0x4dff8
movq (%rax), %rdi
leaq 0x1b287(%rip), %rsi     # 0x45fe6
movb $0x0, %al
callq 0x3170
callq 0x3cf0
movl $0x1, %edi
callq 0x3230
movslq -0xc(%rbp), %rcx
leaq 0x6ad70(%rip), %rax     # 0x95af0
cmpq $0x0, (%rax,%rcx,8)
jne 0x2ada3
movl $0xfa00, %edi           # imm = 0xFA00
callq 0x54c0
movq %rax, %rdx
movslq -0xc(%rbp), %rcx
leaq 0x6ad51(%rip), %rax     # 0x95af0
movq %rdx, (%rax,%rcx,8)
movslq -0xc(%rbp), %rcx
leaq 0x6ad42(%rip), %rax     # 0x95af0
movq (%rax,%rcx,8), %rax
movq %rax, 0x2341f(%rip)     # 0x4e1d8
movq -0x8(%rbp), %rax
cmpl $0x0, 0x30(%rax)
jne 0x2add1
movq -0x8(%rbp), %rdi
callq 0x2a8f0
cmpl $0x0, %eax
je 0x2add6
jmp 0x2b260
movq -0x8(%rbp), %rax
cmpl $0x1b, 0x1c(%rax)
jne 0x2aef6
movq -0x8(%rbp), %rax
cmpq $0x0, 0x50(%rax)
je 0x2aef6
movq -0x8(%rbp), %rax
movq 0x50(%rax), %rax
movq 0x48(%rax), %rdi
callq 0x2aa30
cmpl $0x0, %eax
je 0x2ae60
cmpl $0x0, -0x10(%rbp)
je 0x2ae2a
movl 0x6bcdb(%rip), %eax     # 0x96af0
addl $0x1, %eax
movl %eax, 0x6bcd2(%rip)     # 0x96af0
movq 0x233b3(%rip), %rax     # 0x4e1d8
movb $0x0, (%rax)
jmp 0x2ae5e
movl 0x6bcc0(%rip), %eax     # 0x96af0
addl $-0x1, %eax
movl %eax, 0x6bcb7(%rip)     # 0x96af0
cmpl $0x0, %eax
jne 0x2ae5c
movq -0x8(%rbp), %rdi
callq 0x2aa90
movq 0x2338a(%rip), %rsi     # 0x4e1d8
leaq 0x1b1b6(%rip), %rdi     # 0x4600b
movb $0x0, %al
callq 0x30f0
jmp 0x2ae5e
jmp 0x2ae60
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rax
cmpq $0x0, 0x48(%rax)
je 0x2ae93
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x48(%rax), %rax
cmpl $0x4, 0x1c(%rax)
je 0x2aeaa
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x48(%rax), %rax
cmpl $0x1b, 0x1c(%rax)
je 0x2aeaa
movq -0x8(%rbp), %rdi
callq 0x2aa90
leaq 0x1b19d(%rip), %rdi     # 0x46040
movb $0x0, %al
callq 0x30f0
movq -0x8(%rbp), %rax
movq 0x50(%rax), %rax
cmpq $0x0, 0x48(%rax)
je 0x2aedd
movq -0x8(%rbp), %rax
movq 0x50(%rax), %rax
movq 0x48(%rax), %rax
cmpl $0x4, 0x1c(%rax)
je 0x2aef4
movq -0x8(%rbp), %rax
movq 0x50(%rax), %rax
movq 0x48(%rax), %rax
cmpl $0x1b, 0x1c(%rax)
je 0x2aef4
movq -0x8(%rbp), %rdi
callq 0x2aa90
leaq 0x1b183(%rip), %rdi     # 0x46070
movb $0x0, %al
callq 0x30f0
jmp 0x2aef6
movq -0x8(%rbp), %rax
cmpl $0x1b, 0x1c(%rax)
jne 0x2af4c
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rax
cmpq $0x0, 0x48(%rax)
je 0x2af33
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x48(%rax), %rax
cmpl $0x4, 0x1c(%rax)
je 0x2af4a
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x48(%rax), %rax
cmpl $0x1b, 0x1c(%rax)
je 0x2af4a
movq -0x8(%rbp), %rdi
callq 0x2aa90
leaq 0x1b0fd(%rip), %rdi     # 0x46040
movb $0x0, %al
callq 0x30f0
jmp 0x2af4c
cmpl $0x0, -0x10(%rbp)
je 0x2af94
movq -0x8(%rbp), %rax
cmpl $0x1e, 0x1c(%rax)
jne 0x2af94
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rax
cmpq $0x0, 0x48(%rax)
je 0x2af7d
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rax
movq 0x48(%rax), %rax
cmpl $0x4, 0x1c(%rax)
je 0x2af94
movq -0x8(%rbp), %rdi
callq 0x2aa90
leaq 0x1b10b(%rip), %rdi     # 0x46098
movb $0x0, %al
callq 0x30f0
cmpl $0x0, -0x10(%rbp)
je 0x2afd7
movq -0x8(%rbp), %rax
cmpl $0x1f, 0x1c(%rax)
je 0x2afae
movq -0x8(%rbp), %rax
cmpl $0x20, 0x1c(%rax)
jne 0x2afd7
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x48(%rax), %rax
cmpl $0x4, 0x1c(%rax)
je 0x2afd7
movq -0x8(%rbp), %rdi
callq 0x2aa90
leaq 0x1b0f5(%rip), %rdi     # 0x460c5
movb $0x0, %al
callq 0x30f0
cmpl $0x0, -0x10(%rbp)
je 0x2b02c
movq -0x8(%rbp), %rax
cmpl $0x21, 0x1c(%rax)
jne 0x2b02c
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x48(%rax), %rax
cmpl $0x4, 0x1c(%rax)
jne 0x2b02c
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x48(%rax), %rax
movq 0x40(%rax), %rdi
callq 0x2ab00
cmpl $0x0, %eax
jne 0x2b02a
movq -0x8(%rbp), %rdi
callq 0x2aa90
leaq 0x1b0cb(%rip), %rdi     # 0x460ee
movb $0x0, %al
callq 0x30f0
jmp 0x2b02c
cmpl $0x0, -0x10(%rbp)
je 0x2b076
movq -0x8(%rbp), %rax
cmpl $0x4, (%rax)
jne 0x2b076
movq -0x8(%rbp), %rax
cmpl $0xc, 0x1c(%rax)
jne 0x2b076
movq -0x8(%rbp), %rdi
callq 0x2b270
movq %rax, -0x18(%rbp)
cmpq $0x0, -0x18(%rbp)
je 0x2b074
movq -0x8(%rbp), %rdi
callq 0x2aa90
movq -0x18(%rbp), %rsi
leaq 0x1b09d(%rip), %rdi     # 0x4610a
movb $0x0, %al
callq 0x30f0
jmp 0x2b076
cmpl $0x0, -0x10(%rbp)
je 0x2b13e
movq -0x8(%rbp), %rax
cmpl $0x4, (%rax)
jne 0x2b13e
movq -0x8(%rbp), %rax
cmpl $0x2, 0x1c(%rax)
jne 0x2b13e
movq -0x8(%rbp), %rax
cmpq $0x0, 0x40(%rax)
je 0x2b13c
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rax
cmpl $0x2d, 0x1c(%rax)
jne 0x2b13c
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rax
movq 0x40(%rax), %rax
movq 0x8(%rax), %rdi
callq 0x19aa0
cmpl $0x0, %eax
je 0x2b0fd
movq -0x8(%rbp), %rdi
callq 0x2aa90
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rax
movq 0x40(%rax), %rax
movq 0x8(%rax), %rsi
leaq 0x1b03e(%rip), %rdi     # 0x46134
movb $0x0, %al
callq 0x30f0
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rax
movq 0x38(%rax), %rax
movq 0x18(%rax), %rax
cmpl $0x3, 0x4(%rax)
jle 0x2b13a
movq -0x8(%rbp), %rdi
callq 0x2aa90
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rax
movq 0x40(%rax), %rax
movq 0x8(%rax), %rsi
leaq 0x1b029(%rip), %rdi     # 0x4615c
movb $0x0, %al
callq 0x30f0
jmp 0x2b13c
jmp 0x2b13e
movq -0x8(%rbp), %rax
cmpl $0x5, 0x1c(%rax)
jne 0x2b260
movq -0x8(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x2b165
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x20(%rbp)
jmp 0x2b170
movq 0x5af64(%rip), %rax     # 0x860d0
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rdi
leaq 0x1aad4(%rip), %rsi     # 0x45c4f
callq 0x3240
cmpq $0x0, %rax
je 0x2b260
movq -0x8(%rbp), %rax
cmpq $0x0, 0x40(%rax)
je 0x2b260
movq -0x8(%rbp), %rax
cmpq $0x0, 0x48(%rax)
je 0x2b260
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rax
cmpl $0x14, 0x1c(%rax)
jne 0x2b260
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rdi
callq 0x2ac60
cmpl $0x0, %eax
je 0x2b260
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rdi
callq 0x2abb0
cmpl $0x0, %eax
je 0x2b20a
cmpl $0x0, -0x10(%rbp)
je 0x2b1f9
movl 0x6b906(%rip), %eax     # 0x96af4
addl $0x1, %eax
movl %eax, 0x6b8fd(%rip)     # 0x96af4
jmp 0x2b208
movl 0x6b8f5(%rip), %eax     # 0x96af4
addl $-0x1, %eax
movl %eax, 0x6b8ec(%rip)     # 0x96af4
jmp 0x2b25e
movq -0x8(%rbp), %rax
cmpq $0x0, 0x48(%rax)
je 0x2b25c
cmpl $0x0, 0x6b8d8(%rip)     # 0x96af4
jne 0x2b25a
cmpl $0x0, -0x10(%rbp)
je 0x2b230
movq 0x22fad(%rip), %rax     # 0x4e1d8
movb $0x0, (%rax)
jmp 0x2b258
movq -0x8(%rbp), %rdi
callq 0x2aa90
movq 0x22f98(%rip), %rsi     # 0x4e1d8
leaq 0x1af49(%rip), %rdi     # 0x46190
movb $0x0, %al
callq 0x30f0
movq 0x22f83(%rip), %rax     # 0x4e1d8
movb $0x0, (%rax)
jmp 0x2b25a
jmp 0x2b25c
jmp 0x2b25e
jmp 0x2b260
addq $0x20, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)