// File: /workspace/github_c_makefile_star2_O0/thiagok00[P]INF1715-Compilers/TabelaSimbolos.c
// Function: tipa_variavel
static void tipa_variavel(Simbolo *s, Var *v, int nivelEscopo) {
    ParametroL *p;
    while (s != NULL){
      if (s->tag == SVar) {
        if(strcmp(s->u.v->id,v->u.vvar.id) == 0) {
          v->u.vvar.d.def = s->u.v;
          v->tipo = s->u.v->tipo;
          v->u.vvar.escopo = v->u.vvar.d.def->escopo;
          if(v->tipo->tipo_base == bVoid) {
            printf("[Erro] %s nao pode ser declarada com tipo void\n",v->u.vvar.id);
            exit(1);
          }
          return;
        }
      }
      else if (s->tag == SParams) {
        p = s->u.p;
        while (p != NULL) {
          if (strcmp(p->id,v->u.vvar.id) == 0){
            v->u.vvar.escopo = EscopoFunc;
            v->u.vvar.d.defp = p;
            v->tipo = p->tipo;
            if(v->tipo->tipo_base == bVoid) {
              printf("[Erro] %s nao pode ser declarada com tipo void\n",v->u.vvar.id);
              exit(1);
            }
            return;
          }
          p = p->prox;
        }
      } /* fim else if */
      s = s->ant;
    }
    printf("[Erro] variavel %s nao declarada\n",v->u.vvar.id);
    exit(1);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl %edx, -0x14(%rbp)
cmpq $0x0, -0x8(%rbp)
je 0x6550
movq -0x8(%rbp), %rax
cmpl $0x0, (%rax)
jne 0x6496
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq (%rax), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
callq 0x10d0
cmpl $0x0, %eax
jne 0x6491
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movl 0x14(%rax), %ecx
movq -0x10(%rbp), %rax
movl %ecx, 0x18(%rax)
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x0, 0x4(%rax)
jne 0x648c
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
leaq 0x42c8(%rip), %rdi      # 0xa743
movb $0x0, %al
callq 0x10a0
movl $0x1, %edi
callq 0x1190
jmp 0x6570
jmp 0x653f
movq -0x8(%rbp), %rax
cmpl $0x2, (%rax)
jne 0x653d
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x20(%rbp)
cmpq $0x0, -0x20(%rbp)
je 0x653b
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
callq 0x10d0
cmpl $0x0, %eax
jne 0x652a
movq -0x10(%rbp), %rax
movl $0x2, 0x18(%rax)
movq -0x20(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x20(%rbp), %rax
movq (%rax), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x0, 0x4(%rax)
jne 0x6528
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
leaq 0x422c(%rip), %rdi      # 0xa743
movb $0x0, %al
callq 0x10a0
movl $0x1, %edi
callq 0x1190
jmp 0x6570
movq -0x20(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x20(%rbp)
jmp 0x64af
jmp 0x653d
jmp 0x653f
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x8(%rbp)
jmp 0x63f3
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
leaq 0x4214(%rip), %rdi      # 0xa773
movb $0x0, %al
callq 0x10a0
movl $0x1, %edi
callq 0x1190
addq $0x20, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)