// File: /workspace/github_c_makefile_star2_O0/shifengbin[P]bishe/Output/../Persistence/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) ){
        return WRC_Continue;
      }else{
        pWalker->eCode = 0;
        return WRC_Abort;
      }
    case TK_ID:
    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( pWalker->eCode==3 && pExpr->iTable==pWalker->u.iCur ){
        return WRC_Continue;
      }else{
        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_master 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;
      }
      /* Fall through */
    default:
      testcase( pExpr->op==TK_SELECT ); /* selectNodeIsConstant will disallow */
      testcase( pExpr->op==TK_EXISTS ); /* selectNodeIsConstant will disallow */
      return WRC_Continue;
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rax
movzbl 0x24(%rax), %eax
cmpl $0x2, %eax
jne 0x70d2c
movq -0x18(%rbp), %rax
movl 0x4(%rax), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x70d2c
movq -0x10(%rbp), %rax
movb $0x0, 0x24(%rax)
movl $0x2, -0x4(%rbp)
jmp 0x70e1c
movq -0x18(%rbp), %rax
movzbl (%rax), %eax
movl %eax, -0x1c(%rbp)
subl $0x1b, %eax
je 0x70da6
jmp 0x70d3d
movl -0x1c(%rbp), %eax
subl $0x87, %eax
je 0x70ddd
jmp 0x70d4d
movl -0x1c(%rbp), %eax
subl $0x97, %eax
je 0x70d6b
jmp 0x70d59
movl -0x1c(%rbp), %eax
addl $0xffffff68, %eax       # imm = 0xFFFFFF68
subl $0x3, %eax
jb 0x70da6
jmp 0x70e15
movq -0x10(%rbp), %rax
movzbl 0x24(%rax), %eax
cmpl $0x4, %eax
jge 0x70d89
movq -0x18(%rbp), %rax
movl 0x4(%rax), %eax
andl $0x80000, %eax          # imm = 0x80000
cmpl $0x0, %eax
je 0x70d95
movl $0x0, -0x4(%rbp)
jmp 0x70e1c
movq -0x10(%rbp), %rax
movb $0x0, 0x24(%rax)
movl $0x2, -0x4(%rbp)
jmp 0x70e1c
movq -0x10(%rbp), %rax
movzbl 0x24(%rax), %eax
cmpl $0x3, %eax
jne 0x70dcc
movq -0x18(%rbp), %rax
movl 0x2c(%rax), %eax
movq -0x10(%rbp), %rcx
cmpl 0x28(%rcx), %eax
jne 0x70dcc
movl $0x0, -0x4(%rbp)
jmp 0x70e1c
movq -0x10(%rbp), %rax
movb $0x0, 0x24(%rax)
movl $0x2, -0x4(%rbp)
jmp 0x70e1c
movq -0x10(%rbp), %rax
movzbl 0x24(%rax), %eax
cmpl $0x5, %eax
jne 0x70df3
movq -0x18(%rbp), %rax
movb $0x65, (%rax)
jmp 0x70e13
movq -0x10(%rbp), %rax
movzbl 0x24(%rax), %eax
cmpl $0x4, %eax
jne 0x70e11
movq -0x10(%rbp), %rax
movb $0x0, 0x24(%rax)
movl $0x2, -0x4(%rbp)
jmp 0x70e1c
jmp 0x70e13
jmp 0x70e15
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
popq %rbp
retq
nopw %cs:(%rax,%rax)