// File: Davidc2525[P]Leaf/parser/Parser.cpp
// Function: Parser::VarDeclDef(LEAF::AST::NODEU*&)
void Parser::VarDeclDef(ASTU&s) {
		int c_declaraciones = 0;
		MetaData ** declaraciones = (MetaData**)malloc(sizeof(MetaData*)*100);
		string * Tipe = new string(""); 
		MetaData * md = new MetaData();
		VarDcl(md);
		declaraciones[c_declaraciones++]=md;
		while (la->kind == 25 /* "," */) {
			md = new MetaData();
			Get();
			VarDcl(md);
			declaraciones[c_declaraciones++]=md;
		}
		Expect(24 /* ":" */);
		Expect(_name);
		Tipe = new string(""); LexString(Tipe);
		
		cout << " " << *Tipe <<" type kind: "<<symbol_table::find(Tipe)->type->kind<<endl<<endl; 
		
		for (int i = 0; i < c_declaraciones; i++)
		{							
		Struct * tmp = last(declaraciones[i]->type);
		*tmp = *symbol_table::find(Tipe)->type;								
		}
		
		for (int i = 0; i < c_declaraciones; i++)
		{
		
		cout<<";adr: "<<symbol_table::insert(
			Obj::Var,
			declaraciones[i]->tmpName,
			declaraciones[i]->type
		)->adr<<endl;;
		
		dump(declaraciones[i]->type,0);
		//cout<<"id type: "<<symbol_table::get_id(symbol_table::find(declaraciones[i]->tmpName)->type,0)<<endl;
		}
		
		
		
		if (la->kind == 12 /* "=" */) {
			ASTU e; 
			ASTU stat;
			ASTU tmp_ident;
			int inline_assign = 0;
			
			Get();
			Expr(e);
			if(inline_assign >= c_declaraciones){
			cout<<"mas expreciones q variables"<<endl;
			exit(1);
			}
			Obj*o = symbol_table::find(declaraciones[inline_assign]->tmpName);
			tmp_ident = ident(declaraciones[inline_assign]->tmpName);
			set_obj(tmp_ident,o);
			
			stat = assign(tmp_ident,e);
			Obj*o2 = new Obj(1,new string(),new Struct()); 
			set_obj(stat,o2);
			block_add(s,stat);
			inline_assign++; 
			while (la->kind == 25 /* "," */) {
				Get();
				Expr(e);
				if(inline_assign >= c_declaraciones){
				cout<<"mas expreciones q variables"<<endl;
				exit(1);
				}
				Obj*o = symbol_table::find(declaraciones[inline_assign]->tmpName);
				tmp_ident = ident(declaraciones[inline_assign]->tmpName);
				set_obj(tmp_ident,o);
				
				stat = assign(tmp_ident,e);
				Obj*o2 = new Obj(1,new string(),new Struct()); 
				set_obj(stat,o2);
				block_add(s,stat);
				inline_assign++; 
			}
		}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x130, %rsp            # imm = 0x130
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0xc0(%rbp)
movl $0x0, -0x14(%rbp)
movl $0x320, %edi            # imm = 0x320
callq 0x6420
movq %rax, -0x20(%rbp)
movl $0x20, %edi
callq 0x62e0
movq %rax, -0xb0(%rbp)
movq %rax, -0xb8(%rbp)
movb $0x1, -0x3d(%rbp)
leaq -0x29(%rbp), %rdi
movq %rdi, -0xa8(%rbp)
callq 0x6500
movq -0xb0(%rbp), %rdi
movq -0xa8(%rbp), %rdx
leaq 0x21f29(%rip), %rsi     # 0x35b6d
callq 0xada0
jmp 0x13c4b
movb $0x0, -0x3d(%rbp)
leaq -0x29(%rbp), %rdi
callq 0x6340
movq -0xb8(%rbp), %rax
movq %rax, -0x28(%rbp)
movl $0x20, %edi
callq 0x62e0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0xc8(%rbp)
callq 0x17720
jmp 0x13c81
movq -0xc0(%rbp), %rdi
movq -0xc8(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rsi
callq 0x15120
movq -0x48(%rbp), %rdx
movq -0x20(%rbp), %rax
movl -0x14(%rbp), %ecx
movl %ecx, %esi
addl $0x1, %esi
movl %esi, -0x14(%rbp)
movslq %ecx, %rcx
movq %rdx, (%rax,%rcx,8)
movq -0xc0(%rbp), %rax
movq 0x30(%rax), %rax
cmpl $0x19, (%rax)
jne 0x13da2
movl $0x20, %edi
callq 0x62e0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0xd0(%rbp)
callq 0x17720
jmp 0x13ce8
movq -0xc0(%rbp), %rdi
movq -0xd0(%rbp), %rax
movq %rax, -0x48(%rbp)
callq 0x132b0
movq -0xc0(%rbp), %rdi
movq -0x48(%rbp), %rsi
callq 0x15120
movq -0x48(%rbp), %rdx
movq -0x20(%rbp), %rax
movl -0x14(%rbp), %ecx
movl %ecx, %esi
addl $0x1, %esi
movl %esi, -0x14(%rbp)
movslq %ecx, %rcx
movq %rdx, (%rax,%rcx,8)
jmp 0x13cb6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x29(%rbp), %rdi
callq 0x6340
testb $0x1, -0x3d(%rbp)
jne 0x13d48
jmp 0x13d59
movq -0xb8(%rbp), %rdi
movl $0x20, %esi
callq 0x62f0
jmp 0x14328
movq -0xc8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
movl $0x20, %esi
callq 0x62f0
jmp 0x14328
movq -0xd0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
movl $0x20, %esi
callq 0x62f0
jmp 0x14328
movq -0xc0(%rbp), %rdi
movl $0x18, %esi
callq 0x133a0
movq -0xc0(%rbp), %rdi
movl $0x4, %esi
callq 0x133a0
movl $0x20, %edi
callq 0x62e0
movq %rax, -0xe0(%rbp)
movq %rax, -0xe8(%rbp)
movb $0x1, -0x4a(%rbp)
leaq -0x49(%rbp), %rdi
movq %rdi, -0xd8(%rbp)
callq 0x6500
movq -0xe0(%rbp), %rdi
movq -0xd8(%rbp), %rdx
leaq 0x21d68(%rip), %rsi     # 0x35b6d
callq 0xada0
jmp 0x13e0c
movq -0xe8(%rbp), %rax
movb $0x0, -0x4a(%rbp)
movq %rax, -0x28(%rbp)
leaq -0x49(%rbp), %rdi
callq 0x6340
movq -0xc0(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x17810
movq 0x36195(%rip), %rdi     # 0x49fd0
leaq 0x20bb7(%rip), %rsi     # 0x349f9
callq 0x62c0
movq %rax, %rdi
movq -0x28(%rbp), %rsi
callq 0x6280
movq %rax, %rdi
leaq 0x20b9e(%rip), %rsi     # 0x349fb
callq 0x62c0
movq %rax, -0xf0(%rbp)
movq -0x28(%rbp), %rdi
callq 0x20020
movq -0xf0(%rbp), %rdi
movq 0x18(%rax), %rax
movl 0x10(%rax), %esi
callq 0x64e0
movq %rax, %rdi
movq 0x36121(%rip), %rsi     # 0x49fb0
callq 0x6320
movq %rax, %rdi
movq 0x36112(%rip), %rsi     # 0x49fb0
callq 0x6320
movl $0x0, -0x50(%rbp)
movl -0x50(%rbp), %eax
cmpl -0x14(%rbp), %eax
jge 0x13f2b
movq -0xc0(%rbp), %rdi
movq -0x20(%rbp), %rax
movslq -0x50(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x8(%rax), %rsi
callq 0x178e0
movq %rax, -0x58(%rbp)
movq -0x28(%rbp), %rdi
callq 0x20020
movq 0x18(%rax), %rsi
movq -0x58(%rbp), %rdi
movl $0x30, %edx
callq 0x6230
movl -0x50(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x50(%rbp)
jmp 0x13eaa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x49(%rbp), %rdi
callq 0x6340
testb $0x1, -0x4a(%rbp)
jne 0x13f15
jmp 0x13f26
movq -0xe8(%rbp), %rdi
movl $0x20, %esi
callq 0x62f0
jmp 0x14328
movl $0x0, -0x5c(%rbp)
movl -0x5c(%rbp), %eax
cmpl -0x14(%rbp), %eax
jge 0x13fcc
movq 0x3608b(%rip), %rdi     # 0x49fd0
leaq 0x20abc(%rip), %rsi     # 0x34a08
callq 0x62c0
movq %rax, -0xf8(%rbp)
movq -0x20(%rbp), %rax
movslq -0x5c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x10(%rax), %rsi
movq -0x20(%rbp), %rax
movslq -0x5c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x8(%rax), %rdx
movl $0x1, %edi
callq 0x1fed0
movq -0xf8(%rbp), %rdi
movl 0x30(%rax), %esi
callq 0x64e0
movq %rax, %rdi
movq 0x36015(%rip), %rsi     # 0x49fb0
callq 0x6320
movq -0xc0(%rbp), %rdi
movq -0x20(%rbp), %rax
movslq -0x5c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x8(%rax), %rsi
xorl %edx, %edx
callq 0x17670
movl -0x5c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x5c(%rbp)
jmp 0x13f32
movq -0xc0(%rbp), %rax
movq 0x30(%rax), %rax
cmpl $0xc, (%rax)
jne 0x1431f
movq -0xc0(%rbp), %rdi
movl $0x0, -0x7c(%rbp)
callq 0x132b0
movq -0xc0(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x146d0
movl -0x7c(%rbp), %eax
cmpl -0x14(%rbp), %eax
jl 0x14037
movq 0x35fbe(%rip), %rdi     # 0x49fd0
leaq 0x209f6(%rip), %rsi     # 0x34a0f
callq 0x62c0
movq %rax, %rdi
movq 0x35f88(%rip), %rsi     # 0x49fb0
callq 0x6320
movl $0x1, %edi
callq 0x63d0
movq -0x20(%rbp), %rax
movslq -0x7c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x10(%rax), %rdi
callq 0x20020
movq %rax, -0x88(%rbp)
movq -0x20(%rbp), %rax
movslq -0x7c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x10(%rax), %rdi
callq 0xe3f0
movq %rax, -0x78(%rbp)
movq -0x78(%rbp), %rdi
movq -0x88(%rbp), %rsi
callq 0xe300
movq -0x78(%rbp), %rdi
movq -0x68(%rbp), %rsi
callq 0xe550
movq %rax, -0x70(%rbp)
movl $0x48, %edi
callq 0x62e0
movq %rax, -0x108(%rbp)
movl $0x20, %edi
callq 0x62e0
movq %rax, -0x100(%rbp)
jmp 0x140b1
movq -0x100(%rbp), %rdi
callq 0x6430
movl $0x30, %edi
callq 0x62e0
movq %rax, -0x110(%rbp)
jmp 0x140d0
movq -0x110(%rbp), %rdi
callq 0xcab0
jmp 0x140de
movq -0x110(%rbp), %rcx
movq -0x100(%rbp), %rdx
movq -0x108(%rbp), %rdi
movl $0x1, %esi
callq 0x1fe10
jmp 0x140ff
movq -0x108(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0x70(%rbp), %rdi
movq -0x90(%rbp), %rsi
callq 0xe300
movq -0x10(%rbp), %rax
movq (%rax), %rdi
movq -0x70(%rbp), %rsi
callq 0xe1e0
movl -0x7c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x7c(%rbp)
movq -0xc0(%rbp), %rax
movq 0x30(%rax), %rax
cmpl $0x19, (%rax)
jne 0x1431d
movq -0xc0(%rbp), %rdi
callq 0x132b0
movq -0xc0(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x146d0
movl -0x7c(%rbp), %eax
cmpl -0x14(%rbp), %eax
jl 0x141db
movq 0x35e5b(%rip), %rdi     # 0x49fd0
leaq 0x20893(%rip), %rsi     # 0x34a0f
callq 0x62c0
movq %rax, %rdi
movq 0x35e25(%rip), %rsi     # 0x49fb0
callq 0x6320
movl $0x1, %edi
callq 0x63d0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x141c5
movq -0x110(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
movl $0x30, %esi
callq 0x62f0
movq -0x108(%rbp), %rdi
movl $0x48, %esi
callq 0x62f0
jmp 0x14328
movq -0x20(%rbp), %rax
movslq -0x7c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x10(%rax), %rdi
callq 0x20020
movq %rax, -0x98(%rbp)
movq -0x20(%rbp), %rax
movslq -0x7c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x10(%rax), %rdi
callq 0xe3f0
movq %rax, -0x78(%rbp)
movq -0x78(%rbp), %rdi
movq -0x98(%rbp), %rsi
callq 0xe300
movq -0x78(%rbp), %rdi
movq -0x68(%rbp), %rsi
callq 0xe550
movq %rax, -0x70(%rbp)
movl $0x48, %edi
callq 0x62e0
movq %rax, -0x120(%rbp)
movl $0x20, %edi
callq 0x62e0
movq %rax, -0x118(%rbp)
jmp 0x14255
movq -0x118(%rbp), %rdi
callq 0x6430
movl $0x30, %edi
callq 0x62e0
movq %rax, -0x128(%rbp)
jmp 0x14274
movq -0x128(%rbp), %rdi
callq 0xcab0
jmp 0x14282
movq -0x128(%rbp), %rcx
movq -0x118(%rbp), %rdx
movq -0x120(%rbp), %rdi
movl $0x1, %esi
callq 0x1fe10
jmp 0x142a3
movq -0x120(%rbp), %rax
movq %rax, -0xa0(%rbp)
movq -0x70(%rbp), %rdi
movq -0xa0(%rbp), %rsi
callq 0xe300
movq -0x10(%rbp), %rax
movq (%rax), %rdi
movq -0x70(%rbp), %rsi
callq 0xe1e0
movl -0x7c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x7c(%rbp)
jmp 0x14136
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x1430a
movq -0x128(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
movl $0x30, %esi
callq 0x62f0
movq -0x120(%rbp), %rdi
movl $0x48, %esi
callq 0x62f0
jmp 0x14328
jmp 0x1431f
addq $0x130, %rsp            # imm = 0x130
popq %rbp
retq
movq -0x38(%rbp), %rdi
callq 0x64f0
nopw %cs:(%rax,%rax)