
/* DWARF original prototype: bool operator()(Stringpool_sort_comparison * this, Stringpool_sort_info
   * sort_info1, Stringpool_sort_info * sort_info2) */

bool __thiscall
gold::Stringpool_template<short_unsigned_int>::Stringpool_sort_comparison::operator()
          (Stringpool_sort_comparison *this,Stringpool_sort_info *sort_info1,
          Stringpool_sort_info *sort_info2)

{
  ushort *puVar1;
  ushort *puVar2;
  __node_type *p_Var3;
  __node_type *p_Var4;
  ulong uVar5;
  ulong uVar6;
  ulong uVar7;
  ulong uVar8;
  ushort uVar9;
  ushort uVar10;
  
  p_Var3 = (sort_info1->
           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>,_true>
           )._M_cur;
  p_Var4 = (sort_info2->
           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>,_true>
           )._M_cur;
  uVar5 = *(ulong *)((long)&(p_Var3->
                            super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>
                            )._M_storage._M_storage + 8);
  uVar6 = *(ulong *)((long)&(p_Var4->
                            super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>
                            )._M_storage._M_storage + 8);
  uVar7 = uVar6;
  if (uVar5 <= uVar6) {
    uVar7 = uVar5;
  }
  puVar1 = (ushort *)
           ((long)(p_Var3->
                  super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>
                  )._M_storage._M_storage.__align + -2 + uVar5 * 2);
  puVar2 = (ushort *)
           ((long)(p_Var4->
                  super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>
                  )._M_storage._M_storage.__align + -2 + uVar6 * 2);
  if (uVar7 == 0) {
LAB_002d85b3:
    return uVar6 < uVar5;
  }
  uVar9 = *puVar1;
  uVar10 = *puVar2;
  uVar8 = uVar7;
  if (uVar9 == uVar10) {
    do {
      uVar8 = uVar8 - 1;
      if (uVar8 == 0) goto LAB_002d85b3;
      uVar9 = puVar1[uVar8 - uVar7];
      uVar10 = puVar2[uVar8 - uVar7];
    } while (uVar9 == uVar10);
  }
  return uVar10 < uVar9;
}



undefined8 FUN_002d8550(undefined8 param_1,long *param_2,long *param_3)

{
  ushort *puVar1;
  ushort *puVar2;
  ulong uVar3;
  ulong uVar4;
  ulong uVar5;
  ulong uVar6;
  ushort uVar7;
  ushort uVar8;
  
  uVar3 = *(ulong *)(*param_2 + 0x10);
  uVar4 = *(ulong *)(*param_3 + 0x10);
  uVar5 = uVar4;
  if (uVar3 <= uVar4) {
    uVar5 = uVar3;
  }
  puVar1 = (ushort *)(*(long *)(*param_2 + 8) + -2 + uVar3 * 2);
  puVar2 = (ushort *)(*(long *)(*param_3 + 8) + -2 + uVar4 * 2);
  uVar6 = uVar5;
  if (uVar5 == 0) {
LAB_002d85b3:
    return CONCAT71((int7)(uVar6 >> 8),uVar4 < uVar3);
  }
  uVar7 = *puVar1;
  uVar8 = *puVar2;
  if (uVar7 == uVar8) {
    do {
      uVar6 = uVar6 - 1;
      if (uVar6 == 0) goto LAB_002d85b3;
      uVar7 = puVar1[uVar6 - uVar5];
      uVar8 = puVar2[uVar6 - uVar5];
    } while (uVar7 == uVar8);
  }
  return CONCAT71((int7)(uVar6 >> 8),uVar8 < uVar7);
}


MOV RCX,qword ptr [RSI]
MOV RDX,qword ptr [RDX]
MOV R9,qword ptr [RCX + 0x10]
MOV R8,qword ptr [RDX + 0x10]
MOV RCX,qword ptr [RCX + 0x8]
MOV RDX,qword ptr [RDX + 0x8]
CMP R9,R8
MOV RAX,R8
CMOVBE RAX,R9
LEA RDI,[RCX + R9*0x2 + -0x2]
LEA RSI,[RDX + R8*0x2 + -0x2]
TEST RAX,RAX
JZ 0x002d85b3
MOVZX ECX,word ptr [RDI]
MOVZX EDX,word ptr [RSI]
CMP CX,DX
JNZ 0x002d85c0
MOV RDX,RAX
NEG RDX
ADD RDX,RDX
ADD RDI,RDX
ADD RSI,RDX
JMP 0x002d85ad
MOVZX ECX,word ptr [RDI + RAX*0x2]
MOVZX EDX,word ptr [RSI + RAX*0x2]
CMP CX,DX
JNZ 0x002d85c0
SUB RAX,0x1
JNZ 0x002d85a0
CMP R9,R8
SETA AL
RET
CMP CX,DX
SETA AL
RET
(translation_unit "undefined8 FUN_002d8550(undefined8 param_1,long *param_2,long *param_3)\n\n{\n  ushort *puVar1;\n  ushort *puVar2;\n  ulong uVar3;\n  ulong uVar4;\n  ulong uVar5;\n  ulong uVar6;\n  ushort uVar7;\n  ushort uVar8;\n  \n  uVar3 = *(ulong *)(*param_2 + 0x10);\n  uVar4 = *(ulong *)(*param_3 + 0x10);\n  uVar5 = uVar4;\n  if (uVar3 <= uVar4) {\n    uVar5 = uVar3;\n  }\n  puVar1 = (ushort *)(*(long *)(*param_2 + 8) + -2 + uVar3 * 2);\n  puVar2 = (ushort *)(*(long *)(*param_3 + 8) + -2 + uVar4 * 2);\n  uVar6 = uVar5;\n  if (uVar5 == 0) {\nLAB_002d85b3:\n    return CONCAT71((int7)(uVar6 >> 8),uVar4 < uVar3);\n  }\n  uVar7 = *puVar1;\n  uVar8 = *puVar2;\n  if (uVar7 == uVar8) {\n    do {\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_002d85b3;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    } while (uVar7 == uVar8);\n  }\n  return CONCAT71((int7)(uVar6 >> 8),uVar8 < uVar7);\n}\n\n" (function_definition "undefined8 FUN_002d8550(undefined8 param_1,long *param_2,long *param_3)\n\n{\n  ushort *puVar1;\n  ushort *puVar2;\n  ulong uVar3;\n  ulong uVar4;\n  ulong uVar5;\n  ulong uVar6;\n  ushort uVar7;\n  ushort uVar8;\n  \n  uVar3 = *(ulong *)(*param_2 + 0x10);\n  uVar4 = *(ulong *)(*param_3 + 0x10);\n  uVar5 = uVar4;\n  if (uVar3 <= uVar4) {\n    uVar5 = uVar3;\n  }\n  puVar1 = (ushort *)(*(long *)(*param_2 + 8) + -2 + uVar3 * 2);\n  puVar2 = (ushort *)(*(long *)(*param_3 + 8) + -2 + uVar4 * 2);\n  uVar6 = uVar5;\n  if (uVar5 == 0) {\nLAB_002d85b3:\n    return CONCAT71((int7)(uVar6 >> 8),uVar4 < uVar3);\n  }\n  uVar7 = *puVar1;\n  uVar8 = *puVar2;\n  if (uVar7 == uVar8) {\n    do {\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_002d85b3;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    } while (uVar7 == uVar8);\n  }\n  return CONCAT71((int7)(uVar6 >> 8),uVar8 < uVar7);\n}" type_identifier (function_declarator "FUN_002d8550(undefined8 param_1,long *param_2,long *param_3)" identifier (parameter_list "(undefined8 param_1,long *param_2,long *param_3)" ( (parameter_declaration "undefined8 param_1" type_identifier identifier) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "long *param_3" (sized_type_specifier "long" long) (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  ushort *puVar1;\n  ushort *puVar2;\n  ulong uVar3;\n  ulong uVar4;\n  ulong uVar5;\n  ulong uVar6;\n  ushort uVar7;\n  ushort uVar8;\n  \n  uVar3 = *(ulong *)(*param_2 + 0x10);\n  uVar4 = *(ulong *)(*param_3 + 0x10);\n  uVar5 = uVar4;\n  if (uVar3 <= uVar4) {\n    uVar5 = uVar3;\n  }\n  puVar1 = (ushort *)(*(long *)(*param_2 + 8) + -2 + uVar3 * 2);\n  puVar2 = (ushort *)(*(long *)(*param_3 + 8) + -2 + uVar4 * 2);\n  uVar6 = uVar5;\n  if (uVar5 == 0) {\nLAB_002d85b3:\n    return CONCAT71((int7)(uVar6 >> 8),uVar4 < uVar3);\n  }\n  uVar7 = *puVar1;\n  uVar8 = *puVar2;\n  if (uVar7 == uVar8) {\n    do {\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_002d85b3;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    } while (uVar7 == uVar8);\n  }\n  return CONCAT71((int7)(uVar6 >> 8),uVar8 < uVar7);\n}" { (declaration "ushort *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "ushort *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "ulong uVar3;" type_identifier identifier ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "ulong uVar5;" type_identifier identifier ;) (declaration "ulong uVar6;" type_identifier identifier ;) (declaration "ushort uVar7;" type_identifier identifier ;) (declaration "ushort uVar8;" type_identifier identifier ;) (expression_statement "uVar3 = *(ulong *)(*param_2 + 0x10);" (assignment_expression "uVar3 = *(ulong *)(*param_2 + 0x10)" identifier = (pointer_expression "*(ulong *)(*param_2 + 0x10)" * (cast_expression "(ulong *)(*param_2 + 0x10)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_2 + 0x10)" ( (binary_expression "*param_2 + 0x10" (pointer_expression "*param_2" * identifier) + number_literal) ))))) ;) (expression_statement "uVar4 = *(ulong *)(*param_3 + 0x10);" (assignment_expression "uVar4 = *(ulong *)(*param_3 + 0x10)" identifier = (pointer_expression "*(ulong *)(*param_3 + 0x10)" * (cast_expression "(ulong *)(*param_3 + 0x10)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_3 + 0x10)" ( (binary_expression "*param_3 + 0x10" (pointer_expression "*param_3" * identifier) + number_literal) ))))) ;) (expression_statement "uVar5 = uVar4;" (assignment_expression "uVar5 = uVar4" identifier = identifier) ;) (if_statement "if (uVar3 <= uVar4) {\n    uVar5 = uVar3;\n  }" if (parenthesized_expression "(uVar3 <= uVar4)" ( (binary_expression "uVar3 <= uVar4" identifier <= identifier) )) (compound_statement "{\n    uVar5 = uVar3;\n  }" { (expression_statement "uVar5 = uVar3;" (assignment_expression "uVar5 = uVar3" identifier = identifier) ;) })) (expression_statement "puVar1 = (ushort *)(*(long *)(*param_2 + 8) + -2 + uVar3 * 2);" (assignment_expression "puVar1 = (ushort *)(*(long *)(*param_2 + 8) + -2 + uVar3 * 2)" identifier = (cast_expression "(ushort *)(*(long *)(*param_2 + 8) + -2 + uVar3 * 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(*param_2 + 8) + -2 + uVar3 * 2)" ( (binary_expression "*(long *)(*param_2 + 8) + -2 + uVar3 * 2" (binary_expression "*(long *)(*param_2 + 8) + -2" (pointer_expression "*(long *)(*param_2 + 8)" * (cast_expression "(long *)(*param_2 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_2 + 8)" ( (binary_expression "*param_2 + 8" (pointer_expression "*param_2" * identifier) + number_literal) )))) + number_literal) + (binary_expression "uVar3 * 2" identifier * number_literal)) )))) ;) (expression_statement "puVar2 = (ushort *)(*(long *)(*param_3 + 8) + -2 + uVar4 * 2);" (assignment_expression "puVar2 = (ushort *)(*(long *)(*param_3 + 8) + -2 + uVar4 * 2)" identifier = (cast_expression "(ushort *)(*(long *)(*param_3 + 8) + -2 + uVar4 * 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(*param_3 + 8) + -2 + uVar4 * 2)" ( (binary_expression "*(long *)(*param_3 + 8) + -2 + uVar4 * 2" (binary_expression "*(long *)(*param_3 + 8) + -2" (pointer_expression "*(long *)(*param_3 + 8)" * (cast_expression "(long *)(*param_3 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_3 + 8)" ( (binary_expression "*param_3 + 8" (pointer_expression "*param_3" * identifier) + number_literal) )))) + number_literal) + (binary_expression "uVar4 * 2" identifier * number_literal)) )))) ;) (expression_statement "uVar6 = uVar5;" (assignment_expression "uVar6 = uVar5" identifier = identifier) ;) (if_statement "if (uVar5 == 0) {\nLAB_002d85b3:\n    return CONCAT71((int7)(uVar6 >> 8),uVar4 < uVar3);\n  }" if (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) (compound_statement "{\nLAB_002d85b3:\n    return CONCAT71((int7)(uVar6 >> 8),uVar4 < uVar3);\n  }" { (labeled_statement "LAB_002d85b3:\n    return CONCAT71((int7)(uVar6 >> 8),uVar4 < uVar3);" statement_identifier : (return_statement "return CONCAT71((int7)(uVar6 >> 8),uVar4 < uVar3);" return (call_expression "CONCAT71((int7)(uVar6 >> 8),uVar4 < uVar3)" identifier (argument_list "((int7)(uVar6 >> 8),uVar4 < uVar3)" ( (call_expression "(int7)(uVar6 >> 8)" (parenthesized_expression "(int7)" ( identifier )) (argument_list "(uVar6 >> 8)" ( (binary_expression "uVar6 >> 8" identifier >> number_literal) ))) , (binary_expression "uVar4 < uVar3" identifier < identifier) ))) ;)) })) (expression_statement "uVar7 = *puVar1;" (assignment_expression "uVar7 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) (expression_statement "uVar8 = *puVar2;" (assignment_expression "uVar8 = *puVar2" identifier = (pointer_expression "*puVar2" * identifier)) ;) (if_statement "if (uVar7 == uVar8) {\n    do {\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_002d85b3;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    } while (uVar7 == uVar8);\n  }" if (parenthesized_expression "(uVar7 == uVar8)" ( (binary_expression "uVar7 == uVar8" identifier == identifier) )) (compound_statement "{\n    do {\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_002d85b3;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    } while (uVar7 == uVar8);\n  }" { (do_statement "do {\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_002d85b3;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    } while (uVar7 == uVar8);" do (compound_statement "{\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_002d85b3;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    }" { (expression_statement "uVar6 = uVar6 - 1;" (assignment_expression "uVar6 = uVar6 - 1" identifier = (binary_expression "uVar6 - 1" identifier - number_literal)) ;) (if_statement "if (uVar6 == 0) goto LAB_002d85b3;" if (parenthesized_expression "(uVar6 == 0)" ( (binary_expression "uVar6 == 0" identifier == number_literal) )) (goto_statement "goto LAB_002d85b3;" goto statement_identifier ;)) (expression_statement "uVar7 = puVar1[uVar6 - uVar5];" (assignment_expression "uVar7 = puVar1[uVar6 - uVar5]" identifier = (subscript_expression "puVar1[uVar6 - uVar5]" identifier [ (binary_expression "uVar6 - uVar5" identifier - identifier) ])) ;) (expression_statement "uVar8 = puVar2[uVar6 - uVar5];" (assignment_expression "uVar8 = puVar2[uVar6 - uVar5]" identifier = (subscript_expression "puVar2[uVar6 - uVar5]" identifier [ (binary_expression "uVar6 - uVar5" identifier - identifier) ])) ;) }) while (parenthesized_expression "(uVar7 == uVar8)" ( (binary_expression "uVar7 == uVar8" identifier == identifier) )) ;) })) (return_statement "return CONCAT71((int7)(uVar6 >> 8),uVar8 < uVar7);" return (call_expression "CONCAT71((int7)(uVar6 >> 8),uVar8 < uVar7)" identifier (argument_list "((int7)(uVar6 >> 8),uVar8 < uVar7)" ( (call_expression "(int7)(uVar6 >> 8)" (parenthesized_expression "(int7)" ( identifier )) (argument_list "(uVar6 >> 8)" ( (binary_expression "uVar6 >> 8" identifier >> number_literal) ))) , (binary_expression "uVar8 < uVar7" identifier < identifier) ))) ;) })))
(translation_unit "/* DWARF original prototype: bool operator()(Stringpool_sort_comparison * this, Stringpool_sort_info\n   * sort_info1, Stringpool_sort_info * sort_info2) */\n\nbool __thiscall\ngold::Stringpool_template<short_unsigned_int>::Stringpool_sort_comparison::operator()\n          (Stringpool_sort_comparison *this,Stringpool_sort_info *sort_info1,\n          Stringpool_sort_info *sort_info2)\n\n{\n  ushort *puVar1;\n  ushort *puVar2;\n  __node_type *p_Var3;\n  __node_type *p_Var4;\n  ulong uVar5;\n  ulong uVar6;\n  ulong uVar7;\n  ulong uVar8;\n  ushort uVar9;\n  ushort uVar10;\n  \n  p_Var3 = (sort_info1->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>,_true>\n           )._M_cur;\n  p_Var4 = (sort_info2->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>,_true>\n           )._M_cur;\n  uVar5 = *(ulong *)((long)&(p_Var3->\n                            super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                            )._M_storage._M_storage + 8);\n  uVar6 = *(ulong *)((long)&(p_Var4->\n                            super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                            )._M_storage._M_storage + 8);\n  uVar7 = uVar6;\n  if (uVar5 <= uVar6) {\n    uVar7 = uVar5;\n  }\n  puVar1 = (ushort *)\n           ((long)(p_Var3->\n                  super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                  )._M_storage._M_storage.__align + -2 + uVar5 * 2);\n  puVar2 = (ushort *)\n           ((long)(p_Var4->\n                  super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                  )._M_storage._M_storage.__align + -2 + uVar6 * 2);\n  if (uVar7 == 0) {\nLAB_002d85b3:\n    return uVar6 < uVar5;\n  }\n  uVar9 = *puVar1;\n  uVar10 = *puVar2;\n  uVar8 = uVar7;\n  if (uVar9 == uVar10) {\n    do {\n      uVar8 = uVar8 - 1;\n      if (uVar8 == 0) goto LAB_002d85b3;\n      uVar9 = puVar1[uVar8 - uVar7];\n      uVar10 = puVar2[uVar8 - uVar7];\n    } while (uVar9 == uVar10);\n  }\n  return uVar10 < uVar9;\n}\n\n" comment (function_definition "bool __thiscall\ngold::Stringpool_template<short_unsigned_int>::Stringpool_sort_comparison::operator()\n          (Stringpool_sort_comparison *this,Stringpool_sort_info *sort_info1,\n          Stringpool_sort_info *sort_info2)\n\n{\n  ushort *puVar1;\n  ushort *puVar2;\n  __node_type *p_Var3;\n  __node_type *p_Var4;\n  ulong uVar5;\n  ulong uVar6;\n  ulong uVar7;\n  ulong uVar8;\n  ushort uVar9;\n  ushort uVar10;\n  \n  p_Var3 = (sort_info1->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>,_true>\n           )._M_cur;\n  p_Var4 = (sort_info2->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>,_true>\n           )._M_cur;\n  uVar5 = *(ulong *)((long)&(p_Var3->\n                            super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                            )._M_storage._M_storage + 8);\n  uVar6 = *(ulong *)((long)&(p_Var4->\n                            super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                            )._M_storage._M_storage + 8);\n  uVar7 = uVar6;\n  if (uVar5 <= uVar6) {\n    uVar7 = uVar5;\n  }\n  puVar1 = (ushort *)\n           ((long)(p_Var3->\n                  super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                  )._M_storage._M_storage.__align + -2 + uVar5 * 2);\n  puVar2 = (ushort *)\n           ((long)(p_Var4->\n                  super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                  )._M_storage._M_storage.__align + -2 + uVar6 * 2);\n  if (uVar7 == 0) {\nLAB_002d85b3:\n    return uVar6 < uVar5;\n  }\n  uVar9 = *puVar1;\n  uVar10 = *puVar2;\n  uVar8 = uVar7;\n  if (uVar9 == uVar10) {\n    do {\n      uVar8 = uVar8 - 1;\n      if (uVar8 == 0) goto LAB_002d85b3;\n      uVar9 = puVar1[uVar8 - uVar7];\n      uVar10 = puVar2[uVar8 - uVar7];\n    } while (uVar9 == uVar10);\n  }\n  return uVar10 < uVar9;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Stringpool_template<short_unsigned_int>::Stringpool_sort_comparison::" identifier : : identifier < identifier > : : identifier : :) (function_declarator "operator()\n          (Stringpool_sort_comparison *this,Stringpool_sort_info *sort_info1,\n          Stringpool_sort_info *sort_info2)" (function_declarator "operator()" identifier (parameter_list "()" ( ))) (parameter_list "(Stringpool_sort_comparison *this,Stringpool_sort_info *sort_info1,\n          Stringpool_sort_info *sort_info2)" ( (parameter_declaration "Stringpool_sort_comparison *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "Stringpool_sort_info *sort_info1" type_identifier (pointer_declarator "*sort_info1" * identifier)) , (parameter_declaration "Stringpool_sort_info *sort_info2" type_identifier (pointer_declarator "*sort_info2" * identifier)) ))) (compound_statement "{\n  ushort *puVar1;\n  ushort *puVar2;\n  __node_type *p_Var3;\n  __node_type *p_Var4;\n  ulong uVar5;\n  ulong uVar6;\n  ulong uVar7;\n  ulong uVar8;\n  ushort uVar9;\n  ushort uVar10;\n  \n  p_Var3 = (sort_info1->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>,_true>\n           )._M_cur;\n  p_Var4 = (sort_info2->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>,_true>\n           )._M_cur;\n  uVar5 = *(ulong *)((long)&(p_Var3->\n                            super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                            )._M_storage._M_storage + 8);\n  uVar6 = *(ulong *)((long)&(p_Var4->\n                            super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                            )._M_storage._M_storage + 8);\n  uVar7 = uVar6;\n  if (uVar5 <= uVar6) {\n    uVar7 = uVar5;\n  }\n  puVar1 = (ushort *)\n           ((long)(p_Var3->\n                  super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                  )._M_storage._M_storage.__align + -2 + uVar5 * 2);\n  puVar2 = (ushort *)\n           ((long)(p_Var4->\n                  super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                  )._M_storage._M_storage.__align + -2 + uVar6 * 2);\n  if (uVar7 == 0) {\nLAB_002d85b3:\n    return uVar6 < uVar5;\n  }\n  uVar9 = *puVar1;\n  uVar10 = *puVar2;\n  uVar8 = uVar7;\n  if (uVar9 == uVar10) {\n    do {\n      uVar8 = uVar8 - 1;\n      if (uVar8 == 0) goto LAB_002d85b3;\n      uVar9 = puVar1[uVar8 - uVar7];\n      uVar10 = puVar2[uVar8 - uVar7];\n    } while (uVar9 == uVar10);\n  }\n  return uVar10 < uVar9;\n}" { (declaration "ushort *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "ushort *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "__node_type *p_Var3;" type_identifier (pointer_declarator "*p_Var3" * identifier) ;) (declaration "__node_type *p_Var4;" type_identifier (pointer_declarator "*p_Var4" * identifier) ;) (declaration "ulong uVar5;" type_identifier identifier ;) (declaration "ulong uVar6;" type_identifier identifier ;) (declaration "ulong uVar7;" type_identifier identifier ;) (declaration "ulong uVar8;" type_identifier identifier ;) (declaration "ushort uVar9;" type_identifier identifier ;) (declaration "ushort uVar10;" type_identifier identifier ;) (expression_statement "p_Var3 = (sort_info1->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>,_true>\n           )._M_cur;" (assignment_expression "p_Var3 = (sort_info1->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>,_true>\n           )._M_cur" identifier = (field_expression "(sort_info1->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>,_true>\n           )._M_cur" (parenthesized_expression "(sort_info1->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>,_true>\n           )" ( (comma_expression "sort_info1->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>,_true" (binary_expression "sort_info1->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey" (binary_expression "sort_info1->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<short_unsigned_int" (binary_expression "sort_info1->\n           super__Node_iterator_base<std::pair<const_gold" (binary_expression "sort_info1->\n           super__Node_iterator_base<std" (field_expression "sort_info1->\n           super__Node_iterator_base" identifier -> field_identifier) < identifier) (ERROR "::pair" : : identifier) < identifier) (ERROR "::Stringpool_template" : : identifier) < identifier) > (ERROR "::" : :) identifier) , (binary_expression "_long_unsigned_int>,_true" identifier > (ERROR "," ,) identifier)) (ERROR ">" >) )) . field_identifier)) ;) (expression_statement "p_Var4 = (sort_info2->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>,_true>\n           )._M_cur;" (assignment_expression "p_Var4 = (sort_info2->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>,_true>\n           )._M_cur" identifier = (field_expression "(sort_info2->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>,_true>\n           )._M_cur" (parenthesized_expression "(sort_info2->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>,_true>\n           )" ( (comma_expression "sort_info2->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>,_true" (binary_expression "sort_info2->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey" (binary_expression "sort_info2->\n           super__Node_iterator_base<std::pair<const_gold::Stringpool_template<short_unsigned_int" (binary_expression "sort_info2->\n           super__Node_iterator_base<std::pair<const_gold" (binary_expression "sort_info2->\n           super__Node_iterator_base<std" (field_expression "sort_info2->\n           super__Node_iterator_base" identifier -> field_identifier) < identifier) (ERROR "::pair" : : identifier) < identifier) (ERROR "::Stringpool_template" : : identifier) < identifier) > (ERROR "::" : :) identifier) , (binary_expression "_long_unsigned_int>,_true" identifier > (ERROR "," ,) identifier)) (ERROR ">" >) )) . field_identifier)) ;) (expression_statement "uVar5 = *(ulong *)((long)&(p_Var3->\n                            super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                            )._M_storage._M_storage + 8);" (assignment_expression "uVar5 = *(ulong *)((long)&(p_Var3->\n                            super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                            )._M_storage._M_storage + 8)" identifier = (pointer_expression "*(ulong *)((long)&(p_Var3->\n                            super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                            )._M_storage._M_storage + 8)" * (cast_expression "(ulong *)((long)&(p_Var3->\n                            super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                            )._M_storage._M_storage + 8)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&(p_Var3->\n                            super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                            )._M_storage._M_storage + 8)" ( (binary_expression "(long)&(p_Var3->\n                            super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                            )._M_storage._M_storage + 8" (cast_expression "(long)&(p_Var3->\n                            super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                            )._M_storage._M_storage" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&(p_Var3->\n                            super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                            )._M_storage._M_storage" & (field_expression "(p_Var3->\n                            super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                            )._M_storage._M_storage" (field_expression "(p_Var3->\n                            super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                            )._M_storage" (parenthesized_expression "(p_Var3->\n                            super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                            )" ( (comma_expression "p_Var3->\n                            super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_" (binary_expression "p_Var3->\n                            super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey" (binary_expression "p_Var3->\n                            super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int" (binary_expression "p_Var3->\n                            super__Hash_node_value_base<std::pair<const_gold" (binary_expression "p_Var3->\n                            super__Hash_node_value_base<std" (field_expression "p_Var3->\n                            super__Hash_node_value_base" identifier -> field_identifier) < identifier) (ERROR "::pair" : : identifier) < identifier) (ERROR "::Stringpool_template" : : identifier) < identifier) > (ERROR "::" : :) identifier) , (binary_expression "_long_unsigned_int>_" identifier > identifier)) (ERROR ">" >) )) . field_identifier) . field_identifier))) + number_literal) ))))) ;) (expression_statement "uVar6 = *(ulong *)((long)&(p_Var4->\n                            super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                            )._M_storage._M_storage + 8);" (assignment_expression "uVar6 = *(ulong *)((long)&(p_Var4->\n                            super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                            )._M_storage._M_storage + 8)" identifier = (pointer_expression "*(ulong *)((long)&(p_Var4->\n                            super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                            )._M_storage._M_storage + 8)" * (cast_expression "(ulong *)((long)&(p_Var4->\n                            super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                            )._M_storage._M_storage + 8)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&(p_Var4->\n                            super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                            )._M_storage._M_storage + 8)" ( (binary_expression "(long)&(p_Var4->\n                            super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                            )._M_storage._M_storage + 8" (cast_expression "(long)&(p_Var4->\n                            super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                            )._M_storage._M_storage" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&(p_Var4->\n                            super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                            )._M_storage._M_storage" & (field_expression "(p_Var4->\n                            super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                            )._M_storage._M_storage" (field_expression "(p_Var4->\n                            super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                            )._M_storage" (parenthesized_expression "(p_Var4->\n                            super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                            )" ( (comma_expression "p_Var4->\n                            super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_" (binary_expression "p_Var4->\n                            super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey" (binary_expression "p_Var4->\n                            super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int" (binary_expression "p_Var4->\n                            super__Hash_node_value_base<std::pair<const_gold" (binary_expression "p_Var4->\n                            super__Hash_node_value_base<std" (field_expression "p_Var4->\n                            super__Hash_node_value_base" identifier -> field_identifier) < identifier) (ERROR "::pair" : : identifier) < identifier) (ERROR "::Stringpool_template" : : identifier) < identifier) > (ERROR "::" : :) identifier) , (binary_expression "_long_unsigned_int>_" identifier > identifier)) (ERROR ">" >) )) . field_identifier) . field_identifier))) + number_literal) ))))) ;) (expression_statement "uVar7 = uVar6;" (assignment_expression "uVar7 = uVar6" identifier = identifier) ;) (if_statement "if (uVar5 <= uVar6) {\n    uVar7 = uVar5;\n  }" if (parenthesized_expression "(uVar5 <= uVar6)" ( (binary_expression "uVar5 <= uVar6" identifier <= identifier) )) (compound_statement "{\n    uVar7 = uVar5;\n  }" { (expression_statement "uVar7 = uVar5;" (assignment_expression "uVar7 = uVar5" identifier = identifier) ;) })) (expression_statement "puVar1 = (ushort *)\n           ((long)(p_Var3->\n                  super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                  )._M_storage._M_storage.__align + -2 + uVar5 * 2);" (assignment_expression "puVar1 = (ushort *)\n           ((long)(p_Var3->\n                  super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                  )._M_storage._M_storage.__align + -2 + uVar5 * 2)" identifier = (cast_expression "(ushort *)\n           ((long)(p_Var3->\n                  super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                  )._M_storage._M_storage.__align + -2 + uVar5 * 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)(p_Var3->\n                  super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                  )._M_storage._M_storage.__align + -2 + uVar5 * 2)" ( (binary_expression "(long)(p_Var3->\n                  super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                  )._M_storage._M_storage.__align + -2 + uVar5 * 2" (binary_expression "(long)(p_Var3->\n                  super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                  )._M_storage._M_storage.__align + -2" (cast_expression "(long)(p_Var3->\n                  super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                  )._M_storage._M_storage.__align" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "(p_Var3->\n                  super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                  )._M_storage._M_storage.__align" (field_expression "(p_Var3->\n                  super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                  )._M_storage._M_storage" (field_expression "(p_Var3->\n                  super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                  )._M_storage" (parenthesized_expression "(p_Var3->\n                  super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                  )" ( (comma_expression "p_Var3->\n                  super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_" (binary_expression "p_Var3->\n                  super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey" (binary_expression "p_Var3->\n                  super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int" (binary_expression "p_Var3->\n                  super__Hash_node_value_base<std::pair<const_gold" (binary_expression "p_Var3->\n                  super__Hash_node_value_base<std" (field_expression "p_Var3->\n                  super__Hash_node_value_base" identifier -> field_identifier) < identifier) (ERROR "::pair" : : identifier) < identifier) (ERROR "::Stringpool_template" : : identifier) < identifier) > (ERROR "::" : :) identifier) , (binary_expression "_long_unsigned_int>_" identifier > identifier)) (ERROR ">" >) )) . field_identifier) . field_identifier) . field_identifier)) + number_literal) + (binary_expression "uVar5 * 2" identifier * number_literal)) )))) ;) (expression_statement "puVar2 = (ushort *)\n           ((long)(p_Var4->\n                  super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                  )._M_storage._M_storage.__align + -2 + uVar6 * 2);" (assignment_expression "puVar2 = (ushort *)\n           ((long)(p_Var4->\n                  super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                  )._M_storage._M_storage.__align + -2 + uVar6 * 2)" identifier = (cast_expression "(ushort *)\n           ((long)(p_Var4->\n                  super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                  )._M_storage._M_storage.__align + -2 + uVar6 * 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)(p_Var4->\n                  super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                  )._M_storage._M_storage.__align + -2 + uVar6 * 2)" ( (binary_expression "(long)(p_Var4->\n                  super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                  )._M_storage._M_storage.__align + -2 + uVar6 * 2" (binary_expression "(long)(p_Var4->\n                  super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                  )._M_storage._M_storage.__align + -2" (cast_expression "(long)(p_Var4->\n                  super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                  )._M_storage._M_storage.__align" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "(p_Var4->\n                  super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                  )._M_storage._M_storage.__align" (field_expression "(p_Var4->\n                  super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                  )._M_storage._M_storage" (field_expression "(p_Var4->\n                  super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                  )._M_storage" (parenthesized_expression "(p_Var4->\n                  super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_>\n                  )" ( (comma_expression "p_Var4->\n                  super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey,_long_unsigned_int>_" (binary_expression "p_Var4->\n                  super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int>::Hashkey" (binary_expression "p_Var4->\n                  super__Hash_node_value_base<std::pair<const_gold::Stringpool_template<short_unsigned_int" (binary_expression "p_Var4->\n                  super__Hash_node_value_base<std::pair<const_gold" (binary_expression "p_Var4->\n                  super__Hash_node_value_base<std" (field_expression "p_Var4->\n                  super__Hash_node_value_base" identifier -> field_identifier) < identifier) (ERROR "::pair" : : identifier) < identifier) (ERROR "::Stringpool_template" : : identifier) < identifier) > (ERROR "::" : :) identifier) , (binary_expression "_long_unsigned_int>_" identifier > identifier)) (ERROR ">" >) )) . field_identifier) . field_identifier) . field_identifier)) + number_literal) + (binary_expression "uVar6 * 2" identifier * number_literal)) )))) ;) (if_statement "if (uVar7 == 0) {\nLAB_002d85b3:\n    return uVar6 < uVar5;\n  }" if (parenthesized_expression "(uVar7 == 0)" ( (binary_expression "uVar7 == 0" identifier == number_literal) )) (compound_statement "{\nLAB_002d85b3:\n    return uVar6 < uVar5;\n  }" { (labeled_statement "LAB_002d85b3:\n    return uVar6 < uVar5;" statement_identifier : (return_statement "return uVar6 < uVar5;" return (binary_expression "uVar6 < uVar5" identifier < identifier) ;)) })) (expression_statement "uVar9 = *puVar1;" (assignment_expression "uVar9 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) (expression_statement "uVar10 = *puVar2;" (assignment_expression "uVar10 = *puVar2" identifier = (pointer_expression "*puVar2" * identifier)) ;) (expression_statement "uVar8 = uVar7;" (assignment_expression "uVar8 = uVar7" identifier = identifier) ;) (if_statement "if (uVar9 == uVar10) {\n    do {\n      uVar8 = uVar8 - 1;\n      if (uVar8 == 0) goto LAB_002d85b3;\n      uVar9 = puVar1[uVar8 - uVar7];\n      uVar10 = puVar2[uVar8 - uVar7];\n    } while (uVar9 == uVar10);\n  }" if (parenthesized_expression "(uVar9 == uVar10)" ( (binary_expression "uVar9 == uVar10" identifier == identifier) )) (compound_statement "{\n    do {\n      uVar8 = uVar8 - 1;\n      if (uVar8 == 0) goto LAB_002d85b3;\n      uVar9 = puVar1[uVar8 - uVar7];\n      uVar10 = puVar2[uVar8 - uVar7];\n    } while (uVar9 == uVar10);\n  }" { (do_statement "do {\n      uVar8 = uVar8 - 1;\n      if (uVar8 == 0) goto LAB_002d85b3;\n      uVar9 = puVar1[uVar8 - uVar7];\n      uVar10 = puVar2[uVar8 - uVar7];\n    } while (uVar9 == uVar10);" do (compound_statement "{\n      uVar8 = uVar8 - 1;\n      if (uVar8 == 0) goto LAB_002d85b3;\n      uVar9 = puVar1[uVar8 - uVar7];\n      uVar10 = puVar2[uVar8 - uVar7];\n    }" { (expression_statement "uVar8 = uVar8 - 1;" (assignment_expression "uVar8 = uVar8 - 1" identifier = (binary_expression "uVar8 - 1" identifier - number_literal)) ;) (if_statement "if (uVar8 == 0) goto LAB_002d85b3;" if (parenthesized_expression "(uVar8 == 0)" ( (binary_expression "uVar8 == 0" identifier == number_literal) )) (goto_statement "goto LAB_002d85b3;" goto statement_identifier ;)) (expression_statement "uVar9 = puVar1[uVar8 - uVar7];" (assignment_expression "uVar9 = puVar1[uVar8 - uVar7]" identifier = (subscript_expression "puVar1[uVar8 - uVar7]" identifier [ (binary_expression "uVar8 - uVar7" identifier - identifier) ])) ;) (expression_statement "uVar10 = puVar2[uVar8 - uVar7];" (assignment_expression "uVar10 = puVar2[uVar8 - uVar7]" identifier = (subscript_expression "puVar2[uVar8 - uVar7]" identifier [ (binary_expression "uVar8 - uVar7" identifier - identifier) ])) ;) }) while (parenthesized_expression "(uVar9 == uVar10)" ( (binary_expression "uVar9 == uVar10" identifier == identifier) )) ;) })) (return_statement "return uVar10 < uVar9;" return (binary_expression "uVar10 < uVar9" identifier < identifier) ;) })))
(translation_unit "undefined8 FUN_002d8550(undefined8 param_1,long *param_2,long *param_3)\n\n{\n  ushort *puVar1;\n  ushort *puVar2;\n  ulong uVar3;\n  ulong uVar4;\n  ulong uVar5;\n  ulong uVar6;\n  ushort uVar7;\n  ushort uVar8;\n  \n  uVar3 = *(ulong *)(*param_2 + 0x10);\n  uVar4 = *(ulong *)(*param_3 + 0x10);\n  uVar5 = uVar4;\n  if (uVar3 <= uVar4) {\n    uVar5 = uVar3;\n  }\n  puVar1 = (ushort *)(*(long *)(*param_2 + 8) + -2 + uVar3 * 2);\n  puVar2 = (ushort *)(*(long *)(*param_3 + 8) + -2 + uVar4 * 2);\n  uVar6 = uVar5;\n  if (uVar5 == 0) {\nLAB_002d85b3:\n    return CONCAT71((int7)(uVar6 >> 8),uVar4 < uVar3);\n  }\n  uVar7 = *puVar1;\n  uVar8 = *puVar2;\n  if (uVar7 == uVar8) {\n    do {\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_002d85b3;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    } while (uVar7 == uVar8);\n  }\n  return CONCAT71((int7)(uVar6 >> 8),uVar8 < uVar7);\n}\n\n" (function_definition "undefined8 FUN_002d8550(undefined8 param_1,long *param_2,long *param_3)\n\n{\n  ushort *puVar1;\n  ushort *puVar2;\n  ulong uVar3;\n  ulong uVar4;\n  ulong uVar5;\n  ulong uVar6;\n  ushort uVar7;\n  ushort uVar8;\n  \n  uVar3 = *(ulong *)(*param_2 + 0x10);\n  uVar4 = *(ulong *)(*param_3 + 0x10);\n  uVar5 = uVar4;\n  if (uVar3 <= uVar4) {\n    uVar5 = uVar3;\n  }\n  puVar1 = (ushort *)(*(long *)(*param_2 + 8) + -2 + uVar3 * 2);\n  puVar2 = (ushort *)(*(long *)(*param_3 + 8) + -2 + uVar4 * 2);\n  uVar6 = uVar5;\n  if (uVar5 == 0) {\nLAB_002d85b3:\n    return CONCAT71((int7)(uVar6 >> 8),uVar4 < uVar3);\n  }\n  uVar7 = *puVar1;\n  uVar8 = *puVar2;\n  if (uVar7 == uVar8) {\n    do {\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_002d85b3;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    } while (uVar7 == uVar8);\n  }\n  return CONCAT71((int7)(uVar6 >> 8),uVar8 < uVar7);\n}" type_identifier (function_declarator "FUN_002d8550(undefined8 param_1,long *param_2,long *param_3)" identifier (parameter_list "(undefined8 param_1,long *param_2,long *param_3)" ( (parameter_declaration "undefined8 param_1" type_identifier identifier) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "long *param_3" (sized_type_specifier "long" long) (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  ushort *puVar1;\n  ushort *puVar2;\n  ulong uVar3;\n  ulong uVar4;\n  ulong uVar5;\n  ulong uVar6;\n  ushort uVar7;\n  ushort uVar8;\n  \n  uVar3 = *(ulong *)(*param_2 + 0x10);\n  uVar4 = *(ulong *)(*param_3 + 0x10);\n  uVar5 = uVar4;\n  if (uVar3 <= uVar4) {\n    uVar5 = uVar3;\n  }\n  puVar1 = (ushort *)(*(long *)(*param_2 + 8) + -2 + uVar3 * 2);\n  puVar2 = (ushort *)(*(long *)(*param_3 + 8) + -2 + uVar4 * 2);\n  uVar6 = uVar5;\n  if (uVar5 == 0) {\nLAB_002d85b3:\n    return CONCAT71((int7)(uVar6 >> 8),uVar4 < uVar3);\n  }\n  uVar7 = *puVar1;\n  uVar8 = *puVar2;\n  if (uVar7 == uVar8) {\n    do {\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_002d85b3;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    } while (uVar7 == uVar8);\n  }\n  return CONCAT71((int7)(uVar6 >> 8),uVar8 < uVar7);\n}" { (declaration "ushort *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "ushort *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "ulong uVar3;" type_identifier identifier ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "ulong uVar5;" type_identifier identifier ;) (declaration "ulong uVar6;" type_identifier identifier ;) (declaration "ushort uVar7;" type_identifier identifier ;) (declaration "ushort uVar8;" type_identifier identifier ;) (expression_statement "uVar3 = *(ulong *)(*param_2 + 0x10);" (assignment_expression "uVar3 = *(ulong *)(*param_2 + 0x10)" identifier = (pointer_expression "*(ulong *)(*param_2 + 0x10)" * (cast_expression "(ulong *)(*param_2 + 0x10)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_2 + 0x10)" ( (binary_expression "*param_2 + 0x10" (pointer_expression "*param_2" * identifier) + number_literal) ))))) ;) (expression_statement "uVar4 = *(ulong *)(*param_3 + 0x10);" (assignment_expression "uVar4 = *(ulong *)(*param_3 + 0x10)" identifier = (pointer_expression "*(ulong *)(*param_3 + 0x10)" * (cast_expression "(ulong *)(*param_3 + 0x10)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_3 + 0x10)" ( (binary_expression "*param_3 + 0x10" (pointer_expression "*param_3" * identifier) + number_literal) ))))) ;) (expression_statement "uVar5 = uVar4;" (assignment_expression "uVar5 = uVar4" identifier = identifier) ;) (if_statement "if (uVar3 <= uVar4) {\n    uVar5 = uVar3;\n  }" if (parenthesized_expression "(uVar3 <= uVar4)" ( (binary_expression "uVar3 <= uVar4" identifier <= identifier) )) (compound_statement "{\n    uVar5 = uVar3;\n  }" { (expression_statement "uVar5 = uVar3;" (assignment_expression "uVar5 = uVar3" identifier = identifier) ;) })) (expression_statement "puVar1 = (ushort *)(*(long *)(*param_2 + 8) + -2 + uVar3 * 2);" (assignment_expression "puVar1 = (ushort *)(*(long *)(*param_2 + 8) + -2 + uVar3 * 2)" identifier = (cast_expression "(ushort *)(*(long *)(*param_2 + 8) + -2 + uVar3 * 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(*param_2 + 8) + -2 + uVar3 * 2)" ( (binary_expression "*(long *)(*param_2 + 8) + -2 + uVar3 * 2" (binary_expression "*(long *)(*param_2 + 8) + -2" (pointer_expression "*(long *)(*param_2 + 8)" * (cast_expression "(long *)(*param_2 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_2 + 8)" ( (binary_expression "*param_2 + 8" (pointer_expression "*param_2" * identifier) + number_literal) )))) + number_literal) + (binary_expression "uVar3 * 2" identifier * number_literal)) )))) ;) (expression_statement "puVar2 = (ushort *)(*(long *)(*param_3 + 8) + -2 + uVar4 * 2);" (assignment_expression "puVar2 = (ushort *)(*(long *)(*param_3 + 8) + -2 + uVar4 * 2)" identifier = (cast_expression "(ushort *)(*(long *)(*param_3 + 8) + -2 + uVar4 * 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(*param_3 + 8) + -2 + uVar4 * 2)" ( (binary_expression "*(long *)(*param_3 + 8) + -2 + uVar4 * 2" (binary_expression "*(long *)(*param_3 + 8) + -2" (pointer_expression "*(long *)(*param_3 + 8)" * (cast_expression "(long *)(*param_3 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_3 + 8)" ( (binary_expression "*param_3 + 8" (pointer_expression "*param_3" * identifier) + number_literal) )))) + number_literal) + (binary_expression "uVar4 * 2" identifier * number_literal)) )))) ;) (expression_statement "uVar6 = uVar5;" (assignment_expression "uVar6 = uVar5" identifier = identifier) ;) (if_statement "if (uVar5 == 0) {\nLAB_002d85b3:\n    return CONCAT71((int7)(uVar6 >> 8),uVar4 < uVar3);\n  }" if (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) (compound_statement "{\nLAB_002d85b3:\n    return CONCAT71((int7)(uVar6 >> 8),uVar4 < uVar3);\n  }" { (labeled_statement "LAB_002d85b3:\n    return CONCAT71((int7)(uVar6 >> 8),uVar4 < uVar3);" statement_identifier : (return_statement "return CONCAT71((int7)(uVar6 >> 8),uVar4 < uVar3);" return (call_expression "CONCAT71((int7)(uVar6 >> 8),uVar4 < uVar3)" identifier (argument_list "((int7)(uVar6 >> 8),uVar4 < uVar3)" ( (call_expression "(int7)(uVar6 >> 8)" (parenthesized_expression "(int7)" ( identifier )) (argument_list "(uVar6 >> 8)" ( (binary_expression "uVar6 >> 8" identifier >> number_literal) ))) , (binary_expression "uVar4 < uVar3" identifier < identifier) ))) ;)) })) (expression_statement "uVar7 = *puVar1;" (assignment_expression "uVar7 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) (expression_statement "uVar8 = *puVar2;" (assignment_expression "uVar8 = *puVar2" identifier = (pointer_expression "*puVar2" * identifier)) ;) (if_statement "if (uVar7 == uVar8) {\n    do {\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_002d85b3;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    } while (uVar7 == uVar8);\n  }" if (parenthesized_expression "(uVar7 == uVar8)" ( (binary_expression "uVar7 == uVar8" identifier == identifier) )) (compound_statement "{\n    do {\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_002d85b3;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    } while (uVar7 == uVar8);\n  }" { (do_statement "do {\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_002d85b3;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    } while (uVar7 == uVar8);" do (compound_statement "{\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_002d85b3;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    }" { (expression_statement "uVar6 = uVar6 - 1;" (assignment_expression "uVar6 = uVar6 - 1" identifier = (binary_expression "uVar6 - 1" identifier - number_literal)) ;) (if_statement "if (uVar6 == 0) goto LAB_002d85b3;" if (parenthesized_expression "(uVar6 == 0)" ( (binary_expression "uVar6 == 0" identifier == number_literal) )) (goto_statement "goto LAB_002d85b3;" goto statement_identifier ;)) (expression_statement "uVar7 = puVar1[uVar6 - uVar5];" (assignment_expression "uVar7 = puVar1[uVar6 - uVar5]" identifier = (subscript_expression "puVar1[uVar6 - uVar5]" identifier [ (binary_expression "uVar6 - uVar5" identifier - identifier) ])) ;) (expression_statement "uVar8 = puVar2[uVar6 - uVar5];" (assignment_expression "uVar8 = puVar2[uVar6 - uVar5]" identifier = (subscript_expression "puVar2[uVar6 - uVar5]" identifier [ (binary_expression "uVar6 - uVar5" identifier - identifier) ])) ;) }) while (parenthesized_expression "(uVar7 == uVar8)" ( (binary_expression "uVar7 == uVar8" identifier == identifier) )) ;) })) (return_statement "return CONCAT71((int7)(uVar6 >> 8),uVar8 < uVar7);" return (call_expression "CONCAT71((int7)(uVar6 >> 8),uVar8 < uVar7)" identifier (argument_list "((int7)(uVar6 >> 8),uVar8 < uVar7)" ( (call_expression "(int7)(uVar6 >> 8)" (parenthesized_expression "(int7)" ( identifier )) (argument_list "(uVar6 >> 8)" ( (binary_expression "uVar6 >> 8" identifier >> number_literal) ))) , (binary_expression "uVar8 < uVar7" identifier < identifier) ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) + LIT) + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) + LIT) + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (labeled_statement statement_identifier : (return_statement return (call_expression IDENT (argument_list ( (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT >> LIT) ))) , (binary_expression IDENT < IDENT) ))) ;)) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ (binary_expression IDENT - IDENT) ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ (binary_expression IDENT - IDENT) ])) ;) }) while (parenthesized_expression ( (binary_expression IDENT == IDENT) )) ;) })) (return_statement return (call_expression IDENT (argument_list ( (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT >> LIT) ))) , (binary_expression IDENT < IDENT) ))) ;) })))
(function_definition "undefined8 FUN_002d8550(undefined8 param_1,long *param_2,long *param_3)\n\n{\n  ushort *puVar1;\n  ushort *puVar2;\n  ulong uVar3;\n  ulong uVar4;\n  ulong uVar5;\n  ulong uVar6;\n  ushort uVar7;\n  ushort uVar8;\n  \n  uVar3 = *(ulong *)(*param_2 + 0x10);\n  uVar4 = *(ulong *)(*param_3 + 0x10);\n  uVar5 = uVar4;\n  if (uVar3 <= uVar4) {\n    uVar5 = uVar3;\n  }\n  puVar1 = (ushort *)(*(long *)(*param_2 + 8) + -2 + uVar3 * 2);\n  puVar2 = (ushort *)(*(long *)(*param_3 + 8) + -2 + uVar4 * 2);\n  uVar6 = uVar5;\n  if (uVar5 == 0) {\nLAB_002d85b3:\n    return CONCAT71((int7)(uVar6 >> 8),uVar4 < uVar3);\n  }\n  uVar7 = *puVar1;\n  uVar8 = *puVar2;\n  if (uVar7 == uVar8) {\n    do {\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_002d85b3;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    } while (uVar7 == uVar8);\n  }\n  return CONCAT71((int7)(uVar6 >> 8),uVar8 < uVar7);\n}" (type_identifier "undefined8") (function_declarator "FUN_002d8550(undefined8 param_1,long *param_2,long *param_3)" (identifier "FUN_002d8550") (parameter_list "(undefined8 param_1,long *param_2,long *param_3)" (( "(") (parameter_declaration "undefined8 param_1" (type_identifier "undefined8") (identifier "param_1")) (, ",") (parameter_declaration "long *param_2" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "long *param_3" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) () ")"))) (compound_statement "{\n  ushort *puVar1;\n  ushort *puVar2;\n  ulong uVar3;\n  ulong uVar4;\n  ulong uVar5;\n  ulong uVar6;\n  ushort uVar7;\n  ushort uVar8;\n  \n  uVar3 = *(ulong *)(*param_2 + 0x10);\n  uVar4 = *(ulong *)(*param_3 + 0x10);\n  uVar5 = uVar4;\n  if (uVar3 <= uVar4) {\n    uVar5 = uVar3;\n  }\n  puVar1 = (ushort *)(*(long *)(*param_2 + 8) + -2 + uVar3 * 2);\n  puVar2 = (ushort *)(*(long *)(*param_3 + 8) + -2 + uVar4 * 2);\n  uVar6 = uVar5;\n  if (uVar5 == 0) {\nLAB_002d85b3:\n    return CONCAT71((int7)(uVar6 >> 8),uVar4 < uVar3);\n  }\n  uVar7 = *puVar1;\n  uVar8 = *puVar2;\n  if (uVar7 == uVar8) {\n    do {\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_002d85b3;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    } while (uVar7 == uVar8);\n  }\n  return CONCAT71((int7)(uVar6 >> 8),uVar8 < uVar7);\n}" ({ "{") (declaration "ushort *puVar1;" (type_identifier "ushort") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "ushort *puVar2;" (type_identifier "ushort") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "ulong uVar3;" (type_identifier "ulong") (identifier "uVar3") (; ";")) (declaration "ulong uVar4;" (type_identifier "ulong") (identifier "uVar4") (; ";")) (declaration "ulong uVar5;" (type_identifier "ulong") (identifier "uVar5") (; ";")) (declaration "ulong uVar6;" (type_identifier "ulong") (identifier "uVar6") (; ";")) (declaration "ushort uVar7;" (type_identifier "ushort") (identifier "uVar7") (; ";")) (declaration "ushort uVar8;" (type_identifier "ushort") (identifier "uVar8") (; ";")) (expression_statement "uVar3 = *(ulong *)(*param_2 + 0x10);" (assignment_expression "uVar3 = *(ulong *)(*param_2 + 0x10)" (identifier "uVar3") (= "=") (pointer_expression "*(ulong *)(*param_2 + 0x10)" (* "*") (cast_expression "(ulong *)(*param_2 + 0x10)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_2 + 0x10)" (( "(") (binary_expression "*param_2 + 0x10" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (expression_statement "uVar4 = *(ulong *)(*param_3 + 0x10);" (assignment_expression "uVar4 = *(ulong *)(*param_3 + 0x10)" (identifier "uVar4") (= "=") (pointer_expression "*(ulong *)(*param_3 + 0x10)" (* "*") (cast_expression "(ulong *)(*param_3 + 0x10)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_3 + 0x10)" (( "(") (binary_expression "*param_3 + 0x10" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (expression_statement "uVar5 = uVar4;" (assignment_expression "uVar5 = uVar4" (identifier "uVar5") (= "=") (identifier "uVar4")) (; ";")) (if_statement "if (uVar3 <= uVar4) {\n    uVar5 = uVar3;\n  }" (if "if") (parenthesized_expression "(uVar3 <= uVar4)" (( "(") (binary_expression "uVar3 <= uVar4" (identifier "uVar3") (<= "<=") (identifier "uVar4")) () ")")) (compound_statement "{\n    uVar5 = uVar3;\n  }" ({ "{") (expression_statement "uVar5 = uVar3;" (assignment_expression "uVar5 = uVar3" (identifier "uVar5") (= "=") (identifier "uVar3")) (; ";")) (} "}"))) (expression_statement "puVar1 = (ushort *)(*(long *)(*param_2 + 8) + -2 + uVar3 * 2);" (assignment_expression "puVar1 = (ushort *)(*(long *)(*param_2 + 8) + -2 + uVar3 * 2)" (identifier "puVar1") (= "=") (cast_expression "(ushort *)(*(long *)(*param_2 + 8) + -2 + uVar3 * 2)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(*param_2 + 8) + -2 + uVar3 * 2)" (( "(") (binary_expression "*(long *)(*param_2 + 8) + -2 + uVar3 * 2" (binary_expression "*(long *)(*param_2 + 8) + -2" (pointer_expression "*(long *)(*param_2 + 8)" (* "*") (cast_expression "(long *)(*param_2 + 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_2 + 8)" (( "(") (binary_expression "*param_2 + 8" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (+ "+") (number_literal "8")) () ")")))) (+ "+") (number_literal "-2")) (+ "+") (binary_expression "uVar3 * 2" (identifier "uVar3") (* "*") (number_literal "2"))) () ")")))) (; ";")) (expression_statement "puVar2 = (ushort *)(*(long *)(*param_3 + 8) + -2 + uVar4 * 2);" (assignment_expression "puVar2 = (ushort *)(*(long *)(*param_3 + 8) + -2 + uVar4 * 2)" (identifier "puVar2") (= "=") (cast_expression "(ushort *)(*(long *)(*param_3 + 8) + -2 + uVar4 * 2)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(*param_3 + 8) + -2 + uVar4 * 2)" (( "(") (binary_expression "*(long *)(*param_3 + 8) + -2 + uVar4 * 2" (binary_expression "*(long *)(*param_3 + 8) + -2" (pointer_expression "*(long *)(*param_3 + 8)" (* "*") (cast_expression "(long *)(*param_3 + 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_3 + 8)" (( "(") (binary_expression "*param_3 + 8" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (+ "+") (number_literal "8")) () ")")))) (+ "+") (number_literal "-2")) (+ "+") (binary_expression "uVar4 * 2" (identifier "uVar4") (* "*") (number_literal "2"))) () ")")))) (; ";")) (expression_statement "uVar6 = uVar5;" (assignment_expression "uVar6 = uVar5" (identifier "uVar6") (= "=") (identifier "uVar5")) (; ";")) (if_statement "if (uVar5 == 0) {\nLAB_002d85b3:\n    return CONCAT71((int7)(uVar6 >> 8),uVar4 < uVar3);\n  }" (if "if") (parenthesized_expression "(uVar5 == 0)" (( "(") (binary_expression "uVar5 == 0" (identifier "uVar5") (== "==") (number_literal "0")) () ")")) (compound_statement "{\nLAB_002d85b3:\n    return CONCAT71((int7)(uVar6 >> 8),uVar4 < uVar3);\n  }" ({ "{") (labeled_statement "LAB_002d85b3:\n    return CONCAT71((int7)(uVar6 >> 8),uVar4 < uVar3);" (statement_identifier "LAB_002d85b3") (: ":") (return_statement "return CONCAT71((int7)(uVar6 >> 8),uVar4 < uVar3);" (return "return") (call_expression "CONCAT71((int7)(uVar6 >> 8),uVar4 < uVar3)" (identifier "CONCAT71") (argument_list "((int7)(uVar6 >> 8),uVar4 < uVar3)" (( "(") (call_expression "(int7)(uVar6 >> 8)" (parenthesized_expression "(int7)" (( "(") (identifier "int7") () ")")) (argument_list "(uVar6 >> 8)" (( "(") (binary_expression "uVar6 >> 8" (identifier "uVar6") (>> ">>") (number_literal "8")) () ")"))) (, ",") (binary_expression "uVar4 < uVar3" (identifier "uVar4") (< "<") (identifier "uVar3")) () ")"))) (; ";"))) (} "}"))) (expression_statement "uVar7 = *puVar1;" (assignment_expression "uVar7 = *puVar1" (identifier "uVar7") (= "=") (pointer_expression "*puVar1" (* "*") (identifier "puVar1"))) (; ";")) (expression_statement "uVar8 = *puVar2;" (assignment_expression "uVar8 = *puVar2" (identifier "uVar8") (= "=") (pointer_expression "*puVar2" (* "*") (identifier "puVar2"))) (; ";")) (if_statement "if (uVar7 == uVar8) {\n    do {\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_002d85b3;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    } while (uVar7 == uVar8);\n  }" (if "if") (parenthesized_expression "(uVar7 == uVar8)" (( "(") (binary_expression "uVar7 == uVar8" (identifier "uVar7") (== "==") (identifier "uVar8")) () ")")) (compound_statement "{\n    do {\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_002d85b3;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    } while (uVar7 == uVar8);\n  }" ({ "{") (do_statement "do {\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_002d85b3;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    } while (uVar7 == uVar8);" (do "do") (compound_statement "{\n      uVar6 = uVar6 - 1;\n      if (uVar6 == 0) goto LAB_002d85b3;\n      uVar7 = puVar1[uVar6 - uVar5];\n      uVar8 = puVar2[uVar6 - uVar5];\n    }" ({ "{") (expression_statement "uVar6 = uVar6 - 1;" (assignment_expression "uVar6 = uVar6 - 1" (identifier "uVar6") (= "=") (binary_expression "uVar6 - 1" (identifier "uVar6") (- "-") (number_literal "1"))) (; ";")) (if_statement "if (uVar6 == 0) goto LAB_002d85b3;" (if "if") (parenthesized_expression "(uVar6 == 0)" (( "(") (binary_expression "uVar6 == 0" (identifier "uVar6") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_002d85b3;" (goto "goto") (statement_identifier "LAB_002d85b3") (; ";"))) (expression_statement "uVar7 = puVar1[uVar6 - uVar5];" (assignment_expression "uVar7 = puVar1[uVar6 - uVar5]" (identifier "uVar7") (= "=") (subscript_expression "puVar1[uVar6 - uVar5]" (identifier "puVar1") ([ "[") (binary_expression "uVar6 - uVar5" (identifier "uVar6") (- "-") (identifier "uVar5")) (] "]"))) (; ";")) (expression_statement "uVar8 = puVar2[uVar6 - uVar5];" (assignment_expression "uVar8 = puVar2[uVar6 - uVar5]" (identifier "uVar8") (= "=") (subscript_expression "puVar2[uVar6 - uVar5]" (identifier "puVar2") ([ "[") (binary_expression "uVar6 - uVar5" (identifier "uVar6") (- "-") (identifier "uVar5")) (] "]"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar7 == uVar8)" (( "(") (binary_expression "uVar7 == uVar8" (identifier "uVar7") (== "==") (identifier "uVar8")) () ")")) (; ";")) (} "}"))) (return_statement "return CONCAT71((int7)(uVar6 >> 8),uVar8 < uVar7);" (return "return") (call_expression "CONCAT71((int7)(uVar6 >> 8),uVar8 < uVar7)" (identifier "CONCAT71") (argument_list "((int7)(uVar6 >> 8),uVar8 < uVar7)" (( "(") (call_expression "(int7)(uVar6 >> 8)" (parenthesized_expression "(int7)" (( "(") (identifier "int7") () ")")) (argument_list "(uVar6 >> 8)" (( "(") (binary_expression "uVar6 >> 8" (identifier "uVar6") (>> ">>") (number_literal "8")) () ")"))) (, ",") (binary_expression "uVar8 < uVar7" (identifier "uVar8") (< "<") (identifier "uVar7")) () ")"))) (; ";")) (} "}")))

/* DWARF original prototype: bool operator()(Stringpool_sort_comparison * this, Stringpool_sort_info
   * sort_info1, Stringpool_sort_info * sort_info2) */

bool __thiscall
gold::Stringpool_template<var_3>::type_1::function_1()
          (type_1 *this,type_2 *sort_info1,
          type_2 *sort_info2)

{
  type_3 *puVar1;
  type_3 *puVar2;
  type_4 *p_Var3;
  type_4 *p_Var4;
  type_5 var_8;
  type_5 var_9;
  type_5 var_10;
  type_5 var_13;
  type_3 var_11;
  type_3 var_12;
  
  p_Var3 = (sort_info1->
           super__Node_iterator_base<var_1::pair<var_2::Stringpool_template<var_3>::var_4,var_5>,var_6>
           )._M_cur;
  p_Var4 = (sort_info2->
           super__Node_iterator_base<var_1::pair<var_2::Stringpool_template<var_3>::var_4,var_5>,var_6>
           )._M_cur;
  var_8 = *(type_5 *)((long)&(p_Var3->
                            super__Hash_node_value_base<var_1::pair<var_2::Stringpool_template<var_3>::var_4,var_5>var_7>
                            )._M_storage._M_storage + 8);
  var_9 = *(type_5 *)((long)&(p_Var4->
                            super__Hash_node_value_base<var_1::pair<var_2::Stringpool_template<var_3>::var_4,var_5>var_7>
                            )._M_storage._M_storage + 8);
  var_10 = var_9;
  if (var_8 <= var_9) {
    var_10 = var_8;
  }
  puVar1 = (type_3 *)
           ((long)(p_Var3->
                  super__Hash_node_value_base<var_1::pair<var_2::Stringpool_template<var_3>::var_4,var_5>var_7>
                  )._M_storage._M_storage.__align + -2 + var_8 * 2);
  puVar2 = (type_3 *)
           ((long)(p_Var4->
                  super__Hash_node_value_base<var_1::pair<var_2::Stringpool_template<var_3>::var_4,var_5>var_7>
                  )._M_storage._M_storage.__align + -2 + var_9 * 2);
  if (var_10 == 0) {
LAB_002d85b3:
    return var_9 < var_8;
  }
  var_11 = *puVar1;
  var_12 = *puVar2;
  var_13 = var_10;
  if (var_11 == var_12) {
    do {
      var_13 = var_13 - 1;
      if (var_13 == 0) goto LAB_002d85b3;
      var_11 = puVar1[var_13 - var_10];
      var_12 = puVar2[var_13 - var_10];
    } while (var_11 == var_12);
  }
  return var_12 < var_11;
}


(translation_unit (function_definition type: (type_identifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (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: (pointer_expression argument: (identifier)) right: (number_literal))))) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (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: (pointer_expression argument: (identifier)) right: (number_literal))))) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (return_statement (call_expression function: (identifier) arguments: (argument_list (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))) (binary_expression left: (identifier) right: (identifier)))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (binary_expression left: (identifier) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (binary_expression left: (identifier) right: (identifier)))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))))) (return_statement (call_expression function: (identifier) arguments: (argument_list (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))) (binary_expression left: (identifier) right: (identifier))))))))

undefined8 MASKED(undefined8 param_1,long *param_2,long *param_3)

{
  ushort *puVar1;
  ushort *puVar2;
  ulong uVar3;
  ulong uVar4;
  ulong uVar5;
  ulong uVar6;
  ushort uVar7;
  ushort uVar8;
  
  uVar3 = *(ulong *)(*param_2 + 0x10);
  uVar4 = *(ulong *)(*param_3 + 0x10);
  uVar5 = uVar4;
  if (uVar3 <= uVar4) {
    uVar5 = uVar3;
  }
  puVar1 = (ushort *)(*(long *)(*param_2 + 8) + -2 + uVar3 * 2);
  puVar2 = (ushort *)(*(long *)(*param_3 + 8) + -2 + uVar4 * 2);
  uVar6 = uVar5;
  if (uVar5 == 0) {
LAB_002d85b3:
    return CONCAT71((int7)(uVar6 >> 8),uVar4 < uVar3);
  }
  uVar7 = *puVar1;
  uVar8 = *puVar2;
  if (uVar7 == uVar8) {
    do {
      uVar6 = uVar6 - 1;
      if (uVar6 == 0) goto LAB_002d85b3;
      uVar7 = puVar1[uVar6 - uVar5];
      uVar8 = puVar2[uVar6 - uVar5];
    } while (uVar7 == uVar8);
  }
  return CONCAT71((int7)(uVar6 >> 8),uVar8 < uVar7);
}

