// File: CoinXu[P]reviser-compiler/src/compiler/javascript/javascript_expr.cpp
// Function: reviser::javascript::JavaScriptRightValue::Generate[abi:cxx11]()
string JavaScriptRightValue::Generate() {
    if (node->array_type) {
      switch (node->type) {
        case TYPE_ENUM: {
          vector<string> values;
          for (EnumValue* v : node->evs) {
            values.push_back(JavaScriptEnumValue(v).Generate());
          }
          return "[" + JavaScriptCommon::JoinVector(values, ", ") + "]";
        }

        case TYPE_STRUCT:
          return JavaScriptStructValue(node->sv).Generate();

        case TYPE_BOOL:
        case TYPE_FLOAT:
        case TYPE_DOUBLE:
        case TYPE_INT32:
        case TYPE_INT64:
        case TYPE_UINT32:
        case TYPE_UINT64: {
          vector<string> values;
          for (Token* t : node->dvs) {
            values.push_back(t->text);
          }
          return "[" + JavaScriptCommon::JoinVector(values, ", ") + "]";
        }

        case TYPE_STRING: {
          vector<string> values;
          for (Token* t : node->dvs) {
            values.push_back("\"" + t->text + "\"");
          }
          return "[" + JavaScriptCommon::JoinVector(values, ", ") + "]";
        }

        default:
          return "";
      }
    }

    switch (node->type) {
      case TYPE_ENUM:
        return JavaScriptEnumValue(node->ev).Generate();

      case TYPE_STRUCT:
        return JavaScriptStructValue(node->sv).Generate();

      case TYPE_BOOL:
      case TYPE_FLOAT:
      case TYPE_DOUBLE:
      case TYPE_INT32:
      case TYPE_INT64:
      case TYPE_UINT32:
      case TYPE_UINT64:
        return node->id->text;

      case TYPE_STRING:
        return "\"" + node->id->text + "\"";

      default:
        return "";
    }
  }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x390, %rsp            # imm = 0x390
movq %rdi, -0x328(%rbp)
movq %rdi, %rax
movq %rax, -0x320(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x318(%rbp)
movq 0x8(%rax), %rax
testb $0x1, 0x10(%rax)
je 0xec377
movq -0x318(%rbp), %rax
movq 0x8(%rax), %rax
movl (%rax), %eax
movq %rax, -0x330(%rbp)
subq $0xa, %rax
ja 0xec317
movq -0x330(%rbp), %rax
leaq 0x14ee7(%rip), %rcx     # 0x100a50
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq -0x28(%rbp), %rdi
callq 0xa0c50
movq -0x318(%rbp), %rax
movq 0x8(%rax), %rax
addq $0x30, %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rdi
callq 0xeca20
movq %rax, -0x38(%rbp)
movq -0x30(%rbp), %rdi
callq 0xeca50
movq %rax, -0x40(%rbp)
leaq -0x38(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0xeca80
testb $0x1, %al
jne 0xebbbe
jmp 0xebc63
leaq -0x38(%rbp), %rdi
callq 0xecac0
movq (%rax), %rax
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rsi
leaq -0x78(%rbp), %rdi
callq 0xec740
jmp 0xebbdd
leaq -0x68(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0xec590
jmp 0xebbec
leaq -0x28(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0xecae0
jmp 0xebbfb
leaq -0x68(%rbp), %rdi
callq 0x992c0
leaq -0x78(%rbp), %rdi
callq 0xec770
leaq -0x38(%rbp), %rdi
callq 0xecb10
jmp 0xebba8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0xebdc0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0xebc55
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x68(%rbp), %rdi
callq 0x992c0
leaq -0x78(%rbp), %rdi
callq 0xec770
jmp 0xebdc0
leaq -0xe0(%rbp), %rdi
leaq -0x28(%rbp), %rsi
callq 0xbd9b0
jmp 0xebc75
leaq -0x101(%rbp), %rdi
movq %rdi, -0x338(%rbp)
callq 0x99850
movq -0x338(%rbp), %rdx
leaq 0x14de6(%rip), %rsi     # 0x100a7c
leaq -0x100(%rbp), %rdi
callq 0x99640
jmp 0xebca4
leaq -0xc8(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
leaq -0x100(%rbp), %rdx
callq 0xecb30
jmp 0xebcc0
leaq 0x13844(%rip), %rsi     # 0xff50b
leaq -0xa8(%rbp), %rdi
leaq -0xc8(%rbp), %rdx
callq 0xa6e30
jmp 0xebcdc
movq -0x328(%rbp), %rdi
leaq 0x14d98(%rip), %rdx     # 0x100a82
leaq -0xa8(%rbp), %rsi
callq 0xa10c0
jmp 0xebcf8
leaq -0xa8(%rbp), %rdi
callq 0x992c0
leaq -0xc8(%rbp), %rdi
callq 0x992c0
leaq -0x100(%rbp), %rdi
callq 0x992c0
leaq -0x101(%rbp), %rdi
callq 0x994f0
leaq -0xe0(%rbp), %rdi
callq 0xa0c70
leaq -0x28(%rbp), %rdi
callq 0xa0c70
jmp 0xec575
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0xebda8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0xebd9c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0xebd90
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0xa8(%rbp), %rdi
callq 0x992c0
leaq -0xc8(%rbp), %rdi
callq 0x992c0
leaq -0x100(%rbp), %rdi
callq 0x992c0
leaq -0x101(%rbp), %rdi
callq 0x994f0
leaq -0xe0(%rbp), %rdi
callq 0xa0c70
leaq -0x28(%rbp), %rdi
callq 0xa0c70
jmp 0xec585
movq -0x318(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x48(%rax), %rsi
leaq -0x118(%rbp), %rdi
movq %rdi, -0x340(%rbp)
callq 0xec700
movq -0x328(%rbp), %rdi
movq -0x340(%rbp), %rsi
callq 0xec630
jmp 0xebe05
leaq -0x118(%rbp), %rdi
callq 0xec730
jmp 0xec575
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x118(%rbp), %rdi
callq 0xec730
jmp 0xec585
leaq -0x130(%rbp), %rdi
callq 0xa0c50
movq -0x318(%rbp), %rax
movq 0x8(%rax), %rax
addq $0x18, %rax
movq %rax, -0x138(%rbp)
movq -0x138(%rbp), %rdi
callq 0xeccb0
movq %rax, -0x140(%rbp)
movq -0x138(%rbp), %rdi
callq 0xecce0
movq %rax, -0x148(%rbp)
leaq -0x140(%rbp), %rdi
leaq -0x148(%rbp), %rsi
callq 0xecd10
testb $0x1, %al
jne 0xebe97
jmp 0xebeea
leaq -0x140(%rbp), %rdi
callq 0xecd50
movq (%rax), %rax
movq %rax, -0x150(%rbp)
movq -0x150(%rbp), %rsi
addq $0x8, %rsi
leaq -0x130(%rbp), %rdi
callq 0xa1220
jmp 0xebec6
jmp 0xebec8
leaq -0x140(%rbp), %rdi
callq 0xecd70
jmp 0xebe7e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0xec04d
leaq -0x1a8(%rbp), %rdi
leaq -0x130(%rbp), %rsi
callq 0xbd9b0
jmp 0xebeff
leaq -0x1c9(%rbp), %rdi
movq %rdi, -0x348(%rbp)
callq 0x99850
movq -0x348(%rbp), %rdx
leaq 0x14b5c(%rip), %rsi     # 0x100a7c
leaq -0x1c8(%rbp), %rdi
callq 0x99640
jmp 0xebf2e
leaq -0x190(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
leaq -0x1c8(%rbp), %rdx
callq 0xecb30
jmp 0xebf4a
leaq 0x135ba(%rip), %rsi     # 0xff50b
leaq -0x170(%rbp), %rdi
leaq -0x190(%rbp), %rdx
callq 0xa6e30
jmp 0xebf66
movq -0x328(%rbp), %rdi
leaq 0x14b0e(%rip), %rdx     # 0x100a82
leaq -0x170(%rbp), %rsi
callq 0xa10c0
jmp 0xebf82
leaq -0x170(%rbp), %rdi
callq 0x992c0
leaq -0x190(%rbp), %rdi
callq 0x992c0
leaq -0x1c8(%rbp), %rdi
callq 0x992c0
leaq -0x1c9(%rbp), %rdi
callq 0x994f0
leaq -0x1a8(%rbp), %rdi
callq 0xa0c70
leaq -0x130(%rbp), %rdi
callq 0xa0c70
jmp 0xec575
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0xec035
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0xec029
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0xec01d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x170(%rbp), %rdi
callq 0x992c0
leaq -0x190(%rbp), %rdi
callq 0x992c0
leaq -0x1c8(%rbp), %rdi
callq 0x992c0
leaq -0x1c9(%rbp), %rdi
callq 0x994f0
leaq -0x1a8(%rbp), %rdi
callq 0xa0c70
leaq -0x130(%rbp), %rdi
callq 0xa0c70
jmp 0xec585
leaq -0x1e8(%rbp), %rdi
callq 0xa0c50
movq -0x318(%rbp), %rax
movq 0x8(%rax), %rax
addq $0x18, %rax
movq %rax, -0x1f0(%rbp)
movq -0x1f0(%rbp), %rdi
callq 0xeccb0
movq %rax, -0x1f8(%rbp)
movq -0x1f0(%rbp), %rdi
callq 0xecce0
movq %rax, -0x200(%rbp)
leaq -0x1f8(%rbp), %rdi
leaq -0x200(%rbp), %rsi
callq 0xecd10
testb $0x1, %al
jne 0xec0c2
jmp 0xec1a3
leaq -0x1f8(%rbp), %rdi
callq 0xecd50
movq (%rax), %rax
movq %rax, -0x208(%rbp)
movq -0x208(%rbp), %rdx
addq $0x8, %rdx
leaq 0x14995(%rip), %rsi     # 0x100a7f
leaq -0x248(%rbp), %rdi
callq 0xa6e30
jmp 0xec0f8
leaq 0x14980(%rip), %rdx     # 0x100a7f
leaq -0x228(%rbp), %rdi
leaq -0x248(%rbp), %rsi
callq 0xa10c0
jmp 0xec114
leaq -0x1e8(%rbp), %rdi
leaq -0x228(%rbp), %rsi
callq 0xecae0
jmp 0xec129
leaq -0x228(%rbp), %rdi
callq 0x992c0
leaq -0x248(%rbp), %rdi
callq 0x992c0
leaq -0x1f8(%rbp), %rdi
callq 0xecd70
jmp 0xec0a6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0xec306
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0xec192
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x228(%rbp), %rdi
callq 0x992c0
leaq -0x248(%rbp), %rdi
callq 0x992c0
jmp 0xec306
leaq -0x2a0(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0xbd9b0
jmp 0xec1b8
leaq -0x2c1(%rbp), %rdi
movq %rdi, -0x350(%rbp)
callq 0x99850
movq -0x350(%rbp), %rdx
leaq 0x148a3(%rip), %rsi     # 0x100a7c
leaq -0x2c0(%rbp), %rdi
callq 0x99640
jmp 0xec1e7
leaq -0x288(%rbp), %rdi
leaq -0x2a0(%rbp), %rsi
leaq -0x2c0(%rbp), %rdx
callq 0xecb30
jmp 0xec203
leaq 0x13301(%rip), %rsi     # 0xff50b
leaq -0x268(%rbp), %rdi
leaq -0x288(%rbp), %rdx
callq 0xa6e30
jmp 0xec21f
movq -0x328(%rbp), %rdi
leaq 0x14855(%rip), %rdx     # 0x100a82
leaq -0x268(%rbp), %rsi
callq 0xa10c0
jmp 0xec23b
leaq -0x268(%rbp), %rdi
callq 0x992c0
leaq -0x288(%rbp), %rdi
callq 0x992c0
leaq -0x2c0(%rbp), %rdi
callq 0x992c0
leaq -0x2c1(%rbp), %rdi
callq 0x994f0
leaq -0x2a0(%rbp), %rdi
callq 0xa0c70
leaq -0x1e8(%rbp), %rdi
callq 0xa0c70
jmp 0xec575
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0xec2ee
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0xec2e2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0xec2d6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x268(%rbp), %rdi
callq 0x992c0
leaq -0x288(%rbp), %rdi
callq 0x992c0
leaq -0x2c0(%rbp), %rdi
callq 0x992c0
leaq -0x2c1(%rbp), %rdi
callq 0x994f0
leaq -0x2a0(%rbp), %rdi
callq 0xa0c70
leaq -0x1e8(%rbp), %rdi
callq 0xa0c70
jmp 0xec585
leaq -0x2c2(%rbp), %rdi
movq %rdi, -0x358(%rbp)
callq 0x99850
movq -0x328(%rbp), %rdi
movq -0x358(%rbp), %rdx
leaq 0x14870(%rip), %rsi     # 0x100baf
callq 0x99640
jmp 0xec346
leaq -0x2c2(%rbp), %rdi
callq 0x994f0
jmp 0xec575
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x2c2(%rbp), %rdi
callq 0x994f0
jmp 0xec585
movq -0x318(%rbp), %rax
movq 0x8(%rax), %rax
movl (%rax), %eax
movq %rax, -0x360(%rbp)
subq $0xa, %rax
ja 0xec51b
movq -0x360(%rbp), %rax
leaq 0x14681(%rip), %rcx     # 0x100a24
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x318(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x50(%rax), %rsi
leaq -0x2d8(%rbp), %rdi
movq %rdi, -0x368(%rbp)
callq 0xec740
movq -0x328(%rbp), %rdi
movq -0x368(%rbp), %rsi
callq 0xec590
jmp 0xec3e3
leaq -0x2d8(%rbp), %rdi
callq 0xec770
jmp 0xec575
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x2d8(%rbp), %rdi
callq 0xec770
jmp 0xec585
movq -0x318(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x48(%rax), %rsi
leaq -0x2e8(%rbp), %rdi
movq %rdi, -0x370(%rbp)
callq 0xec700
movq -0x328(%rbp), %rdi
movq -0x370(%rbp), %rsi
callq 0xec630
jmp 0xec44b
leaq -0x2e8(%rbp), %rdi
callq 0xec730
jmp 0xec575
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x2e8(%rbp), %rdi
callq 0xec730
jmp 0xec585
movq -0x328(%rbp), %rdi
movq -0x318(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rsi
addq $0x8, %rsi
callq 0x991c0
jmp 0xec575
movq -0x318(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rdx
addq $0x8, %rdx
leaq 0x145c5(%rip), %rsi     # 0x100a7f
movq %rsi, -0x378(%rbp)
leaq -0x308(%rbp), %rdi
movq %rdi, -0x380(%rbp)
callq 0xa6e30
movq -0x328(%rbp), %rdi
movq -0x380(%rbp), %rsi
movq -0x378(%rbp), %rdx
callq 0xa10c0
jmp 0xec4f0
leaq -0x308(%rbp), %rdi
callq 0x992c0
jmp 0xec575
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x308(%rbp), %rdi
callq 0x992c0
jmp 0xec585
leaq -0x309(%rbp), %rdi
movq %rdi, -0x388(%rbp)
callq 0x99850
movq -0x328(%rbp), %rdi
movq -0x388(%rbp), %rdx
leaq 0x1466c(%rip), %rsi     # 0x100baf
callq 0x99640
jmp 0xec54a
leaq -0x309(%rbp), %rdi
callq 0x994f0
jmp 0xec575
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x309(%rbp), %rdi
callq 0x994f0
jmp 0xec585
movq -0x320(%rbp), %rax
addq $0x390, %rsp            # imm = 0x390
popq %rbp
retq
movq -0x80(%rbp), %rdi
callq 0x99840
nop