// File: /workspace/github_c_makefile_star2_O0/AK6DN[P]dec-utilities-for-pdp/palbart/palbart.c
// Function: getExpr
SYM_T *getExpr()
{
  SYM_T *sym;
  delimiter = line[lexterm];


  if( line[lexstart] == '-' )
  {
    nextLexBlank();
    sym_getexpr = *(eval());
    sym_getexpr.val = ( - sym_getexpr.val ) & 07777;
  }
  else
  {
    if( line[lexstart] == '+' )
    {
      nextLexBlank();
    }
    sym_getexpr = *(eval());
    sym_getexpr.val = sym_getexpr.val & 07777;
  }

  if( is_blank( delimiter ))
  {
    return( &sym_getexpr );
  }

  /* Here we assume the current lexeme is the operator separating the         */
  /* previous operator from the next, if any.                                 */
  while( TRUE )
  {
    /* assert line[lexstart] == delimiter                                     */
    if( is_blank( delimiter ))
    {
      return( &sym_getexpr );
    }

    switch( line[lexstart] )
    {
    case '+':                   /* add                                        */
      nextLexBlank();           /* skip over the operator                     */
      sym = eval();
      sym_getexpr.val += sym->val;
      if (sym_getexpr.type == UNDEFINED || sym->type == UNDEFINED) {
         sym_getexpr.val = 0;
         sym_getexpr.type = UNDEFINED;
      }
      break;

    case '-':                   /* subtract                                   */
      nextLexBlank();           /* skip over the operator                     */
      sym = eval();
      sym_getexpr.val -= sym->val;
      if (sym_getexpr.type == UNDEFINED || sym->type == UNDEFINED) {
         sym_getexpr.val = 0;
         sym_getexpr.type = UNDEFINED;
      }
      break;

    case '^':                   /* multiply                                   */
      nextLexBlank();           /* skip over the operator                     */
      sym = eval();
      sym_getexpr.val *= sym->val;
      if (sym_getexpr.type == UNDEFINED || sym->type == UNDEFINED) {
         sym_getexpr.val = 0;
         sym_getexpr.type = UNDEFINED;
      }
      break;

    case '%':                   /* divide                                     */
      nextLexBlank();           /* skip over the operator                     */
      sym = eval();
      sym_getexpr.val /= sym->val;
      if (sym_getexpr.type == UNDEFINED || sym->type == UNDEFINED) {
         sym_getexpr.val = 0;
         sym_getexpr.type = UNDEFINED;
      }
      break;

    case '&':                   /* and                                        */
      nextLexBlank();           /* skip over the operator                     */
      sym = eval();
      sym_getexpr.val &= sym->val;
      if (sym_getexpr.type == UNDEFINED || sym->type == UNDEFINED) {
         sym_getexpr.val = 0;
         sym_getexpr.type = UNDEFINED;
      }
      break;

    case '!':                   /* or                                         */
      nextLexBlank();           /* skip over the operator                     */
      sym = eval();
      sym_getexpr.val |= sym->val;
      if (sym_getexpr.type == UNDEFINED || sym->type == UNDEFINED) {
         sym_getexpr.val = 0;
         sym_getexpr.type = UNDEFINED;
      }
      break;

    default:
      if( isend( line[lexstart] ))
      {
        return( &sym_getexpr );
      }

      switch( line[lexstart] )
      {
      case '/':
      case ';':
      case ')':
      case ']':
      case '<':
        break;

      case '=':
        errorMessage( &illegal_equals, lexstart );
        moveToEndOfLine();
        sym_getexpr.val = 0;
        break;

      default:
        errorMessage( &illegal_expression, lexstart );
        moveToEndOfLine();
        sym_getexpr.val = 0;
        break;
      }
      return( &sym_getexpr );
    }
  } /* end while                                                              */
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movslq 0xb2ad(%rip), %rcx      # 0xf87c
leaq 0xb21a(%rip), %rax      # 0xf7f0
movb (%rax,%rcx), %al
movb %al, 0xb2a1(%rip)       # 0xf880
movslq 0xb28e(%rip), %rcx      # 0xf874
leaq 0xb203(%rip), %rax      # 0xf7f0
movsbl (%rax,%rcx), %eax
cmpl $0x2d, %eax
jne 0x4639
callq 0x51a0
callq 0x6a20
movq (%rax), %rcx
movq %rcx, 0x8ce6(%rip)      # 0xd2f0
movq 0x8(%rax), %rcx
movq %rcx, 0x8ce3(%rip)      # 0xd2f8
movq 0x10(%rax), %rax
movq %rax, 0x8ce0(%rip)      # 0xd300
movswl 0x8cd5(%rip), %ecx      # 0xd2fc
xorl %eax, %eax
subl %ecx, %eax
andl $0xfff, %eax            # imm = 0xFFF
movw %ax, 0x8cc5(%rip)       # 0xd2fc
jmp 0x468d
movslq 0xb234(%rip), %rcx      # 0xf874
leaq 0xb1a9(%rip), %rax      # 0xf7f0
movsbl (%rax,%rcx), %eax
cmpl $0x2b, %eax
jne 0x4655
callq 0x51a0
callq 0x6a20
movq (%rax), %rcx
movq %rcx, 0x8c8c(%rip)      # 0xd2f0
movq 0x8(%rax), %rcx
movq %rcx, 0x8c89(%rip)      # 0xd2f8
movq 0x10(%rax), %rax
movq %rax, 0x8c86(%rip)      # 0xd300
movswl 0x8c7b(%rip), %eax      # 0xd2fc
andl $0xfff, %eax            # imm = 0xFFF
movw %ax, 0x8c6f(%rip)       # 0xd2fc
movsbl 0xb1ec(%rip), %eax      # 0xf880
cmpl $0x20, %eax
je 0x46bd
movsbl 0xb1e0(%rip), %eax      # 0xf880
cmpl $0x9, %eax
je 0x46bd
movsbl 0xb1d4(%rip), %eax      # 0xf880
cmpl $0xc, %eax
je 0x46bd
movsbl 0xb1c8(%rip), %eax      # 0xf880
cmpl $0x3e, %eax
jne 0x46cd
leaq 0x8c2c(%rip), %rax      # 0xd2f0
movq %rax, -0x8(%rbp)
jmp 0x4a2d
jmp 0x46cf
movsbl 0xb1aa(%rip), %eax      # 0xf880
cmpl $0x20, %eax
je 0x46ff
movsbl 0xb19e(%rip), %eax      # 0xf880
cmpl $0x9, %eax
je 0x46ff
movsbl 0xb192(%rip), %eax      # 0xf880
cmpl $0xc, %eax
je 0x46ff
movsbl 0xb186(%rip), %eax      # 0xf880
cmpl $0x3e, %eax
jne 0x470f
leaq 0x8bea(%rip), %rax      # 0xd2f0
movq %rax, -0x8(%rbp)
jmp 0x4a2d
movslq 0xb15e(%rip), %rax      # 0xf874
leaq 0xb0d3(%rip), %rcx      # 0xf7f0
movsbl (%rax,%rcx), %eax
movl %eax, -0x14(%rbp)
subl $0x21, %eax
je 0x4902
jmp 0x472f
movl -0x14(%rbp), %eax
subl $0x25, %eax
je 0x4861
jmp 0x473d
movl -0x14(%rbp), %eax
subl $0x26, %eax
je 0x48b2
jmp 0x474b
movl -0x14(%rbp), %eax
subl $0x2b, %eax
je 0x4770
jmp 0x4755
movl -0x14(%rbp), %eax
subl $0x2d, %eax
je 0x47c0
jmp 0x475f
movl -0x14(%rbp), %eax
subl $0x5e, %eax
je 0x4810
jmp 0x4952
callq 0x51a0
callq 0x6a20
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rax
movswl 0xc(%rax), %ecx
movswl 0x8b6f(%rip), %eax      # 0xd2fc
addl %ecx, %eax
movw %ax, 0x8b66(%rip)       # 0xd2fc
cmpl $0x0, 0x8b53(%rip)      # 0xd2f0
je 0x47a8
movq -0x10(%rbp), %rax
cmpl $0x0, (%rax)
jne 0x47bb
movw $0x0, 0x8b4b(%rip)      # 0xd2fc
movl $0x0, 0x8b35(%rip)      # 0xd2f0
jmp 0x4a28
callq 0x51a0
callq 0x6a20
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rax
movswl 0xc(%rax), %ecx
movswl 0x8b1f(%rip), %eax      # 0xd2fc
subl %ecx, %eax
movw %ax, 0x8b16(%rip)       # 0xd2fc
cmpl $0x0, 0x8b03(%rip)      # 0xd2f0
je 0x47f8
movq -0x10(%rbp), %rax
cmpl $0x0, (%rax)
jne 0x480b
movw $0x0, 0x8afb(%rip)      # 0xd2fc
movl $0x0, 0x8ae5(%rip)      # 0xd2f0
jmp 0x4a28
callq 0x51a0
callq 0x6a20
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rax
movswl 0xc(%rax), %ecx
movswl 0x8acf(%rip), %eax      # 0xd2fc
imull %ecx, %eax
movw %ax, 0x8ac5(%rip)       # 0xd2fc
cmpl $0x0, 0x8ab2(%rip)      # 0xd2f0
je 0x4849
movq -0x10(%rbp), %rax
cmpl $0x0, (%rax)
jne 0x485c
movw $0x0, 0x8aaa(%rip)      # 0xd2fc
movl $0x0, 0x8a94(%rip)      # 0xd2f0
jmp 0x4a28
callq 0x51a0
callq 0x6a20
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rax
movswl 0xc(%rax), %ecx
movswl 0x8a7e(%rip), %eax      # 0xd2fc
cltd
idivl %ecx
movw %ax, 0x8a74(%rip)       # 0xd2fc
cmpl $0x0, 0x8a61(%rip)      # 0xd2f0
je 0x489a
movq -0x10(%rbp), %rax
cmpl $0x0, (%rax)
jne 0x48ad
movw $0x0, 0x8a59(%rip)      # 0xd2fc
movl $0x0, 0x8a43(%rip)      # 0xd2f0
jmp 0x4a28
callq 0x51a0
callq 0x6a20
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rax
movswl 0xc(%rax), %ecx
movswl 0x8a2d(%rip), %eax      # 0xd2fc
andl %ecx, %eax
movw %ax, 0x8a24(%rip)       # 0xd2fc
cmpl $0x0, 0x8a11(%rip)      # 0xd2f0
je 0x48ea
movq -0x10(%rbp), %rax
cmpl $0x0, (%rax)
jne 0x48fd
movw $0x0, 0x8a09(%rip)      # 0xd2fc
movl $0x0, 0x89f3(%rip)      # 0xd2f0
jmp 0x4a28
callq 0x51a0
callq 0x6a20
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rax
movswl 0xc(%rax), %ecx
movswl 0x89dd(%rip), %eax      # 0xd2fc
orl %ecx, %eax
movw %ax, 0x89d4(%rip)       # 0xd2fc
cmpl $0x0, 0x89c1(%rip)      # 0xd2f0
je 0x493a
movq -0x10(%rbp), %rax
cmpl $0x0, (%rax)
jne 0x494d
movw $0x0, 0x89b9(%rip)      # 0xd2fc
movl $0x0, 0x89a3(%rip)      # 0xd2f0
jmp 0x4a28
movslq 0xaf1b(%rip), %rcx      # 0xf874
leaq 0xae90(%rip), %rax      # 0xf7f0
movsbl (%rax,%rcx), %eax
cmpl $0x0, %eax
je 0x4980
movslq 0xaf04(%rip), %rcx      # 0xf874
leaq 0xae79(%rip), %rax      # 0xf7f0
movsbl (%rax,%rcx), %eax
cmpl $0xa, %eax
jne 0x4990
leaq 0x8969(%rip), %rax      # 0xd2f0
movq %rax, -0x8(%rbp)
jmp 0x4a2d
movslq 0xaedd(%rip), %rax      # 0xf874
leaq 0xae52(%rip), %rcx      # 0xf7f0
movsbl (%rax,%rcx), %eax
movl %eax, -0x18(%rbp)
subl $0x29, %eax
je 0x49d7
jmp 0x49ac
movl -0x18(%rbp), %eax
subl $0x2f, %eax
je 0x49d7
jmp 0x49b6
movl -0x18(%rbp), %eax
addl $-0x3b, %eax
subl $0x2, %eax
jb 0x49d7
jmp 0x49c3
movl -0x18(%rbp), %eax
subl $0x3d, %eax
je 0x49d9
jmp 0x49cd
movl -0x18(%rbp), %eax
subl $0x5d, %eax
jne 0x49fb
jmp 0x49d7
jmp 0x4a1b
movl 0xae95(%rip), %esi      # 0xf874
leaq 0x87a2(%rip), %rdi      # 0xd188
callq 0x6ed0
callq 0x6f70
movw $0x0, 0x8903(%rip)      # 0xd2fc
jmp 0x4a1b
movl 0xae73(%rip), %esi      # 0xf874
leaq 0x8730(%rip), %rdi      # 0xd138
callq 0x6ed0
callq 0x6f70
movw $0x0, 0x88e1(%rip)      # 0xd2fc
leaq 0x88ce(%rip), %rax      # 0xd2f0
movq %rax, -0x8(%rbp)
jmp 0x4a2d
jmp 0x46cf
movq -0x8(%rbp), %rax
addq $0x20, %rsp
popq %rbp
retq
nopw (%rax,%rax)