// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/external/sqlite-3.33.0/sqlite3.c
// Function: exprNodeIsConstant
static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){

  /* If pWalker->eCode is 2 then any term of the expression that comes from
  ** the ON or USING clauses of a left join disqualifies the expression
  ** from being considered constant. */
  if( pWalker->eCode==2 && ExprHasProperty(pExpr, EP_FromJoin) ){
    pWalker->eCode = 0;
    return WRC_Abort;
  }

  switch( pExpr->op ){
    /* Consider functions to be constant if all their arguments are constant
    ** and either pWalker->eCode==4 or 5 or the function has the
    ** SQLITE_FUNC_CONST flag. */
    case TK_FUNCTION:
      if( (pWalker->eCode>=4 || ExprHasProperty(pExpr,EP_ConstFunc))
       && !ExprHasProperty(pExpr, EP_WinFunc)
      ){
        if( pWalker->eCode==5 ) ExprSetProperty(pExpr, EP_FromDDL);
        return WRC_Continue;
      }else{
        pWalker->eCode = 0;
        return WRC_Abort;
      }
    case TK_ID:
      /* Convert "true" or "false" in a DEFAULT clause into the
      ** appropriate TK_TRUEFALSE operator */
      if( sqlite3ExprIdToTrueFalse(pExpr) ){
        return WRC_Prune;
      }
      /* no break */ deliberate_fall_through
    case TK_COLUMN:
    case TK_AGG_FUNCTION:
    case TK_AGG_COLUMN:
      testcase( pExpr->op==TK_ID );
      testcase( pExpr->op==TK_COLUMN );
      testcase( pExpr->op==TK_AGG_FUNCTION );
      testcase( pExpr->op==TK_AGG_COLUMN );
      if( ExprHasProperty(pExpr, EP_FixedCol) && pWalker->eCode!=2 ){
        return WRC_Continue;
      }
      if( pWalker->eCode==3 && pExpr->iTable==pWalker->u.iCur ){
        return WRC_Continue;
      }
      /* no break */ deliberate_fall_through
    case TK_IF_NULL_ROW:
    case TK_REGISTER:
    case TK_DOT:
      testcase( pExpr->op==TK_REGISTER );
      testcase( pExpr->op==TK_IF_NULL_ROW );
      testcase( pExpr->op==TK_DOT );
      pWalker->eCode = 0;
      return WRC_Abort;
    case TK_VARIABLE:
      if( pWalker->eCode==5 ){
        /* Silently convert bound parameters that appear inside of CREATE
        ** statements into a NULL when parsing the CREATE statement text out
        ** of the sqlite_schema table */
        pExpr->op = TK_NULL;
      }else if( pWalker->eCode==4 ){
        /* A bound parameter in a CREATE statement that originates from
        ** sqlite3_prepare() causes an error */
        pWalker->eCode = 0;
        return WRC_Abort;
      }
      /* no break */ deliberate_fall_through
    default:
      testcase( pExpr->op==TK_SELECT ); /* sqlite3SelectWalkFail() disallows */
      testcase( pExpr->op==TK_EXISTS ); /* sqlite3SelectWalkFail() disallows */
      return WRC_Continue;
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rax
movzwl 0x24(%rax), %eax
cmpl $0x2, %eax
jne 0x42f482
movq -0x18(%rbp), %rax
movl 0x4(%rax), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x42f482
movq -0x10(%rbp), %rax
movw $0x0, 0x24(%rax)
movl $0x2, -0x4(%rbp)
jmp 0x42f624
movq -0x18(%rbp), %rax
movzbl (%rax), %eax
movl %eax, -0x1c(%rbp)
subl $0x3b, %eax
je 0x42f567
jmp 0x42f497
movl -0x1c(%rbp), %eax
subl $0x8b, %eax
je 0x42f5d0
jmp 0x42f4a7
movl -0x1c(%rbp), %eax
subl $0x99, %eax
je 0x42f5e3
jmp 0x42f4b7
movl -0x1c(%rbp), %eax
addl $0xffffff5c, %eax       # imm = 0xFFFFFF5C
subl $0x3, %eax
jb 0x42f583
jmp 0x42f4ca
movl -0x1c(%rbp), %eax
subl $0xa9, %eax
je 0x42f4f9
jmp 0x42f4d6
movl -0x1c(%rbp), %eax
subl $0xad, %eax
je 0x42f5d0
jmp 0x42f4e6
movl -0x1c(%rbp), %eax
subl $0xb0, %eax
je 0x42f5d0
jmp 0x42f61d
movq -0x10(%rbp), %rax
movzwl 0x24(%rax), %eax
cmpl $0x4, %eax
jge 0x42f517
movq -0x18(%rbp), %rax
movl 0x4(%rax), %eax
andl $0x80000, %eax          # imm = 0x80000
cmpl $0x0, %eax
je 0x42f551
movq -0x18(%rbp), %rax
movl 0x4(%rax), %eax
andl $0x1000000, %eax        # imm = 0x1000000
cmpl $0x0, %eax
jne 0x42f551
movq -0x10(%rbp), %rax
movzwl 0x24(%rax), %eax
cmpl $0x5, %eax
jne 0x42f545
movq -0x18(%rbp), %rax
movl 0x4(%rax), %ecx
orl $0x40000000, %ecx       # imm = 0x40000000
movl %ecx, 0x4(%rax)
movl $0x0, -0x4(%rbp)
jmp 0x42f624
movq -0x10(%rbp), %rax
movw $0x0, 0x24(%rax)
movl $0x2, -0x4(%rbp)
jmp 0x42f624
movq -0x18(%rbp), %rdi
callq 0x418770
cmpl $0x0, %eax
je 0x42f581
movl $0x1, -0x4(%rbp)
jmp 0x42f624
jmp 0x42f583
movq -0x18(%rbp), %rax
movl 0x4(%rax), %eax
andl $0x8, %eax
cmpl $0x0, %eax
je 0x42f5a8
movq -0x10(%rbp), %rax
movzwl 0x24(%rax), %eax
cmpl $0x2, %eax
je 0x42f5a8
movl $0x0, -0x4(%rbp)
jmp 0x42f624
movq -0x10(%rbp), %rax
movzwl 0x24(%rax), %eax
cmpl $0x3, %eax
jne 0x42f5ce
movq -0x18(%rbp), %rax
movl 0x2c(%rax), %eax
movq -0x10(%rbp), %rcx
cmpl 0x28(%rcx), %eax
jne 0x42f5ce
movl $0x0, -0x4(%rbp)
jmp 0x42f624
jmp 0x42f5d0
movq -0x10(%rbp), %rax
movw $0x0, 0x24(%rax)
movl $0x2, -0x4(%rbp)
jmp 0x42f624
movq -0x10(%rbp), %rax
movzwl 0x24(%rax), %eax
cmpl $0x5, %eax
jne 0x42f5f9
movq -0x18(%rbp), %rax
movb $0x77, (%rax)
jmp 0x42f61b
movq -0x10(%rbp), %rax
movzwl 0x24(%rax), %eax
cmpl $0x4, %eax
jne 0x42f619
movq -0x10(%rbp), %rax
movw $0x0, 0x24(%rax)
movl $0x2, -0x4(%rbp)
jmp 0x42f624
jmp 0x42f61b
jmp 0x42f61d
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x20, %rsp
popq %rbp
retq
nopl (%rax)