
debug_type_conflict debug_tag_type(void *handle,char *name,debug_type_conflict type)

{
  long lVar1;
  int iVar2;
  debug_type_s *pdVar3;
  debug_named_type *pdVar4;
  debug_name *pdVar5;
  undefined8 uVar6;
  debug_handle *info;
  debug_object_linkage in_R8D;
  
  if ((name != (char *)0x0) && (type != (debug_type_conflict)0x0)) {
    if (*(long *)((long)handle + 0x10) == 0) {
      uVar6 = dcgettext(0,"debug_tag_type: no current file",5);
      fprintf(stderr,"%s\n",uVar6);
      return (debug_type_conflict)0x0;
    }
    if (type->kind == DEBUG_KIND_TAGGED) {
      iVar2 = strcmp(((type->u).knamed)->name->name,name);
      if (iVar2 == 0) {
        return type;
      }
      uVar6 = dcgettext(0,"debug_tag_type: extra tag attempted",5);
      fprintf(stderr,"%s\n",uVar6);
    }
    else {
      pdVar3 = debug_make_type((debug_handle *)0x17,DEBUG_KIND_ILLEGAL,(uint)type);
      if (pdVar3 != (debug_type_s *)0x0) {
        pdVar4 = (debug_named_type *)xmalloc(0x10);
        lVar1 = *(long *)((long)handle + 0x10);
        pdVar4->name = (debug_name *)0x0;
        pdVar4->type = type;
        (pdVar3->u).knamed = pdVar4;
        pdVar5 = debug_add_to_namespace
                           ((debug_handle *)(lVar1 + 0x10),(debug_namespace **)name,(char *)0x1,
                            DEBUG_OBJECT_FUNCTION,in_R8D);
        if (pdVar5 != (debug_name *)0x0) {
          (pdVar5->u).function = (debug_function *)pdVar3;
          pdVar4->name = pdVar5;
          return pdVar3;
        }
      }
    }
  }
  return (debug_type_conflict)0x0;
}



int * FUN_0012dca0(long param_1,char *param_2,int *param_3)

{
  int iVar1;
  int *piVar2;
  long *plVar3;
  long lVar4;
  undefined8 uVar5;
  
  if ((param_2 != (char *)0x0) && (param_3 != (int *)0x0)) {
    if (*(long *)(param_1 + 0x10) == 0) {
      uVar5 = dcgettext(0,"debug_tag_type: no current file",5);
      fprintf(stderr,"%s\n",uVar5);
      return (int *)0x0;
    }
    if (*param_3 == 0x17) {
      iVar1 = strcmp(*(char **)(**(long **)(param_3 + 4) + 8),param_2);
      if (iVar1 == 0) {
        return param_3;
      }
      uVar5 = dcgettext(0,"debug_tag_type: extra tag attempted",5);
      fprintf(stderr,"%s\n",uVar5);
    }
    else {
      piVar2 = (int *)FUN_0012b330(0x17,0);
      if (piVar2 != (int *)0x0) {
        plVar3 = (long *)xmalloc(0x10);
        lVar4 = *(long *)(param_1 + 0x10);
        *plVar3 = 0;
        plVar3[1] = (long)param_3;
        *(long **)(piVar2 + 4) = plVar3;
        lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3);
        if (lVar4 != 0) {
          *(int **)(lVar4 + 0x20) = piVar2;
          *plVar3 = lVar4;
          return piVar2;
        }
      }
    }
  }
  return (int *)0x0;
}


PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
TEST RSI,RSI
JZ 0x0012dd93
TEST RDX,RDX
JZ 0x0012dd93
MOV RBP,qword ptr [RDI + 0x10]
MOV RBX,RDX
MOV R13,RSI
MOV R12,RDI
TEST RBP,RBP
JZ 0x0012dda8
CMP dword ptr [RDX],0x17
JNZ 0x0012dd00
MOV RAX,qword ptr [RDX + 0x10]
MOV RBP,RBX
MOV RAX,qword ptr [RAX]
MOV RDI,qword ptr [RAX + 0x8]
CALL 0x00107450
TEST EAX,EAX
JNZ 0x0012dd68
POP RBX
MOV RAX,RBP
POP RBP
POP R12
POP R13
POP R14
RET
XOR ESI,ESI
MOV EDI,0x17
CALL 0x0012b330
MOV RBP,RAX
TEST RAX,RAX
JZ 0x0012dd93
MOV EDI,0x10
CALL 0x00107350
MOV RDI,qword ptr [R12 + 0x10]
MOV ECX,0x3
MOV RSI,R13
MOV qword ptr [RAX],0x0
MOV EDX,0x1
MOV R14,RAX
MOV qword ptr [RAX + 0x8],RBX
ADD RDI,0x10
MOV qword ptr [RBP + 0x10],RAX
CALL 0x0012b2b0
TEST RAX,RAX
JZ 0x0012dd93
MOV qword ptr [RAX + 0x20],RBP
POP RBX
MOV qword ptr [R14],RAX
MOV RAX,RBP
POP RBP
POP R12
POP R13
POP R14
RET
MOV EDX,0x5
LEA RSI,[0x146570]
XOR EDI,EDI
CALL 0x00107230
MOV RDI,qword ptr [0x00157220]
LEA RSI,[0x1434a5]
MOV RDX,RAX
XOR EAX,EAX
CALL 0x00107850
XOR EBP,EBP
POP RBX
MOV RAX,RBP
POP RBP
POP R12
POP R13
POP R14
RET
XOR EDI,EDI
MOV EDX,0x5
LEA RSI,[0x146550]
CALL 0x00107230
MOV RDI,qword ptr [0x00157220]
LEA RSI,[0x1434a5]
MOV RDX,RAX
XOR EAX,EAX
CALL 0x00107850
JMP 0x0012dcec
(translation_unit "int * FUN_0012dca0(long param_1,char *param_2,int *param_3)\n\n{\n  int iVar1;\n  int *piVar2;\n  long *plVar3;\n  long lVar4;\n  undefined8 uVar5;\n  \n  if ((param_2 != (char *)0x0) && (param_3 != (int *)0x0)) {\n    if (*(long *)(param_1 + 0x10) == 0) {\n      uVar5 = dcgettext(0,"debug_tag_type: no current file",5);\n      fprintf(stderr,"%s\n",uVar5);\n      return (int *)0x0;\n    }\n    if (*param_3 == 0x17) {\n      iVar1 = strcmp(*(char **)(**(long **)(param_3 + 4) + 8),param_2);\n      if (iVar1 == 0) {\n        return param_3;\n      }\n      uVar5 = dcgettext(0,"debug_tag_type: extra tag attempted",5);\n      fprintf(stderr,"%s\n",uVar5);\n    }\n    else {\n      piVar2 = (int *)FUN_0012b330(0x17,0);\n      if (piVar2 != (int *)0x0) {\n        plVar3 = (long *)xmalloc(0x10);\n        lVar4 = *(long *)(param_1 + 0x10);\n        *plVar3 = 0;\n        plVar3[1] = (long)param_3;\n        *(long **)(piVar2 + 4) = plVar3;\n        lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3);\n        if (lVar4 != 0) {\n          *(int **)(lVar4 + 0x20) = piVar2;\n          *plVar3 = lVar4;\n          return piVar2;\n        }\n      }\n    }\n  }\n  return (int *)0x0;\n}\n\n" (function_definition "int * FUN_0012dca0(long param_1,char *param_2,int *param_3)\n\n{\n  int iVar1;\n  int *piVar2;\n  long *plVar3;\n  long lVar4;\n  undefined8 uVar5;\n  \n  if ((param_2 != (char *)0x0) && (param_3 != (int *)0x0)) {\n    if (*(long *)(param_1 + 0x10) == 0) {\n      uVar5 = dcgettext(0,"debug_tag_type: no current file",5);\n      fprintf(stderr,"%s\n",uVar5);\n      return (int *)0x0;\n    }\n    if (*param_3 == 0x17) {\n      iVar1 = strcmp(*(char **)(**(long **)(param_3 + 4) + 8),param_2);\n      if (iVar1 == 0) {\n        return param_3;\n      }\n      uVar5 = dcgettext(0,"debug_tag_type: extra tag attempted",5);\n      fprintf(stderr,"%s\n",uVar5);\n    }\n    else {\n      piVar2 = (int *)FUN_0012b330(0x17,0);\n      if (piVar2 != (int *)0x0) {\n        plVar3 = (long *)xmalloc(0x10);\n        lVar4 = *(long *)(param_1 + 0x10);\n        *plVar3 = 0;\n        plVar3[1] = (long)param_3;\n        *(long **)(piVar2 + 4) = plVar3;\n        lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3);\n        if (lVar4 != 0) {\n          *(int **)(lVar4 + 0x20) = piVar2;\n          *plVar3 = lVar4;\n          return piVar2;\n        }\n      }\n    }\n  }\n  return (int *)0x0;\n}" primitive_type (pointer_declarator "* FUN_0012dca0(long param_1,char *param_2,int *param_3)" * (function_declarator "FUN_0012dca0(long param_1,char *param_2,int *param_3)" identifier (parameter_list "(long param_1,char *param_2,int *param_3)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "char *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) )))) (compound_statement "{\n  int iVar1;\n  int *piVar2;\n  long *plVar3;\n  long lVar4;\n  undefined8 uVar5;\n  \n  if ((param_2 != (char *)0x0) && (param_3 != (int *)0x0)) {\n    if (*(long *)(param_1 + 0x10) == 0) {\n      uVar5 = dcgettext(0,"debug_tag_type: no current file",5);\n      fprintf(stderr,"%s\n",uVar5);\n      return (int *)0x0;\n    }\n    if (*param_3 == 0x17) {\n      iVar1 = strcmp(*(char **)(**(long **)(param_3 + 4) + 8),param_2);\n      if (iVar1 == 0) {\n        return param_3;\n      }\n      uVar5 = dcgettext(0,"debug_tag_type: extra tag attempted",5);\n      fprintf(stderr,"%s\n",uVar5);\n    }\n    else {\n      piVar2 = (int *)FUN_0012b330(0x17,0);\n      if (piVar2 != (int *)0x0) {\n        plVar3 = (long *)xmalloc(0x10);\n        lVar4 = *(long *)(param_1 + 0x10);\n        *plVar3 = 0;\n        plVar3[1] = (long)param_3;\n        *(long **)(piVar2 + 4) = plVar3;\n        lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3);\n        if (lVar4 != 0) {\n          *(int **)(lVar4 + 0x20) = piVar2;\n          *plVar3 = lVar4;\n          return piVar2;\n        }\n      }\n    }\n  }\n  return (int *)0x0;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int *piVar2;" primitive_type (pointer_declarator "*piVar2" * identifier) ;) (declaration "long *plVar3;" (sized_type_specifier "long" long) (pointer_declarator "*plVar3" * identifier) ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 uVar5;" type_identifier identifier ;) (if_statement "if ((param_2 != (char *)0x0) && (param_3 != (int *)0x0)) {\n    if (*(long *)(param_1 + 0x10) == 0) {\n      uVar5 = dcgettext(0,"debug_tag_type: no current file",5);\n      fprintf(stderr,"%s\n",uVar5);\n      return (int *)0x0;\n    }\n    if (*param_3 == 0x17) {\n      iVar1 = strcmp(*(char **)(**(long **)(param_3 + 4) + 8),param_2);\n      if (iVar1 == 0) {\n        return param_3;\n      }\n      uVar5 = dcgettext(0,"debug_tag_type: extra tag attempted",5);\n      fprintf(stderr,"%s\n",uVar5);\n    }\n    else {\n      piVar2 = (int *)FUN_0012b330(0x17,0);\n      if (piVar2 != (int *)0x0) {\n        plVar3 = (long *)xmalloc(0x10);\n        lVar4 = *(long *)(param_1 + 0x10);\n        *plVar3 = 0;\n        plVar3[1] = (long)param_3;\n        *(long **)(piVar2 + 4) = plVar3;\n        lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3);\n        if (lVar4 != 0) {\n          *(int **)(lVar4 + 0x20) = piVar2;\n          *plVar3 = lVar4;\n          return piVar2;\n        }\n      }\n    }\n  }" if (parenthesized_expression "((param_2 != (char *)0x0) && (param_3 != (int *)0x0))" ( (binary_expression "(param_2 != (char *)0x0) && (param_3 != (int *)0x0)" (parenthesized_expression "(param_2 != (char *)0x0)" ( (binary_expression "param_2 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(param_3 != (int *)0x0)" ( (binary_expression "param_3 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n    if (*(long *)(param_1 + 0x10) == 0) {\n      uVar5 = dcgettext(0,"debug_tag_type: no current file",5);\n      fprintf(stderr,"%s\n",uVar5);\n      return (int *)0x0;\n    }\n    if (*param_3 == 0x17) {\n      iVar1 = strcmp(*(char **)(**(long **)(param_3 + 4) + 8),param_2);\n      if (iVar1 == 0) {\n        return param_3;\n      }\n      uVar5 = dcgettext(0,"debug_tag_type: extra tag attempted",5);\n      fprintf(stderr,"%s\n",uVar5);\n    }\n    else {\n      piVar2 = (int *)FUN_0012b330(0x17,0);\n      if (piVar2 != (int *)0x0) {\n        plVar3 = (long *)xmalloc(0x10);\n        lVar4 = *(long *)(param_1 + 0x10);\n        *plVar3 = 0;\n        plVar3[1] = (long)param_3;\n        *(long **)(piVar2 + 4) = plVar3;\n        lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3);\n        if (lVar4 != 0) {\n          *(int **)(lVar4 + 0x20) = piVar2;\n          *plVar3 = lVar4;\n          return piVar2;\n        }\n      }\n    }\n  }" { (if_statement "if (*(long *)(param_1 + 0x10) == 0) {\n      uVar5 = dcgettext(0,"debug_tag_type: no current file",5);\n      fprintf(stderr,"%s\n",uVar5);\n      return (int *)0x0;\n    }" if (parenthesized_expression "(*(long *)(param_1 + 0x10) == 0)" ( (binary_expression "*(long *)(param_1 + 0x10) == 0" (pointer_expression "*(long *)(param_1 + 0x10)" * (cast_expression "(long *)(param_1 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n      uVar5 = dcgettext(0,"debug_tag_type: no current file",5);\n      fprintf(stderr,"%s\n",uVar5);\n      return (int *)0x0;\n    }" { (expression_statement "uVar5 = dcgettext(0,"debug_tag_type: no current file",5);" (assignment_expression "uVar5 = dcgettext(0,"debug_tag_type: no current file",5)" identifier = (call_expression "dcgettext(0,"debug_tag_type: no current file",5)" identifier (argument_list "(0,"debug_tag_type: no current file",5)" ( number_literal , (string_literal ""debug_tag_type: no current file"" " string_content ") , number_literal )))) ;) (expression_statement "fprintf(stderr,"%s\n",uVar5);" (call_expression "fprintf(stderr,"%s\n",uVar5)" identifier (argument_list "(stderr,"%s\n",uVar5)" ( identifier , (string_literal ""%s\n"" " string_content escape_sequence ") , identifier ))) ;) (return_statement "return (int *)0x0;" return (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (if_statement "if (*param_3 == 0x17) {\n      iVar1 = strcmp(*(char **)(**(long **)(param_3 + 4) + 8),param_2);\n      if (iVar1 == 0) {\n        return param_3;\n      }\n      uVar5 = dcgettext(0,"debug_tag_type: extra tag attempted",5);\n      fprintf(stderr,"%s\n",uVar5);\n    }\n    else {\n      piVar2 = (int *)FUN_0012b330(0x17,0);\n      if (piVar2 != (int *)0x0) {\n        plVar3 = (long *)xmalloc(0x10);\n        lVar4 = *(long *)(param_1 + 0x10);\n        *plVar3 = 0;\n        plVar3[1] = (long)param_3;\n        *(long **)(piVar2 + 4) = plVar3;\n        lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3);\n        if (lVar4 != 0) {\n          *(int **)(lVar4 + 0x20) = piVar2;\n          *plVar3 = lVar4;\n          return piVar2;\n        }\n      }\n    }" if (parenthesized_expression "(*param_3 == 0x17)" ( (binary_expression "*param_3 == 0x17" (pointer_expression "*param_3" * identifier) == number_literal) )) (compound_statement "{\n      iVar1 = strcmp(*(char **)(**(long **)(param_3 + 4) + 8),param_2);\n      if (iVar1 == 0) {\n        return param_3;\n      }\n      uVar5 = dcgettext(0,"debug_tag_type: extra tag attempted",5);\n      fprintf(stderr,"%s\n",uVar5);\n    }" { (expression_statement "iVar1 = strcmp(*(char **)(**(long **)(param_3 + 4) + 8),param_2);" (assignment_expression "iVar1 = strcmp(*(char **)(**(long **)(param_3 + 4) + 8),param_2)" identifier = (call_expression "strcmp(*(char **)(**(long **)(param_3 + 4) + 8),param_2)" identifier (argument_list "(*(char **)(**(long **)(param_3 + 4) + 8),param_2)" ( (pointer_expression "*(char **)(**(long **)(param_3 + 4) + 8)" * (cast_expression "(char **)(**(long **)(param_3 + 4) + 8)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(**(long **)(param_3 + 4) + 8)" ( (binary_expression "**(long **)(param_3 + 4) + 8" (pointer_expression "**(long **)(param_3 + 4)" * (pointer_expression "*(long **)(param_3 + 4)" * (cast_expression "(long **)(param_3 + 4)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) ))))) + number_literal) )))) , identifier )))) ;) (if_statement "if (iVar1 == 0) {\n        return param_3;\n      }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n        return param_3;\n      }" { (return_statement "return param_3;" return identifier ;) })) (expression_statement "uVar5 = dcgettext(0,"debug_tag_type: extra tag attempted",5);" (assignment_expression "uVar5 = dcgettext(0,"debug_tag_type: extra tag attempted",5)" identifier = (call_expression "dcgettext(0,"debug_tag_type: extra tag attempted",5)" identifier (argument_list "(0,"debug_tag_type: extra tag attempted",5)" ( number_literal , (string_literal ""debug_tag_type: extra tag attempted"" " string_content ") , number_literal )))) ;) (expression_statement "fprintf(stderr,"%s\n",uVar5);" (call_expression "fprintf(stderr,"%s\n",uVar5)" identifier (argument_list "(stderr,"%s\n",uVar5)" ( identifier , (string_literal ""%s\n"" " string_content escape_sequence ") , identifier ))) ;) }) (else_clause "else {\n      piVar2 = (int *)FUN_0012b330(0x17,0);\n      if (piVar2 != (int *)0x0) {\n        plVar3 = (long *)xmalloc(0x10);\n        lVar4 = *(long *)(param_1 + 0x10);\n        *plVar3 = 0;\n        plVar3[1] = (long)param_3;\n        *(long **)(piVar2 + 4) = plVar3;\n        lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3);\n        if (lVar4 != 0) {\n          *(int **)(lVar4 + 0x20) = piVar2;\n          *plVar3 = lVar4;\n          return piVar2;\n        }\n      }\n    }" else (compound_statement "{\n      piVar2 = (int *)FUN_0012b330(0x17,0);\n      if (piVar2 != (int *)0x0) {\n        plVar3 = (long *)xmalloc(0x10);\n        lVar4 = *(long *)(param_1 + 0x10);\n        *plVar3 = 0;\n        plVar3[1] = (long)param_3;\n        *(long **)(piVar2 + 4) = plVar3;\n        lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3);\n        if (lVar4 != 0) {\n          *(int **)(lVar4 + 0x20) = piVar2;\n          *plVar3 = lVar4;\n          return piVar2;\n        }\n      }\n    }" { (expression_statement "piVar2 = (int *)FUN_0012b330(0x17,0);" (assignment_expression "piVar2 = (int *)FUN_0012b330(0x17,0)" identifier = (cast_expression "(int *)FUN_0012b330(0x17,0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0012b330(0x17,0)" identifier (argument_list "(0x17,0)" ( number_literal , number_literal ))))) ;) (if_statement "if (piVar2 != (int *)0x0) {\n        plVar3 = (long *)xmalloc(0x10);\n        lVar4 = *(long *)(param_1 + 0x10);\n        *plVar3 = 0;\n        plVar3[1] = (long)param_3;\n        *(long **)(piVar2 + 4) = plVar3;\n        lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3);\n        if (lVar4 != 0) {\n          *(int **)(lVar4 + 0x20) = piVar2;\n          *plVar3 = lVar4;\n          return piVar2;\n        }\n      }" if (parenthesized_expression "(piVar2 != (int *)0x0)" ( (binary_expression "piVar2 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        plVar3 = (long *)xmalloc(0x10);\n        lVar4 = *(long *)(param_1 + 0x10);\n        *plVar3 = 0;\n        plVar3[1] = (long)param_3;\n        *(long **)(piVar2 + 4) = plVar3;\n        lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3);\n        if (lVar4 != 0) {\n          *(int **)(lVar4 + 0x20) = piVar2;\n          *plVar3 = lVar4;\n          return piVar2;\n        }\n      }" { (expression_statement "plVar3 = (long *)xmalloc(0x10);" (assignment_expression "plVar3 = (long *)xmalloc(0x10)" identifier = (cast_expression "(long *)xmalloc(0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "xmalloc(0x10)" identifier (argument_list "(0x10)" ( number_literal ))))) ;) (expression_statement "lVar4 = *(long *)(param_1 + 0x10);" (assignment_expression "lVar4 = *(long *)(param_1 + 0x10)" identifier = (pointer_expression "*(long *)(param_1 + 0x10)" * (cast_expression "(long *)(param_1 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) ))))) ;) (expression_statement "*plVar3 = 0;" (assignment_expression "*plVar3 = 0" (pointer_expression "*plVar3" * identifier) = number_literal) ;) (expression_statement "plVar3[1] = (long)param_3;" (assignment_expression "plVar3[1] = (long)param_3" (subscript_expression "plVar3[1]" identifier [ number_literal ]) = (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "*(long **)(piVar2 + 4) = plVar3;" (assignment_expression "*(long **)(piVar2 + 4) = plVar3" (pointer_expression "*(long **)(piVar2 + 4)" * (cast_expression "(long **)(piVar2 + 4)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(piVar2 + 4)" ( (binary_expression "piVar2 + 4" identifier + number_literal) )))) = identifier) ;) (expression_statement "lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3);" (assignment_expression "lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3)" identifier = (call_expression "FUN_0012b2b0(lVar4 + 0x10,param_2,1,3)" identifier (argument_list "(lVar4 + 0x10,param_2,1,3)" ( (binary_expression "lVar4 + 0x10" identifier + number_literal) , identifier , number_literal , number_literal )))) ;) (if_statement "if (lVar4 != 0) {\n          *(int **)(lVar4 + 0x20) = piVar2;\n          *plVar3 = lVar4;\n          return piVar2;\n        }" if (parenthesized_expression "(lVar4 != 0)" ( (binary_expression "lVar4 != 0" identifier != number_literal) )) (compound_statement "{\n          *(int **)(lVar4 + 0x20) = piVar2;\n          *plVar3 = lVar4;\n          return piVar2;\n        }" { (expression_statement "*(int **)(lVar4 + 0x20) = piVar2;" (assignment_expression "*(int **)(lVar4 + 0x20) = piVar2" (pointer_expression "*(int **)(lVar4 + 0x20)" * (cast_expression "(int **)(lVar4 + 0x20)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar4 + 0x20)" ( (binary_expression "lVar4 + 0x20" identifier + number_literal) )))) = identifier) ;) (expression_statement "*plVar3 = lVar4;" (assignment_expression "*plVar3 = lVar4" (pointer_expression "*plVar3" * identifier) = identifier) ;) (return_statement "return piVar2;" return identifier ;) })) })) }))) })) (return_statement "return (int *)0x0;" return (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })))
(translation_unit "debug_type_conflict debug_tag_type(void *handle,char *name,debug_type_conflict type)\n\n{\n  long lVar1;\n  int iVar2;\n  debug_type_s *pdVar3;\n  debug_named_type *pdVar4;\n  debug_name *pdVar5;\n  undefined8 uVar6;\n  debug_handle *info;\n  debug_object_linkage in_R8D;\n  \n  if ((name != (char *)0x0) && (type != (debug_type_conflict)0x0)) {\n    if (*(long *)((long)handle + 0x10) == 0) {\n      uVar6 = dcgettext(0,"debug_tag_type: no current file",5);\n      fprintf(stderr,"%s\n",uVar6);\n      return (debug_type_conflict)0x0;\n    }\n    if (type->kind == DEBUG_KIND_TAGGED) {\n      iVar2 = strcmp(((type->u).knamed)->name->name,name);\n      if (iVar2 == 0) {\n        return type;\n      }\n      uVar6 = dcgettext(0,"debug_tag_type: extra tag attempted",5);\n      fprintf(stderr,"%s\n",uVar6);\n    }\n    else {\n      pdVar3 = debug_make_type((debug_handle *)0x17,DEBUG_KIND_ILLEGAL,(uint)type);\n      if (pdVar3 != (debug_type_s *)0x0) {\n        pdVar4 = (debug_named_type *)xmalloc(0x10);\n        lVar1 = *(long *)((long)handle + 0x10);\n        pdVar4->name = (debug_name *)0x0;\n        pdVar4->type = type;\n        (pdVar3->u).knamed = pdVar4;\n        pdVar5 = debug_add_to_namespace\n                           ((debug_handle *)(lVar1 + 0x10),(debug_namespace **)name,(char *)0x1,\n                            DEBUG_OBJECT_FUNCTION,in_R8D);\n        if (pdVar5 != (debug_name *)0x0) {\n          (pdVar5->u).function = (debug_function *)pdVar3;\n          pdVar4->name = pdVar5;\n          return pdVar3;\n        }\n      }\n    }\n  }\n  return (debug_type_conflict)0x0;\n}\n\n" (function_definition "debug_type_conflict debug_tag_type(void *handle,char *name,debug_type_conflict type)\n\n{\n  long lVar1;\n  int iVar2;\n  debug_type_s *pdVar3;\n  debug_named_type *pdVar4;\n  debug_name *pdVar5;\n  undefined8 uVar6;\n  debug_handle *info;\n  debug_object_linkage in_R8D;\n  \n  if ((name != (char *)0x0) && (type != (debug_type_conflict)0x0)) {\n    if (*(long *)((long)handle + 0x10) == 0) {\n      uVar6 = dcgettext(0,"debug_tag_type: no current file",5);\n      fprintf(stderr,"%s\n",uVar6);\n      return (debug_type_conflict)0x0;\n    }\n    if (type->kind == DEBUG_KIND_TAGGED) {\n      iVar2 = strcmp(((type->u).knamed)->name->name,name);\n      if (iVar2 == 0) {\n        return type;\n      }\n      uVar6 = dcgettext(0,"debug_tag_type: extra tag attempted",5);\n      fprintf(stderr,"%s\n",uVar6);\n    }\n    else {\n      pdVar3 = debug_make_type((debug_handle *)0x17,DEBUG_KIND_ILLEGAL,(uint)type);\n      if (pdVar3 != (debug_type_s *)0x0) {\n        pdVar4 = (debug_named_type *)xmalloc(0x10);\n        lVar1 = *(long *)((long)handle + 0x10);\n        pdVar4->name = (debug_name *)0x0;\n        pdVar4->type = type;\n        (pdVar3->u).knamed = pdVar4;\n        pdVar5 = debug_add_to_namespace\n                           ((debug_handle *)(lVar1 + 0x10),(debug_namespace **)name,(char *)0x1,\n                            DEBUG_OBJECT_FUNCTION,in_R8D);\n        if (pdVar5 != (debug_name *)0x0) {\n          (pdVar5->u).function = (debug_function *)pdVar3;\n          pdVar4->name = pdVar5;\n          return pdVar3;\n        }\n      }\n    }\n  }\n  return (debug_type_conflict)0x0;\n}" type_identifier (function_declarator "debug_tag_type(void *handle,char *name,debug_type_conflict type)" identifier (parameter_list "(void *handle,char *name,debug_type_conflict type)" ( (parameter_declaration "void *handle" primitive_type (pointer_declarator "*handle" * identifier)) , (parameter_declaration "char *name" primitive_type (pointer_declarator "*name" * identifier)) , (parameter_declaration "debug_type_conflict type" type_identifier identifier) ))) (compound_statement "{\n  long lVar1;\n  int iVar2;\n  debug_type_s *pdVar3;\n  debug_named_type *pdVar4;\n  debug_name *pdVar5;\n  undefined8 uVar6;\n  debug_handle *info;\n  debug_object_linkage in_R8D;\n  \n  if ((name != (char *)0x0) && (type != (debug_type_conflict)0x0)) {\n    if (*(long *)((long)handle + 0x10) == 0) {\n      uVar6 = dcgettext(0,"debug_tag_type: no current file",5);\n      fprintf(stderr,"%s\n",uVar6);\n      return (debug_type_conflict)0x0;\n    }\n    if (type->kind == DEBUG_KIND_TAGGED) {\n      iVar2 = strcmp(((type->u).knamed)->name->name,name);\n      if (iVar2 == 0) {\n        return type;\n      }\n      uVar6 = dcgettext(0,"debug_tag_type: extra tag attempted",5);\n      fprintf(stderr,"%s\n",uVar6);\n    }\n    else {\n      pdVar3 = debug_make_type((debug_handle *)0x17,DEBUG_KIND_ILLEGAL,(uint)type);\n      if (pdVar3 != (debug_type_s *)0x0) {\n        pdVar4 = (debug_named_type *)xmalloc(0x10);\n        lVar1 = *(long *)((long)handle + 0x10);\n        pdVar4->name = (debug_name *)0x0;\n        pdVar4->type = type;\n        (pdVar3->u).knamed = pdVar4;\n        pdVar5 = debug_add_to_namespace\n                           ((debug_handle *)(lVar1 + 0x10),(debug_namespace **)name,(char *)0x1,\n                            DEBUG_OBJECT_FUNCTION,in_R8D);\n        if (pdVar5 != (debug_name *)0x0) {\n          (pdVar5->u).function = (debug_function *)pdVar3;\n          pdVar4->name = pdVar5;\n          return pdVar3;\n        }\n      }\n    }\n  }\n  return (debug_type_conflict)0x0;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "debug_type_s *pdVar3;" type_identifier (pointer_declarator "*pdVar3" * identifier) ;) (declaration "debug_named_type *pdVar4;" type_identifier (pointer_declarator "*pdVar4" * identifier) ;) (declaration "debug_name *pdVar5;" type_identifier (pointer_declarator "*pdVar5" * identifier) ;) (declaration "undefined8 uVar6;" type_identifier identifier ;) (declaration "debug_handle *info;" type_identifier (pointer_declarator "*info" * identifier) ;) (declaration "debug_object_linkage in_R8D;" type_identifier identifier ;) (if_statement "if ((name != (char *)0x0) && (type != (debug_type_conflict)0x0)) {\n    if (*(long *)((long)handle + 0x10) == 0) {\n      uVar6 = dcgettext(0,"debug_tag_type: no current file",5);\n      fprintf(stderr,"%s\n",uVar6);\n      return (debug_type_conflict)0x0;\n    }\n    if (type->kind == DEBUG_KIND_TAGGED) {\n      iVar2 = strcmp(((type->u).knamed)->name->name,name);\n      if (iVar2 == 0) {\n        return type;\n      }\n      uVar6 = dcgettext(0,"debug_tag_type: extra tag attempted",5);\n      fprintf(stderr,"%s\n",uVar6);\n    }\n    else {\n      pdVar3 = debug_make_type((debug_handle *)0x17,DEBUG_KIND_ILLEGAL,(uint)type);\n      if (pdVar3 != (debug_type_s *)0x0) {\n        pdVar4 = (debug_named_type *)xmalloc(0x10);\n        lVar1 = *(long *)((long)handle + 0x10);\n        pdVar4->name = (debug_name *)0x0;\n        pdVar4->type = type;\n        (pdVar3->u).knamed = pdVar4;\n        pdVar5 = debug_add_to_namespace\n                           ((debug_handle *)(lVar1 + 0x10),(debug_namespace **)name,(char *)0x1,\n                            DEBUG_OBJECT_FUNCTION,in_R8D);\n        if (pdVar5 != (debug_name *)0x0) {\n          (pdVar5->u).function = (debug_function *)pdVar3;\n          pdVar4->name = pdVar5;\n          return pdVar3;\n        }\n      }\n    }\n  }" if (parenthesized_expression "((name != (char *)0x0) && (type != (debug_type_conflict)0x0))" ( (binary_expression "(name != (char *)0x0) && (type != (debug_type_conflict)0x0)" (parenthesized_expression "(name != (char *)0x0)" ( (binary_expression "name != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(type != (debug_type_conflict)0x0)" ( (binary_expression "type != (debug_type_conflict)0x0" identifier != (cast_expression "(debug_type_conflict)0x0" ( (type_descriptor "debug_type_conflict" type_identifier) ) number_literal)) ))) )) (compound_statement "{\n    if (*(long *)((long)handle + 0x10) == 0) {\n      uVar6 = dcgettext(0,"debug_tag_type: no current file",5);\n      fprintf(stderr,"%s\n",uVar6);\n      return (debug_type_conflict)0x0;\n    }\n    if (type->kind == DEBUG_KIND_TAGGED) {\n      iVar2 = strcmp(((type->u).knamed)->name->name,name);\n      if (iVar2 == 0) {\n        return type;\n      }\n      uVar6 = dcgettext(0,"debug_tag_type: extra tag attempted",5);\n      fprintf(stderr,"%s\n",uVar6);\n    }\n    else {\n      pdVar3 = debug_make_type((debug_handle *)0x17,DEBUG_KIND_ILLEGAL,(uint)type);\n      if (pdVar3 != (debug_type_s *)0x0) {\n        pdVar4 = (debug_named_type *)xmalloc(0x10);\n        lVar1 = *(long *)((long)handle + 0x10);\n        pdVar4->name = (debug_name *)0x0;\n        pdVar4->type = type;\n        (pdVar3->u).knamed = pdVar4;\n        pdVar5 = debug_add_to_namespace\n                           ((debug_handle *)(lVar1 + 0x10),(debug_namespace **)name,(char *)0x1,\n                            DEBUG_OBJECT_FUNCTION,in_R8D);\n        if (pdVar5 != (debug_name *)0x0) {\n          (pdVar5->u).function = (debug_function *)pdVar3;\n          pdVar4->name = pdVar5;\n          return pdVar3;\n        }\n      }\n    }\n  }" { (if_statement "if (*(long *)((long)handle + 0x10) == 0) {\n      uVar6 = dcgettext(0,"debug_tag_type: no current file",5);\n      fprintf(stderr,"%s\n",uVar6);\n      return (debug_type_conflict)0x0;\n    }" if (parenthesized_expression "(*(long *)((long)handle + 0x10) == 0)" ( (binary_expression "*(long *)((long)handle + 0x10) == 0" (pointer_expression "*(long *)((long)handle + 0x10)" * (cast_expression "(long *)((long)handle + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)handle + 0x10)" ( (binary_expression "(long)handle + 0x10" (cast_expression "(long)handle" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) == number_literal) )) (compound_statement "{\n      uVar6 = dcgettext(0,"debug_tag_type: no current file",5);\n      fprintf(stderr,"%s\n",uVar6);\n      return (debug_type_conflict)0x0;\n    }" { (expression_statement "uVar6 = dcgettext(0,"debug_tag_type: no current file",5);" (assignment_expression "uVar6 = dcgettext(0,"debug_tag_type: no current file",5)" identifier = (call_expression "dcgettext(0,"debug_tag_type: no current file",5)" identifier (argument_list "(0,"debug_tag_type: no current file",5)" ( number_literal , (string_literal ""debug_tag_type: no current file"" " string_content ") , number_literal )))) ;) (expression_statement "fprintf(stderr,"%s\n",uVar6);" (call_expression "fprintf(stderr,"%s\n",uVar6)" identifier (argument_list "(stderr,"%s\n",uVar6)" ( identifier , (string_literal ""%s\n"" " string_content escape_sequence ") , identifier ))) ;) (return_statement "return (debug_type_conflict)0x0;" return (cast_expression "(debug_type_conflict)0x0" ( (type_descriptor "debug_type_conflict" type_identifier) ) number_literal) ;) })) (if_statement "if (type->kind == DEBUG_KIND_TAGGED) {\n      iVar2 = strcmp(((type->u).knamed)->name->name,name);\n      if (iVar2 == 0) {\n        return type;\n      }\n      uVar6 = dcgettext(0,"debug_tag_type: extra tag attempted",5);\n      fprintf(stderr,"%s\n",uVar6);\n    }\n    else {\n      pdVar3 = debug_make_type((debug_handle *)0x17,DEBUG_KIND_ILLEGAL,(uint)type);\n      if (pdVar3 != (debug_type_s *)0x0) {\n        pdVar4 = (debug_named_type *)xmalloc(0x10);\n        lVar1 = *(long *)((long)handle + 0x10);\n        pdVar4->name = (debug_name *)0x0;\n        pdVar4->type = type;\n        (pdVar3->u).knamed = pdVar4;\n        pdVar5 = debug_add_to_namespace\n                           ((debug_handle *)(lVar1 + 0x10),(debug_namespace **)name,(char *)0x1,\n                            DEBUG_OBJECT_FUNCTION,in_R8D);\n        if (pdVar5 != (debug_name *)0x0) {\n          (pdVar5->u).function = (debug_function *)pdVar3;\n          pdVar4->name = pdVar5;\n          return pdVar3;\n        }\n      }\n    }" if (parenthesized_expression "(type->kind == DEBUG_KIND_TAGGED)" ( (binary_expression "type->kind == DEBUG_KIND_TAGGED" (field_expression "type->kind" identifier -> field_identifier) == identifier) )) (compound_statement "{\n      iVar2 = strcmp(((type->u).knamed)->name->name,name);\n      if (iVar2 == 0) {\n        return type;\n      }\n      uVar6 = dcgettext(0,"debug_tag_type: extra tag attempted",5);\n      fprintf(stderr,"%s\n",uVar6);\n    }" { (expression_statement "iVar2 = strcmp(((type->u).knamed)->name->name,name);" (assignment_expression "iVar2 = strcmp(((type->u).knamed)->name->name,name)" identifier = (call_expression "strcmp(((type->u).knamed)->name->name,name)" identifier (argument_list "(((type->u).knamed)->name->name,name)" ( (field_expression "((type->u).knamed)->name->name" (field_expression "((type->u).knamed)->name" (parenthesized_expression "((type->u).knamed)" ( (field_expression "(type->u).knamed" (parenthesized_expression "(type->u)" ( (field_expression "type->u" identifier -> field_identifier) )) . field_identifier) )) -> field_identifier) -> field_identifier) , identifier )))) ;) (if_statement "if (iVar2 == 0) {\n        return type;\n      }" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (compound_statement "{\n        return type;\n      }" { (return_statement "return type;" return identifier ;) })) (expression_statement "uVar6 = dcgettext(0,"debug_tag_type: extra tag attempted",5);" (assignment_expression "uVar6 = dcgettext(0,"debug_tag_type: extra tag attempted",5)" identifier = (call_expression "dcgettext(0,"debug_tag_type: extra tag attempted",5)" identifier (argument_list "(0,"debug_tag_type: extra tag attempted",5)" ( number_literal , (string_literal ""debug_tag_type: extra tag attempted"" " string_content ") , number_literal )))) ;) (expression_statement "fprintf(stderr,"%s\n",uVar6);" (call_expression "fprintf(stderr,"%s\n",uVar6)" identifier (argument_list "(stderr,"%s\n",uVar6)" ( identifier , (string_literal ""%s\n"" " string_content escape_sequence ") , identifier ))) ;) }) (else_clause "else {\n      pdVar3 = debug_make_type((debug_handle *)0x17,DEBUG_KIND_ILLEGAL,(uint)type);\n      if (pdVar3 != (debug_type_s *)0x0) {\n        pdVar4 = (debug_named_type *)xmalloc(0x10);\n        lVar1 = *(long *)((long)handle + 0x10);\n        pdVar4->name = (debug_name *)0x0;\n        pdVar4->type = type;\n        (pdVar3->u).knamed = pdVar4;\n        pdVar5 = debug_add_to_namespace\n                           ((debug_handle *)(lVar1 + 0x10),(debug_namespace **)name,(char *)0x1,\n                            DEBUG_OBJECT_FUNCTION,in_R8D);\n        if (pdVar5 != (debug_name *)0x0) {\n          (pdVar5->u).function = (debug_function *)pdVar3;\n          pdVar4->name = pdVar5;\n          return pdVar3;\n        }\n      }\n    }" else (compound_statement "{\n      pdVar3 = debug_make_type((debug_handle *)0x17,DEBUG_KIND_ILLEGAL,(uint)type);\n      if (pdVar3 != (debug_type_s *)0x0) {\n        pdVar4 = (debug_named_type *)xmalloc(0x10);\n        lVar1 = *(long *)((long)handle + 0x10);\n        pdVar4->name = (debug_name *)0x0;\n        pdVar4->type = type;\n        (pdVar3->u).knamed = pdVar4;\n        pdVar5 = debug_add_to_namespace\n                           ((debug_handle *)(lVar1 + 0x10),(debug_namespace **)name,(char *)0x1,\n                            DEBUG_OBJECT_FUNCTION,in_R8D);\n        if (pdVar5 != (debug_name *)0x0) {\n          (pdVar5->u).function = (debug_function *)pdVar3;\n          pdVar4->name = pdVar5;\n          return pdVar3;\n        }\n      }\n    }" { (expression_statement "pdVar3 = debug_make_type((debug_handle *)0x17,DEBUG_KIND_ILLEGAL,(uint)type);" (assignment_expression "pdVar3 = debug_make_type((debug_handle *)0x17,DEBUG_KIND_ILLEGAL,(uint)type)" identifier = (call_expression "debug_make_type((debug_handle *)0x17,DEBUG_KIND_ILLEGAL,(uint)type)" identifier (argument_list "((debug_handle *)0x17,DEBUG_KIND_ILLEGAL,(uint)type)" ( (cast_expression "(debug_handle *)0x17" ( (type_descriptor "debug_handle *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) , identifier , (cast_expression "(uint)type" ( (type_descriptor "uint" type_identifier) ) identifier) )))) ;) (if_statement "if (pdVar3 != (debug_type_s *)0x0) {\n        pdVar4 = (debug_named_type *)xmalloc(0x10);\n        lVar1 = *(long *)((long)handle + 0x10);\n        pdVar4->name = (debug_name *)0x0;\n        pdVar4->type = type;\n        (pdVar3->u).knamed = pdVar4;\n        pdVar5 = debug_add_to_namespace\n                           ((debug_handle *)(lVar1 + 0x10),(debug_namespace **)name,(char *)0x1,\n                            DEBUG_OBJECT_FUNCTION,in_R8D);\n        if (pdVar5 != (debug_name *)0x0) {\n          (pdVar5->u).function = (debug_function *)pdVar3;\n          pdVar4->name = pdVar5;\n          return pdVar3;\n        }\n      }" if (parenthesized_expression "(pdVar3 != (debug_type_s *)0x0)" ( (binary_expression "pdVar3 != (debug_type_s *)0x0" identifier != (cast_expression "(debug_type_s *)0x0" ( (type_descriptor "debug_type_s *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        pdVar4 = (debug_named_type *)xmalloc(0x10);\n        lVar1 = *(long *)((long)handle + 0x10);\n        pdVar4->name = (debug_name *)0x0;\n        pdVar4->type = type;\n        (pdVar3->u).knamed = pdVar4;\n        pdVar5 = debug_add_to_namespace\n                           ((debug_handle *)(lVar1 + 0x10),(debug_namespace **)name,(char *)0x1,\n                            DEBUG_OBJECT_FUNCTION,in_R8D);\n        if (pdVar5 != (debug_name *)0x0) {\n          (pdVar5->u).function = (debug_function *)pdVar3;\n          pdVar4->name = pdVar5;\n          return pdVar3;\n        }\n      }" { (expression_statement "pdVar4 = (debug_named_type *)xmalloc(0x10);" (assignment_expression "pdVar4 = (debug_named_type *)xmalloc(0x10)" identifier = (cast_expression "(debug_named_type *)xmalloc(0x10)" ( (type_descriptor "debug_named_type *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "xmalloc(0x10)" identifier (argument_list "(0x10)" ( number_literal ))))) ;) (expression_statement "lVar1 = *(long *)((long)handle + 0x10);" (assignment_expression "lVar1 = *(long *)((long)handle + 0x10)" identifier = (pointer_expression "*(long *)((long)handle + 0x10)" * (cast_expression "(long *)((long)handle + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)handle + 0x10)" ( (binary_expression "(long)handle + 0x10" (cast_expression "(long)handle" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) ;) (expression_statement "pdVar4->name = (debug_name *)0x0;" (assignment_expression "pdVar4->name = (debug_name *)0x0" (field_expression "pdVar4->name" identifier -> field_identifier) = (cast_expression "(debug_name *)0x0" ( (type_descriptor "debug_name *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "pdVar4->type = type;" (assignment_expression "pdVar4->type = type" (field_expression "pdVar4->type" identifier -> field_identifier) = identifier) ;) (expression_statement "(pdVar3->u).knamed = pdVar4;" (assignment_expression "(pdVar3->u).knamed = pdVar4" (field_expression "(pdVar3->u).knamed" (parenthesized_expression "(pdVar3->u)" ( (field_expression "pdVar3->u" identifier -> field_identifier) )) . field_identifier) = identifier) ;) (expression_statement "pdVar5 = debug_add_to_namespace\n                           ((debug_handle *)(lVar1 + 0x10),(debug_namespace **)name,(char *)0x1,\n                            DEBUG_OBJECT_FUNCTION,in_R8D);" (assignment_expression "pdVar5 = debug_add_to_namespace\n                           ((debug_handle *)(lVar1 + 0x10),(debug_namespace **)name,(char *)0x1,\n                            DEBUG_OBJECT_FUNCTION,in_R8D)" identifier = (call_expression "debug_add_to_namespace\n                           ((debug_handle *)(lVar1 + 0x10),(debug_namespace **)name,(char *)0x1,\n                            DEBUG_OBJECT_FUNCTION,in_R8D)" identifier (argument_list "((debug_handle *)(lVar1 + 0x10),(debug_namespace **)name,(char *)0x1,\n                            DEBUG_OBJECT_FUNCTION,in_R8D)" ( (cast_expression "(debug_handle *)(lVar1 + 0x10)" ( (type_descriptor "debug_handle *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 0x10)" ( (binary_expression "lVar1 + 0x10" identifier + number_literal) ))) , (cast_expression "(debug_namespace **)name" ( (type_descriptor "debug_namespace **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier) , (cast_expression "(char *)0x1" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) , identifier , identifier )))) ;) (if_statement "if (pdVar5 != (debug_name *)0x0) {\n          (pdVar5->u).function = (debug_function *)pdVar3;\n          pdVar4->name = pdVar5;\n          return pdVar3;\n        }" if (parenthesized_expression "(pdVar5 != (debug_name *)0x0)" ( (binary_expression "pdVar5 != (debug_name *)0x0" identifier != (cast_expression "(debug_name *)0x0" ( (type_descriptor "debug_name *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          (pdVar5->u).function = (debug_function *)pdVar3;\n          pdVar4->name = pdVar5;\n          return pdVar3;\n        }" { (expression_statement "(pdVar5->u).function = (debug_function *)pdVar3;" (assignment_expression "(pdVar5->u).function = (debug_function *)pdVar3" (field_expression "(pdVar5->u).function" (parenthesized_expression "(pdVar5->u)" ( (field_expression "pdVar5->u" identifier -> field_identifier) )) . field_identifier) = (cast_expression "(debug_function *)pdVar3" ( (type_descriptor "debug_function *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "pdVar4->name = pdVar5;" (assignment_expression "pdVar4->name = pdVar5" (field_expression "pdVar4->name" identifier -> field_identifier) = identifier) ;) (return_statement "return pdVar3;" return identifier ;) })) })) }))) })) (return_statement "return (debug_type_conflict)0x0;" return (cast_expression "(debug_type_conflict)0x0" ( (type_descriptor "debug_type_conflict" type_identifier) ) number_literal) ;) })))
(translation_unit "int * FUN_0012dca0(long param_1,char *param_2,int *param_3)\n\n{\n  int iVar1;\n  int *piVar2;\n  long *plVar3;\n  long lVar4;\n  undefined8 uVar5;\n  \n  if ((param_2 != (char *)0x0) && (param_3 != (int *)0x0)) {\n    if (*(long *)(param_1 + 0x10) == 0) {\n      uVar5 = dcgettext(0,"debug_tag_type: no current file",5);\n      fprintf(stderr,"%s\n",uVar5);\n      return (int *)0x0;\n    }\n    if (*param_3 == 0x17) {\n      iVar1 = strcmp(*(char **)(**(long **)(param_3 + 4) + 8),param_2);\n      if (iVar1 == 0) {\n        return param_3;\n      }\n      uVar5 = dcgettext(0,"debug_tag_type: extra tag attempted",5);\n      fprintf(stderr,"%s\n",uVar5);\n    }\n    else {\n      piVar2 = (int *)FUN_0012b330(0x17,0);\n      if (piVar2 != (int *)0x0) {\n        plVar3 = (long *)xmalloc(0x10);\n        lVar4 = *(long *)(param_1 + 0x10);\n        *plVar3 = 0;\n        plVar3[1] = (long)param_3;\n        *(long **)(piVar2 + 4) = plVar3;\n        lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3);\n        if (lVar4 != 0) {\n          *(int **)(lVar4 + 0x20) = piVar2;\n          *plVar3 = lVar4;\n          return piVar2;\n        }\n      }\n    }\n  }\n  return (int *)0x0;\n}\n\n" (function_definition "int * FUN_0012dca0(long param_1,char *param_2,int *param_3)\n\n{\n  int iVar1;\n  int *piVar2;\n  long *plVar3;\n  long lVar4;\n  undefined8 uVar5;\n  \n  if ((param_2 != (char *)0x0) && (param_3 != (int *)0x0)) {\n    if (*(long *)(param_1 + 0x10) == 0) {\n      uVar5 = dcgettext(0,"debug_tag_type: no current file",5);\n      fprintf(stderr,"%s\n",uVar5);\n      return (int *)0x0;\n    }\n    if (*param_3 == 0x17) {\n      iVar1 = strcmp(*(char **)(**(long **)(param_3 + 4) + 8),param_2);\n      if (iVar1 == 0) {\n        return param_3;\n      }\n      uVar5 = dcgettext(0,"debug_tag_type: extra tag attempted",5);\n      fprintf(stderr,"%s\n",uVar5);\n    }\n    else {\n      piVar2 = (int *)FUN_0012b330(0x17,0);\n      if (piVar2 != (int *)0x0) {\n        plVar3 = (long *)xmalloc(0x10);\n        lVar4 = *(long *)(param_1 + 0x10);\n        *plVar3 = 0;\n        plVar3[1] = (long)param_3;\n        *(long **)(piVar2 + 4) = plVar3;\n        lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3);\n        if (lVar4 != 0) {\n          *(int **)(lVar4 + 0x20) = piVar2;\n          *plVar3 = lVar4;\n          return piVar2;\n        }\n      }\n    }\n  }\n  return (int *)0x0;\n}" primitive_type (pointer_declarator "* FUN_0012dca0(long param_1,char *param_2,int *param_3)" * (function_declarator "FUN_0012dca0(long param_1,char *param_2,int *param_3)" identifier (parameter_list "(long param_1,char *param_2,int *param_3)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "char *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) )))) (compound_statement "{\n  int iVar1;\n  int *piVar2;\n  long *plVar3;\n  long lVar4;\n  undefined8 uVar5;\n  \n  if ((param_2 != (char *)0x0) && (param_3 != (int *)0x0)) {\n    if (*(long *)(param_1 + 0x10) == 0) {\n      uVar5 = dcgettext(0,"debug_tag_type: no current file",5);\n      fprintf(stderr,"%s\n",uVar5);\n      return (int *)0x0;\n    }\n    if (*param_3 == 0x17) {\n      iVar1 = strcmp(*(char **)(**(long **)(param_3 + 4) + 8),param_2);\n      if (iVar1 == 0) {\n        return param_3;\n      }\n      uVar5 = dcgettext(0,"debug_tag_type: extra tag attempted",5);\n      fprintf(stderr,"%s\n",uVar5);\n    }\n    else {\n      piVar2 = (int *)FUN_0012b330(0x17,0);\n      if (piVar2 != (int *)0x0) {\n        plVar3 = (long *)xmalloc(0x10);\n        lVar4 = *(long *)(param_1 + 0x10);\n        *plVar3 = 0;\n        plVar3[1] = (long)param_3;\n        *(long **)(piVar2 + 4) = plVar3;\n        lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3);\n        if (lVar4 != 0) {\n          *(int **)(lVar4 + 0x20) = piVar2;\n          *plVar3 = lVar4;\n          return piVar2;\n        }\n      }\n    }\n  }\n  return (int *)0x0;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int *piVar2;" primitive_type (pointer_declarator "*piVar2" * identifier) ;) (declaration "long *plVar3;" (sized_type_specifier "long" long) (pointer_declarator "*plVar3" * identifier) ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 uVar5;" type_identifier identifier ;) (if_statement "if ((param_2 != (char *)0x0) && (param_3 != (int *)0x0)) {\n    if (*(long *)(param_1 + 0x10) == 0) {\n      uVar5 = dcgettext(0,"debug_tag_type: no current file",5);\n      fprintf(stderr,"%s\n",uVar5);\n      return (int *)0x0;\n    }\n    if (*param_3 == 0x17) {\n      iVar1 = strcmp(*(char **)(**(long **)(param_3 + 4) + 8),param_2);\n      if (iVar1 == 0) {\n        return param_3;\n      }\n      uVar5 = dcgettext(0,"debug_tag_type: extra tag attempted",5);\n      fprintf(stderr,"%s\n",uVar5);\n    }\n    else {\n      piVar2 = (int *)FUN_0012b330(0x17,0);\n      if (piVar2 != (int *)0x0) {\n        plVar3 = (long *)xmalloc(0x10);\n        lVar4 = *(long *)(param_1 + 0x10);\n        *plVar3 = 0;\n        plVar3[1] = (long)param_3;\n        *(long **)(piVar2 + 4) = plVar3;\n        lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3);\n        if (lVar4 != 0) {\n          *(int **)(lVar4 + 0x20) = piVar2;\n          *plVar3 = lVar4;\n          return piVar2;\n        }\n      }\n    }\n  }" if (parenthesized_expression "((param_2 != (char *)0x0) && (param_3 != (int *)0x0))" ( (binary_expression "(param_2 != (char *)0x0) && (param_3 != (int *)0x0)" (parenthesized_expression "(param_2 != (char *)0x0)" ( (binary_expression "param_2 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(param_3 != (int *)0x0)" ( (binary_expression "param_3 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n    if (*(long *)(param_1 + 0x10) == 0) {\n      uVar5 = dcgettext(0,"debug_tag_type: no current file",5);\n      fprintf(stderr,"%s\n",uVar5);\n      return (int *)0x0;\n    }\n    if (*param_3 == 0x17) {\n      iVar1 = strcmp(*(char **)(**(long **)(param_3 + 4) + 8),param_2);\n      if (iVar1 == 0) {\n        return param_3;\n      }\n      uVar5 = dcgettext(0,"debug_tag_type: extra tag attempted",5);\n      fprintf(stderr,"%s\n",uVar5);\n    }\n    else {\n      piVar2 = (int *)FUN_0012b330(0x17,0);\n      if (piVar2 != (int *)0x0) {\n        plVar3 = (long *)xmalloc(0x10);\n        lVar4 = *(long *)(param_1 + 0x10);\n        *plVar3 = 0;\n        plVar3[1] = (long)param_3;\n        *(long **)(piVar2 + 4) = plVar3;\n        lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3);\n        if (lVar4 != 0) {\n          *(int **)(lVar4 + 0x20) = piVar2;\n          *plVar3 = lVar4;\n          return piVar2;\n        }\n      }\n    }\n  }" { (if_statement "if (*(long *)(param_1 + 0x10) == 0) {\n      uVar5 = dcgettext(0,"debug_tag_type: no current file",5);\n      fprintf(stderr,"%s\n",uVar5);\n      return (int *)0x0;\n    }" if (parenthesized_expression "(*(long *)(param_1 + 0x10) == 0)" ( (binary_expression "*(long *)(param_1 + 0x10) == 0" (pointer_expression "*(long *)(param_1 + 0x10)" * (cast_expression "(long *)(param_1 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n      uVar5 = dcgettext(0,"debug_tag_type: no current file",5);\n      fprintf(stderr,"%s\n",uVar5);\n      return (int *)0x0;\n    }" { (expression_statement "uVar5 = dcgettext(0,"debug_tag_type: no current file",5);" (assignment_expression "uVar5 = dcgettext(0,"debug_tag_type: no current file",5)" identifier = (call_expression "dcgettext(0,"debug_tag_type: no current file",5)" identifier (argument_list "(0,"debug_tag_type: no current file",5)" ( number_literal , (string_literal ""debug_tag_type: no current file"" " string_content ") , number_literal )))) ;) (expression_statement "fprintf(stderr,"%s\n",uVar5);" (call_expression "fprintf(stderr,"%s\n",uVar5)" identifier (argument_list "(stderr,"%s\n",uVar5)" ( identifier , (string_literal ""%s\n"" " string_content escape_sequence ") , identifier ))) ;) (return_statement "return (int *)0x0;" return (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (if_statement "if (*param_3 == 0x17) {\n      iVar1 = strcmp(*(char **)(**(long **)(param_3 + 4) + 8),param_2);\n      if (iVar1 == 0) {\n        return param_3;\n      }\n      uVar5 = dcgettext(0,"debug_tag_type: extra tag attempted",5);\n      fprintf(stderr,"%s\n",uVar5);\n    }\n    else {\n      piVar2 = (int *)FUN_0012b330(0x17,0);\n      if (piVar2 != (int *)0x0) {\n        plVar3 = (long *)xmalloc(0x10);\n        lVar4 = *(long *)(param_1 + 0x10);\n        *plVar3 = 0;\n        plVar3[1] = (long)param_3;\n        *(long **)(piVar2 + 4) = plVar3;\n        lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3);\n        if (lVar4 != 0) {\n          *(int **)(lVar4 + 0x20) = piVar2;\n          *plVar3 = lVar4;\n          return piVar2;\n        }\n      }\n    }" if (parenthesized_expression "(*param_3 == 0x17)" ( (binary_expression "*param_3 == 0x17" (pointer_expression "*param_3" * identifier) == number_literal) )) (compound_statement "{\n      iVar1 = strcmp(*(char **)(**(long **)(param_3 + 4) + 8),param_2);\n      if (iVar1 == 0) {\n        return param_3;\n      }\n      uVar5 = dcgettext(0,"debug_tag_type: extra tag attempted",5);\n      fprintf(stderr,"%s\n",uVar5);\n    }" { (expression_statement "iVar1 = strcmp(*(char **)(**(long **)(param_3 + 4) + 8),param_2);" (assignment_expression "iVar1 = strcmp(*(char **)(**(long **)(param_3 + 4) + 8),param_2)" identifier = (call_expression "strcmp(*(char **)(**(long **)(param_3 + 4) + 8),param_2)" identifier (argument_list "(*(char **)(**(long **)(param_3 + 4) + 8),param_2)" ( (pointer_expression "*(char **)(**(long **)(param_3 + 4) + 8)" * (cast_expression "(char **)(**(long **)(param_3 + 4) + 8)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(**(long **)(param_3 + 4) + 8)" ( (binary_expression "**(long **)(param_3 + 4) + 8" (pointer_expression "**(long **)(param_3 + 4)" * (pointer_expression "*(long **)(param_3 + 4)" * (cast_expression "(long **)(param_3 + 4)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) ))))) + number_literal) )))) , identifier )))) ;) (if_statement "if (iVar1 == 0) {\n        return param_3;\n      }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n        return param_3;\n      }" { (return_statement "return param_3;" return identifier ;) })) (expression_statement "uVar5 = dcgettext(0,"debug_tag_type: extra tag attempted",5);" (assignment_expression "uVar5 = dcgettext(0,"debug_tag_type: extra tag attempted",5)" identifier = (call_expression "dcgettext(0,"debug_tag_type: extra tag attempted",5)" identifier (argument_list "(0,"debug_tag_type: extra tag attempted",5)" ( number_literal , (string_literal ""debug_tag_type: extra tag attempted"" " string_content ") , number_literal )))) ;) (expression_statement "fprintf(stderr,"%s\n",uVar5);" (call_expression "fprintf(stderr,"%s\n",uVar5)" identifier (argument_list "(stderr,"%s\n",uVar5)" ( identifier , (string_literal ""%s\n"" " string_content escape_sequence ") , identifier ))) ;) }) (else_clause "else {\n      piVar2 = (int *)FUN_0012b330(0x17,0);\n      if (piVar2 != (int *)0x0) {\n        plVar3 = (long *)xmalloc(0x10);\n        lVar4 = *(long *)(param_1 + 0x10);\n        *plVar3 = 0;\n        plVar3[1] = (long)param_3;\n        *(long **)(piVar2 + 4) = plVar3;\n        lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3);\n        if (lVar4 != 0) {\n          *(int **)(lVar4 + 0x20) = piVar2;\n          *plVar3 = lVar4;\n          return piVar2;\n        }\n      }\n    }" else (compound_statement "{\n      piVar2 = (int *)FUN_0012b330(0x17,0);\n      if (piVar2 != (int *)0x0) {\n        plVar3 = (long *)xmalloc(0x10);\n        lVar4 = *(long *)(param_1 + 0x10);\n        *plVar3 = 0;\n        plVar3[1] = (long)param_3;\n        *(long **)(piVar2 + 4) = plVar3;\n        lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3);\n        if (lVar4 != 0) {\n          *(int **)(lVar4 + 0x20) = piVar2;\n          *plVar3 = lVar4;\n          return piVar2;\n        }\n      }\n    }" { (expression_statement "piVar2 = (int *)FUN_0012b330(0x17,0);" (assignment_expression "piVar2 = (int *)FUN_0012b330(0x17,0)" identifier = (cast_expression "(int *)FUN_0012b330(0x17,0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0012b330(0x17,0)" identifier (argument_list "(0x17,0)" ( number_literal , number_literal ))))) ;) (if_statement "if (piVar2 != (int *)0x0) {\n        plVar3 = (long *)xmalloc(0x10);\n        lVar4 = *(long *)(param_1 + 0x10);\n        *plVar3 = 0;\n        plVar3[1] = (long)param_3;\n        *(long **)(piVar2 + 4) = plVar3;\n        lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3);\n        if (lVar4 != 0) {\n          *(int **)(lVar4 + 0x20) = piVar2;\n          *plVar3 = lVar4;\n          return piVar2;\n        }\n      }" if (parenthesized_expression "(piVar2 != (int *)0x0)" ( (binary_expression "piVar2 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        plVar3 = (long *)xmalloc(0x10);\n        lVar4 = *(long *)(param_1 + 0x10);\n        *plVar3 = 0;\n        plVar3[1] = (long)param_3;\n        *(long **)(piVar2 + 4) = plVar3;\n        lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3);\n        if (lVar4 != 0) {\n          *(int **)(lVar4 + 0x20) = piVar2;\n          *plVar3 = lVar4;\n          return piVar2;\n        }\n      }" { (expression_statement "plVar3 = (long *)xmalloc(0x10);" (assignment_expression "plVar3 = (long *)xmalloc(0x10)" identifier = (cast_expression "(long *)xmalloc(0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "xmalloc(0x10)" identifier (argument_list "(0x10)" ( number_literal ))))) ;) (expression_statement "lVar4 = *(long *)(param_1 + 0x10);" (assignment_expression "lVar4 = *(long *)(param_1 + 0x10)" identifier = (pointer_expression "*(long *)(param_1 + 0x10)" * (cast_expression "(long *)(param_1 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) ))))) ;) (expression_statement "*plVar3 = 0;" (assignment_expression "*plVar3 = 0" (pointer_expression "*plVar3" * identifier) = number_literal) ;) (expression_statement "plVar3[1] = (long)param_3;" (assignment_expression "plVar3[1] = (long)param_3" (subscript_expression "plVar3[1]" identifier [ number_literal ]) = (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "*(long **)(piVar2 + 4) = plVar3;" (assignment_expression "*(long **)(piVar2 + 4) = plVar3" (pointer_expression "*(long **)(piVar2 + 4)" * (cast_expression "(long **)(piVar2 + 4)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(piVar2 + 4)" ( (binary_expression "piVar2 + 4" identifier + number_literal) )))) = identifier) ;) (expression_statement "lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3);" (assignment_expression "lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3)" identifier = (call_expression "FUN_0012b2b0(lVar4 + 0x10,param_2,1,3)" identifier (argument_list "(lVar4 + 0x10,param_2,1,3)" ( (binary_expression "lVar4 + 0x10" identifier + number_literal) , identifier , number_literal , number_literal )))) ;) (if_statement "if (lVar4 != 0) {\n          *(int **)(lVar4 + 0x20) = piVar2;\n          *plVar3 = lVar4;\n          return piVar2;\n        }" if (parenthesized_expression "(lVar4 != 0)" ( (binary_expression "lVar4 != 0" identifier != number_literal) )) (compound_statement "{\n          *(int **)(lVar4 + 0x20) = piVar2;\n          *plVar3 = lVar4;\n          return piVar2;\n        }" { (expression_statement "*(int **)(lVar4 + 0x20) = piVar2;" (assignment_expression "*(int **)(lVar4 + 0x20) = piVar2" (pointer_expression "*(int **)(lVar4 + 0x20)" * (cast_expression "(int **)(lVar4 + 0x20)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar4 + 0x20)" ( (binary_expression "lVar4 + 0x20" identifier + number_literal) )))) = identifier) ;) (expression_statement "*plVar3 = lVar4;" (assignment_expression "*plVar3 = lVar4" (pointer_expression "*plVar3" * identifier) = identifier) ;) (return_statement "return piVar2;" return identifier ;) })) })) }))) })) (return_statement "return (int *)0x0;" return (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) )))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) && (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , (string_literal " string_content ") , LIT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (string_literal " string_content escape_sequence ") , IDENT ))) ;) (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) + LIT) )))) , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , (string_literal " string_content ") , LIT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (string_literal " string_content escape_sequence ") , IDENT ))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( LIT , LIT ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( LIT ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , IDENT , LIT , LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (return_statement return IDENT ;) })) })) }))) })) (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })))
(function_definition "int * FUN_0012dca0(long param_1,char *param_2,int *param_3)\n\n{\n  int iVar1;\n  int *piVar2;\n  long *plVar3;\n  long lVar4;\n  undefined8 uVar5;\n  \n  if ((param_2 != (char *)0x0) && (param_3 != (int *)0x0)) {\n    if (*(long *)(param_1 + 0x10) == 0) {\n      uVar5 = dcgettext(0,"debug_tag_type: no current file",5);\n      fprintf(stderr,"%s\n",uVar5);\n      return (int *)0x0;\n    }\n    if (*param_3 == 0x17) {\n      iVar1 = strcmp(*(char **)(**(long **)(param_3 + 4) + 8),param_2);\n      if (iVar1 == 0) {\n        return param_3;\n      }\n      uVar5 = dcgettext(0,"debug_tag_type: extra tag attempted",5);\n      fprintf(stderr,"%s\n",uVar5);\n    }\n    else {\n      piVar2 = (int *)FUN_0012b330(0x17,0);\n      if (piVar2 != (int *)0x0) {\n        plVar3 = (long *)xmalloc(0x10);\n        lVar4 = *(long *)(param_1 + 0x10);\n        *plVar3 = 0;\n        plVar3[1] = (long)param_3;\n        *(long **)(piVar2 + 4) = plVar3;\n        lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3);\n        if (lVar4 != 0) {\n          *(int **)(lVar4 + 0x20) = piVar2;\n          *plVar3 = lVar4;\n          return piVar2;\n        }\n      }\n    }\n  }\n  return (int *)0x0;\n}" (primitive_type "int") (pointer_declarator "* FUN_0012dca0(long param_1,char *param_2,int *param_3)" (* "*") (function_declarator "FUN_0012dca0(long param_1,char *param_2,int *param_3)" (identifier "FUN_0012dca0") (parameter_list "(long param_1,char *param_2,int *param_3)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "char *param_2" (primitive_type "char") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "int *param_3" (primitive_type "int") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) () ")")))) (compound_statement "{\n  int iVar1;\n  int *piVar2;\n  long *plVar3;\n  long lVar4;\n  undefined8 uVar5;\n  \n  if ((param_2 != (char *)0x0) && (param_3 != (int *)0x0)) {\n    if (*(long *)(param_1 + 0x10) == 0) {\n      uVar5 = dcgettext(0,"debug_tag_type: no current file",5);\n      fprintf(stderr,"%s\n",uVar5);\n      return (int *)0x0;\n    }\n    if (*param_3 == 0x17) {\n      iVar1 = strcmp(*(char **)(**(long **)(param_3 + 4) + 8),param_2);\n      if (iVar1 == 0) {\n        return param_3;\n      }\n      uVar5 = dcgettext(0,"debug_tag_type: extra tag attempted",5);\n      fprintf(stderr,"%s\n",uVar5);\n    }\n    else {\n      piVar2 = (int *)FUN_0012b330(0x17,0);\n      if (piVar2 != (int *)0x0) {\n        plVar3 = (long *)xmalloc(0x10);\n        lVar4 = *(long *)(param_1 + 0x10);\n        *plVar3 = 0;\n        plVar3[1] = (long)param_3;\n        *(long **)(piVar2 + 4) = plVar3;\n        lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3);\n        if (lVar4 != 0) {\n          *(int **)(lVar4 + 0x20) = piVar2;\n          *plVar3 = lVar4;\n          return piVar2;\n        }\n      }\n    }\n  }\n  return (int *)0x0;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "int *piVar2;" (primitive_type "int") (pointer_declarator "*piVar2" (* "*") (identifier "piVar2")) (; ";")) (declaration "long *plVar3;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar3" (* "*") (identifier "plVar3")) (; ";")) (declaration "long lVar4;" (sized_type_specifier "long" (long "long")) (identifier "lVar4") (; ";")) (declaration "undefined8 uVar5;" (type_identifier "undefined8") (identifier "uVar5") (; ";")) (if_statement "if ((param_2 != (char *)0x0) && (param_3 != (int *)0x0)) {\n    if (*(long *)(param_1 + 0x10) == 0) {\n      uVar5 = dcgettext(0,"debug_tag_type: no current file",5);\n      fprintf(stderr,"%s\n",uVar5);\n      return (int *)0x0;\n    }\n    if (*param_3 == 0x17) {\n      iVar1 = strcmp(*(char **)(**(long **)(param_3 + 4) + 8),param_2);\n      if (iVar1 == 0) {\n        return param_3;\n      }\n      uVar5 = dcgettext(0,"debug_tag_type: extra tag attempted",5);\n      fprintf(stderr,"%s\n",uVar5);\n    }\n    else {\n      piVar2 = (int *)FUN_0012b330(0x17,0);\n      if (piVar2 != (int *)0x0) {\n        plVar3 = (long *)xmalloc(0x10);\n        lVar4 = *(long *)(param_1 + 0x10);\n        *plVar3 = 0;\n        plVar3[1] = (long)param_3;\n        *(long **)(piVar2 + 4) = plVar3;\n        lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3);\n        if (lVar4 != 0) {\n          *(int **)(lVar4 + 0x20) = piVar2;\n          *plVar3 = lVar4;\n          return piVar2;\n        }\n      }\n    }\n  }" (if "if") (parenthesized_expression "((param_2 != (char *)0x0) && (param_3 != (int *)0x0))" (( "(") (binary_expression "(param_2 != (char *)0x0) && (param_3 != (int *)0x0)" (parenthesized_expression "(param_2 != (char *)0x0)" (( "(") (binary_expression "param_2 != (char *)0x0" (identifier "param_2") (!= "!=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (&& "&&") (parenthesized_expression "(param_3 != (int *)0x0)" (( "(") (binary_expression "param_3 != (int *)0x0" (identifier "param_3") (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")"))) () ")")) (compound_statement "{\n    if (*(long *)(param_1 + 0x10) == 0) {\n      uVar5 = dcgettext(0,"debug_tag_type: no current file",5);\n      fprintf(stderr,"%s\n",uVar5);\n      return (int *)0x0;\n    }\n    if (*param_3 == 0x17) {\n      iVar1 = strcmp(*(char **)(**(long **)(param_3 + 4) + 8),param_2);\n      if (iVar1 == 0) {\n        return param_3;\n      }\n      uVar5 = dcgettext(0,"debug_tag_type: extra tag attempted",5);\n      fprintf(stderr,"%s\n",uVar5);\n    }\n    else {\n      piVar2 = (int *)FUN_0012b330(0x17,0);\n      if (piVar2 != (int *)0x0) {\n        plVar3 = (long *)xmalloc(0x10);\n        lVar4 = *(long *)(param_1 + 0x10);\n        *plVar3 = 0;\n        plVar3[1] = (long)param_3;\n        *(long **)(piVar2 + 4) = plVar3;\n        lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3);\n        if (lVar4 != 0) {\n          *(int **)(lVar4 + 0x20) = piVar2;\n          *plVar3 = lVar4;\n          return piVar2;\n        }\n      }\n    }\n  }" ({ "{") (if_statement "if (*(long *)(param_1 + 0x10) == 0) {\n      uVar5 = dcgettext(0,"debug_tag_type: no current file",5);\n      fprintf(stderr,"%s\n",uVar5);\n      return (int *)0x0;\n    }" (if "if") (parenthesized_expression "(*(long *)(param_1 + 0x10) == 0)" (( "(") (binary_expression "*(long *)(param_1 + 0x10) == 0" (pointer_expression "*(long *)(param_1 + 0x10)" (* "*") (cast_expression "(long *)(param_1 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      uVar5 = dcgettext(0,"debug_tag_type: no current file",5);\n      fprintf(stderr,"%s\n",uVar5);\n      return (int *)0x0;\n    }" ({ "{") (expression_statement "uVar5 = dcgettext(0,"debug_tag_type: no current file",5);" (assignment_expression "uVar5 = dcgettext(0,"debug_tag_type: no current file",5)" (identifier "uVar5") (= "=") (call_expression "dcgettext(0,"debug_tag_type: no current file",5)" (identifier "dcgettext") (argument_list "(0,"debug_tag_type: no current file",5)" (( "(") (number_literal "0") (, ",") (string_literal ""debug_tag_type: no current file"" (" """) (string_content "debug_tag_type: no current file") (" """)) (, ",") (number_literal "5") () ")")))) (; ";")) (expression_statement "fprintf(stderr,"%s\n",uVar5);" (call_expression "fprintf(stderr,"%s\n",uVar5)" (identifier "fprintf") (argument_list "(stderr,"%s\n",uVar5)" (( "(") (identifier "stderr") (, ",") (string_literal ""%s\n"" (" """) (string_content "%s") (escape_sequence "\n") (" """)) (, ",") (identifier "uVar5") () ")"))) (; ";")) (return_statement "return (int *)0x0;" (return "return") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}"))) (if_statement "if (*param_3 == 0x17) {\n      iVar1 = strcmp(*(char **)(**(long **)(param_3 + 4) + 8),param_2);\n      if (iVar1 == 0) {\n        return param_3;\n      }\n      uVar5 = dcgettext(0,"debug_tag_type: extra tag attempted",5);\n      fprintf(stderr,"%s\n",uVar5);\n    }\n    else {\n      piVar2 = (int *)FUN_0012b330(0x17,0);\n      if (piVar2 != (int *)0x0) {\n        plVar3 = (long *)xmalloc(0x10);\n        lVar4 = *(long *)(param_1 + 0x10);\n        *plVar3 = 0;\n        plVar3[1] = (long)param_3;\n        *(long **)(piVar2 + 4) = plVar3;\n        lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3);\n        if (lVar4 != 0) {\n          *(int **)(lVar4 + 0x20) = piVar2;\n          *plVar3 = lVar4;\n          return piVar2;\n        }\n      }\n    }" (if "if") (parenthesized_expression "(*param_3 == 0x17)" (( "(") (binary_expression "*param_3 == 0x17" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (== "==") (number_literal "0x17")) () ")")) (compound_statement "{\n      iVar1 = strcmp(*(char **)(**(long **)(param_3 + 4) + 8),param_2);\n      if (iVar1 == 0) {\n        return param_3;\n      }\n      uVar5 = dcgettext(0,"debug_tag_type: extra tag attempted",5);\n      fprintf(stderr,"%s\n",uVar5);\n    }" ({ "{") (expression_statement "iVar1 = strcmp(*(char **)(**(long **)(param_3 + 4) + 8),param_2);" (assignment_expression "iVar1 = strcmp(*(char **)(**(long **)(param_3 + 4) + 8),param_2)" (identifier "iVar1") (= "=") (call_expression "strcmp(*(char **)(**(long **)(param_3 + 4) + 8),param_2)" (identifier "strcmp") (argument_list "(*(char **)(**(long **)(param_3 + 4) + 8),param_2)" (( "(") (pointer_expression "*(char **)(**(long **)(param_3 + 4) + 8)" (* "*") (cast_expression "(char **)(**(long **)(param_3 + 4) + 8)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(**(long **)(param_3 + 4) + 8)" (( "(") (binary_expression "**(long **)(param_3 + 4) + 8" (pointer_expression "**(long **)(param_3 + 4)" (* "*") (pointer_expression "*(long **)(param_3 + 4)" (* "*") (cast_expression "(long **)(param_3 + 4)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_3 + 4)" (( "(") (binary_expression "param_3 + 4" (identifier "param_3") (+ "+") (number_literal "4")) () ")"))))) (+ "+") (number_literal "8")) () ")")))) (, ",") (identifier "param_2") () ")")))) (; ";")) (if_statement "if (iVar1 == 0) {\n        return param_3;\n      }" (if "if") (parenthesized_expression "(iVar1 == 0)" (( "(") (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        return param_3;\n      }" ({ "{") (return_statement "return param_3;" (return "return") (identifier "param_3") (; ";")) (} "}"))) (expression_statement "uVar5 = dcgettext(0,"debug_tag_type: extra tag attempted",5);" (assignment_expression "uVar5 = dcgettext(0,"debug_tag_type: extra tag attempted",5)" (identifier "uVar5") (= "=") (call_expression "dcgettext(0,"debug_tag_type: extra tag attempted",5)" (identifier "dcgettext") (argument_list "(0,"debug_tag_type: extra tag attempted",5)" (( "(") (number_literal "0") (, ",") (string_literal ""debug_tag_type: extra tag attempted"" (" """) (string_content "debug_tag_type: extra tag attempted") (" """)) (, ",") (number_literal "5") () ")")))) (; ";")) (expression_statement "fprintf(stderr,"%s\n",uVar5);" (call_expression "fprintf(stderr,"%s\n",uVar5)" (identifier "fprintf") (argument_list "(stderr,"%s\n",uVar5)" (( "(") (identifier "stderr") (, ",") (string_literal ""%s\n"" (" """) (string_content "%s") (escape_sequence "\n") (" """)) (, ",") (identifier "uVar5") () ")"))) (; ";")) (} "}")) (else_clause "else {\n      piVar2 = (int *)FUN_0012b330(0x17,0);\n      if (piVar2 != (int *)0x0) {\n        plVar3 = (long *)xmalloc(0x10);\n        lVar4 = *(long *)(param_1 + 0x10);\n        *plVar3 = 0;\n        plVar3[1] = (long)param_3;\n        *(long **)(piVar2 + 4) = plVar3;\n        lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3);\n        if (lVar4 != 0) {\n          *(int **)(lVar4 + 0x20) = piVar2;\n          *plVar3 = lVar4;\n          return piVar2;\n        }\n      }\n    }" (else "else") (compound_statement "{\n      piVar2 = (int *)FUN_0012b330(0x17,0);\n      if (piVar2 != (int *)0x0) {\n        plVar3 = (long *)xmalloc(0x10);\n        lVar4 = *(long *)(param_1 + 0x10);\n        *plVar3 = 0;\n        plVar3[1] = (long)param_3;\n        *(long **)(piVar2 + 4) = plVar3;\n        lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3);\n        if (lVar4 != 0) {\n          *(int **)(lVar4 + 0x20) = piVar2;\n          *plVar3 = lVar4;\n          return piVar2;\n        }\n      }\n    }" ({ "{") (expression_statement "piVar2 = (int *)FUN_0012b330(0x17,0);" (assignment_expression "piVar2 = (int *)FUN_0012b330(0x17,0)" (identifier "piVar2") (= "=") (cast_expression "(int *)FUN_0012b330(0x17,0)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0012b330(0x17,0)" (identifier "FUN_0012b330") (argument_list "(0x17,0)" (( "(") (number_literal "0x17") (, ",") (number_literal "0") () ")"))))) (; ";")) (if_statement "if (piVar2 != (int *)0x0) {\n        plVar3 = (long *)xmalloc(0x10);\n        lVar4 = *(long *)(param_1 + 0x10);\n        *plVar3 = 0;\n        plVar3[1] = (long)param_3;\n        *(long **)(piVar2 + 4) = plVar3;\n        lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3);\n        if (lVar4 != 0) {\n          *(int **)(lVar4 + 0x20) = piVar2;\n          *plVar3 = lVar4;\n          return piVar2;\n        }\n      }" (if "if") (parenthesized_expression "(piVar2 != (int *)0x0)" (( "(") (binary_expression "piVar2 != (int *)0x0" (identifier "piVar2") (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        plVar3 = (long *)xmalloc(0x10);\n        lVar4 = *(long *)(param_1 + 0x10);\n        *plVar3 = 0;\n        plVar3[1] = (long)param_3;\n        *(long **)(piVar2 + 4) = plVar3;\n        lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3);\n        if (lVar4 != 0) {\n          *(int **)(lVar4 + 0x20) = piVar2;\n          *plVar3 = lVar4;\n          return piVar2;\n        }\n      }" ({ "{") (expression_statement "plVar3 = (long *)xmalloc(0x10);" (assignment_expression "plVar3 = (long *)xmalloc(0x10)" (identifier "plVar3") (= "=") (cast_expression "(long *)xmalloc(0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "xmalloc(0x10)" (identifier "xmalloc") (argument_list "(0x10)" (( "(") (number_literal "0x10") () ")"))))) (; ";")) (expression_statement "lVar4 = *(long *)(param_1 + 0x10);" (assignment_expression "lVar4 = *(long *)(param_1 + 0x10)" (identifier "lVar4") (= "=") (pointer_expression "*(long *)(param_1 + 0x10)" (* "*") (cast_expression "(long *)(param_1 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (expression_statement "*plVar3 = 0;" (assignment_expression "*plVar3 = 0" (pointer_expression "*plVar3" (* "*") (identifier "plVar3")) (= "=") (number_literal "0")) (; ";")) (expression_statement "plVar3[1] = (long)param_3;" (assignment_expression "plVar3[1] = (long)param_3" (subscript_expression "plVar3[1]" (identifier "plVar3") ([ "[") (number_literal "1") (] "]")) (= "=") (cast_expression "(long)param_3" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_3"))) (; ";")) (expression_statement "*(long **)(piVar2 + 4) = plVar3;" (assignment_expression "*(long **)(piVar2 + 4) = plVar3" (pointer_expression "*(long **)(piVar2 + 4)" (* "*") (cast_expression "(long **)(piVar2 + 4)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(piVar2 + 4)" (( "(") (binary_expression "piVar2 + 4" (identifier "piVar2") (+ "+") (number_literal "4")) () ")")))) (= "=") (identifier "plVar3")) (; ";")) (expression_statement "lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3);" (assignment_expression "lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3)" (identifier "lVar4") (= "=") (call_expression "FUN_0012b2b0(lVar4 + 0x10,param_2,1,3)" (identifier "FUN_0012b2b0") (argument_list "(lVar4 + 0x10,param_2,1,3)" (( "(") (binary_expression "lVar4 + 0x10" (identifier "lVar4") (+ "+") (number_literal "0x10")) (, ",") (identifier "param_2") (, ",") (number_literal "1") (, ",") (number_literal "3") () ")")))) (; ";")) (if_statement "if (lVar4 != 0) {\n          *(int **)(lVar4 + 0x20) = piVar2;\n          *plVar3 = lVar4;\n          return piVar2;\n        }" (if "if") (parenthesized_expression "(lVar4 != 0)" (( "(") (binary_expression "lVar4 != 0" (identifier "lVar4") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          *(int **)(lVar4 + 0x20) = piVar2;\n          *plVar3 = lVar4;\n          return piVar2;\n        }" ({ "{") (expression_statement "*(int **)(lVar4 + 0x20) = piVar2;" (assignment_expression "*(int **)(lVar4 + 0x20) = piVar2" (pointer_expression "*(int **)(lVar4 + 0x20)" (* "*") (cast_expression "(int **)(lVar4 + 0x20)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(lVar4 + 0x20)" (( "(") (binary_expression "lVar4 + 0x20" (identifier "lVar4") (+ "+") (number_literal "0x20")) () ")")))) (= "=") (identifier "piVar2")) (; ";")) (expression_statement "*plVar3 = lVar4;" (assignment_expression "*plVar3 = lVar4" (pointer_expression "*plVar3" (* "*") (identifier "plVar3")) (= "=") (identifier "lVar4")) (; ";")) (return_statement "return piVar2;" (return "return") (identifier "piVar2") (; ";")) (} "}"))) (} "}"))) (} "}")))) (} "}"))) (return_statement "return (int *)0x0;" (return "return") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}")))

type_1 function_1(void *handle,char *var_1,type_1 var_2)

{
  long var_12;
  int var_7;
  type_2 *var_9;
  type_3 *pdVar4;
  type_4 *var_13;
  type_5 uVar6;
  type_6 *info;
  type_7 in_R8D;
  
  if ((var_1 != (char *)0x0) && (var_2 != (type_1)0x0)) {
    if (*(long *)((long)handle + 0x10) == 0) {
      uVar6 = var_3(0,"debug_tag_type: no current file",5);
      var_4(stderr,"%s\n",uVar6);
      return (type_1)0x0;
    }
    if (var_2->kind == var_5) {
      var_7 = var_6(((var_2->u).knamed)->var_1->var_1,var_1);
      if (var_7 == 0) {
        return var_2;
      }
      uVar6 = var_3(0,"debug_tag_type: extra tag attempted",5);
      var_4(stderr,"%s\n",uVar6);
    }
    else {
      var_9 = var_8((type_6 *)0x17,DEBUG_KIND_ILLEGAL,(type_8)var_2);
      if (var_9 != (type_2 *)0x0) {
        pdVar4 = (type_3 *)var_10(0x10);
        var_12 = *(long *)((long)handle + 0x10);
        pdVar4->var_1 = (type_4 *)0x0;
        pdVar4->var_2 = var_2;
        (var_9->u).knamed = pdVar4;
        var_13 = var_11
                           ((type_6 *)(var_12 + 0x10),(type_9 **)var_1,(char *)0x1,
                            DEBUG_OBJECT_FUNCTION,in_R8D);
        if (var_13 != (type_4 *)0x0) {
          (var_13->u).function = (type_10 *)var_9;
          pdVar4->var_1 = var_13;
          return var_9;
        }
      }
    }
  }
  return (type_1)0x0;
}


(translation_unit (function_definition type: (primitive_type) declarator: (pointer_declarator declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier)))))) body: (compound_statement (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) right: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (number_literal) (string_literal (string_content)) (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (string_literal (string_content) (escape_sequence)) (identifier)))) (return_statement (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) right: (number_literal))))) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (number_literal) (string_literal (string_content)) (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (string_literal (string_content) (escape_sequence)) (identifier))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (number_literal) (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (identifier) (number_literal) (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (return_statement (identifier))))))))))) (return_statement (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal))))))

int * MASKED(long param_1,char *param_2,int *param_3)

{
  int iVar1;
  int *piVar2;
  long *plVar3;
  long lVar4;
  undefined8 uVar5;
  
  if ((param_2 != (char *)0x0) && (param_3 != (int *)0x0)) {
    if (*(long *)(param_1 + 0x10) == 0) {
      uVar5 = dcgettext(0,"debug_tag_type: no current file",5);
      fprintf(stderr,"%s\n",uVar5);
      return (int *)0x0;
    }
    if (*param_3 == 0x17) {
      iVar1 = strcmp(*(char **)(**(long **)(param_3 + 4) + 8),param_2);
      if (iVar1 == 0) {
        return param_3;
      }
      uVar5 = dcgettext(0,"debug_tag_type: extra tag attempted",5);
      fprintf(stderr,"%s\n",uVar5);
    }
    else {
      piVar2 = (int *)FUN_0012b330(0x17,0);
      if (piVar2 != (int *)0x0) {
        plVar3 = (long *)xmalloc(0x10);
        lVar4 = *(long *)(param_1 + 0x10);
        *plVar3 = 0;
        plVar3[1] = (long)param_3;
        *(long **)(piVar2 + 4) = plVar3;
        lVar4 = FUN_0012b2b0(lVar4 + 0x10,param_2,1,3);
        if (lVar4 != 0) {
          *(int **)(lVar4 + 0x20) = piVar2;
          *plVar3 = lVar4;
          return piVar2;
        }
      }
    }
  }
  return (int *)0x0;
}

