// File: /workspace/github_c_makefile_star2_O0/chgzm[P]minic/generator.c
// Function: process_type_specifier_in_local
static Type* process_type_specifier_in_local(const TypeSpecifierNode* node) {
    Type* type = calloc(1, sizeof(Type));

    switch (node->type_specifier) {
    case TYPE_VOID: { 
        type->base_type = VAR_VOID;
        type->type_size = 8;
        return type;
    }
    case TYPE_CHAR: { 
        type->base_type = VAR_CHAR;
        type->type_size = 1;
        return type;
    }
    case TYPE_INT: {
        type->base_type = VAR_INT;
        type->type_size = 8;
        return type;
    }
    case TYPE_DOUBLE: { 
        type->base_type = VAR_DOUBLE;
        type->type_size = 8;
        return type;
    }
    case TYPE_STRUCT: { 
        type->base_type = VAR_STRUCT;   

        type->struct_info = strptrmap_get(struct_map, node->struct_specifier_node->identifier); 
        if (type->struct_info == NULL) {
            error("Invalid sturct name=\"%s\"\n", node->struct_specifier_node->identifier);
            return NULL;
        }

        type->type_size = type->struct_info->size;
        return type;
    } 
    case TYPE_TYPEDEFNAME: { 
        type->base_type = VAR_STRUCT;   

        type->struct_info = strptrmap_get(struct_map, node->struct_name);
        if (type->struct_info == NULL) {
            error("Invalid sturct name=\"%s\"\n", node->struct_name);
            return NULL;
        }

        type->type_size = type->struct_info->size;
        return type;
    } 
    default: { 
        return NULL;
    }
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x10(%rbp)
movl $0x1, %edi
movl $0x20, %esi
callq 0x10b0
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rax
movl (%rax), %eax
decl %eax
movl %eax, %ecx
movq %rcx, -0x20(%rbp)
subl $0x6, %eax
ja 0x41cb
movq -0x20(%rbp), %rax
leaq 0xb457(%rip), %rcx      # 0xf4a8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x18(%rbp), %rax
movl $0x0, (%rax)
movq -0x18(%rbp), %rax
movl $0x8, 0x4(%rax)
movq -0x18(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x41d3
movq -0x18(%rbp), %rax
movl $0x1, (%rax)
movq -0x18(%rbp), %rax
movl $0x1, 0x4(%rax)
movq -0x18(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x41d3
movq -0x18(%rbp), %rax
movl $0x2, (%rax)
movq -0x18(%rbp), %rax
movl $0x8, 0x4(%rax)
movq -0x18(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x41d3
movq -0x18(%rbp), %rax
movl $0x3, (%rax)
movq -0x18(%rbp), %rax
movl $0x8, 0x4(%rax)
movq -0x18(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x41d3
movq -0x18(%rbp), %rax
movl $0x5, (%rax)
movq 0x1105d(%rip), %rdi     # 0x15150
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq (%rax), %rsi
callq 0xeb80
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x18(%rbp), %rax
cmpq $0x0, 0x18(%rax)
jne 0x413f
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq (%rax), %rsi
leaq 0xb55d(%rip), %rdi      # 0xf688
movb $0x0, %al
callq 0xe4e0
movq $0x0, -0x8(%rbp)
jmp 0x41d3
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movl 0x8(%rax), %ecx
movq -0x18(%rbp), %rax
movl %ecx, 0x4(%rax)
movq -0x18(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x41d3
movq -0x18(%rbp), %rax
movl $0x5, (%rax)
movq 0x10fe4(%rip), %rdi     # 0x15150
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
callq 0xeb80
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x18(%rbp), %rax
cmpq $0x0, 0x18(%rax)
jne 0x41af
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
leaq 0xb4ea(%rip), %rdi      # 0xf688
movb $0x0, %al
callq 0xe4e0
movq $0x0, -0x8(%rbp)
jmp 0x41d3
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movl 0x8(%rax), %ecx
movq -0x18(%rbp), %rax
movl %ecx, 0x4(%rax)
movq -0x18(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x41d3
movq $0x0, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x20, %rsp
popq %rbp
retq
nopl (%rax)