// File: Falldog[P]dcinja/src/include/inja/inja.hpp
// Function: inja::FunctionNode::FunctionNode(inja::FunctionStorage::Operation, unsigned long)
explicit FunctionNode(Op operation, size_t pos) : ExpressionNode(pos), operation(operation), number_args(1) {
    switch (operation) {
      case Op::Not: {
        precedence = 4;
        associativity = Associativity::Left;
      } break;
      case Op::And: {
        precedence = 1;
        associativity = Associativity::Left;
      } break;
      case Op::Or: {
        precedence = 1;
        associativity = Associativity::Left;
      } break;
      case Op::In: {
        precedence = 2;
        associativity = Associativity::Left;
      } break;
      case Op::Equal: {
        precedence = 2;
        associativity = Associativity::Left;
      } break;
      case Op::NotEqual: {
        precedence = 2;
        associativity = Associativity::Left;
      } break;
      case Op::Greater: {
        precedence = 2;
        associativity = Associativity::Left;
      } break;
      case Op::GreaterEqual: {
        precedence = 2;
        associativity = Associativity::Left;
      } break;
      case Op::Less: {
        precedence = 2;
        associativity = Associativity::Left;
      } break;
      case Op::LessEqual: {
        precedence = 2;
        associativity = Associativity::Left;
      } break;
      case Op::Add: {
        precedence = 3;
        associativity = Associativity::Left;
      } break;
      case Op::Subtract: {
        precedence = 3;
        associativity = Associativity::Left;
      } break;
      case Op::Multiplication: {
        precedence = 4;
        associativity = Associativity::Left;
      } break;
      case Op::Division: {
        precedence = 4;
        associativity = Associativity::Left;
      } break;
      case Op::Power: {
        precedence = 5;
        associativity = Associativity::Right;
      } break;
      case Op::Modulo: {
        precedence = 4;
        associativity = Associativity::Left;
      } break;
      case Op::AtId: {
        precedence = 8;
        associativity = Associativity::Left;
      } break;
      default: {
        precedence = 1;
        associativity = Associativity::Left;
      }
    }
  }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x8(%rbp), %rdi
movq %rdi, -0x28(%rbp)
movq -0x18(%rbp), %rsi
callq 0x5f870
movq -0x28(%rbp), %rdi
leaq 0xb8521(%rip), %rax     # 0x11c200
movq %rax, (%rdi)
movl -0xc(%rbp), %eax
movl %eax, 0x18(%rdi)
addq $0x20, %rdi
callq 0xb820
movq -0x28(%rbp), %rdi
movl $0x1, 0x40(%rdi)
addq $0x48, %rdi
callq 0x2d260
movl -0xc(%rbp), %eax
movq %rax, -0x20(%rbp)
subq $0x10, %rax
ja 0x63e9f
movq -0x20(%rbp), %rax
leaq 0x5cf63(%rip), %rcx     # 0xc0c84
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x28(%rbp), %rax
movl $0x4, 0x10(%rax)
movl $0x0, 0x14(%rax)
jmp 0x63eb1
movq -0x28(%rbp), %rax
movl $0x1, 0x10(%rax)
movl $0x0, 0x14(%rax)
jmp 0x63eb1
movq -0x28(%rbp), %rax
movl $0x1, 0x10(%rax)
movl $0x0, 0x14(%rax)
jmp 0x63eb1
movq -0x28(%rbp), %rax
movl $0x2, 0x10(%rax)
movl $0x0, 0x14(%rax)
jmp 0x63eb1
movq -0x28(%rbp), %rax
movl $0x2, 0x10(%rax)
movl $0x0, 0x14(%rax)
jmp 0x63eb1
movq -0x28(%rbp), %rax
movl $0x2, 0x10(%rax)
movl $0x0, 0x14(%rax)
jmp 0x63eb1
movq -0x28(%rbp), %rax
movl $0x2, 0x10(%rax)
movl $0x0, 0x14(%rax)
jmp 0x63eb1
movq -0x28(%rbp), %rax
movl $0x2, 0x10(%rax)
movl $0x0, 0x14(%rax)
jmp 0x63eb1
movq -0x28(%rbp), %rax
movl $0x2, 0x10(%rax)
movl $0x0, 0x14(%rax)
jmp 0x63eb1
movq -0x28(%rbp), %rax
movl $0x2, 0x10(%rax)
movl $0x0, 0x14(%rax)
jmp 0x63eb1
movq -0x28(%rbp), %rax
movl $0x3, 0x10(%rax)
movl $0x0, 0x14(%rax)
jmp 0x63eb1
movq -0x28(%rbp), %rax
movl $0x3, 0x10(%rax)
movl $0x0, 0x14(%rax)
jmp 0x63eb1
movq -0x28(%rbp), %rax
movl $0x4, 0x10(%rax)
movl $0x0, 0x14(%rax)
jmp 0x63eb1
movq -0x28(%rbp), %rax
movl $0x4, 0x10(%rax)
movl $0x0, 0x14(%rax)
jmp 0x63eb1
movq -0x28(%rbp), %rax
movl $0x5, 0x10(%rax)
movl $0x1, 0x14(%rax)
jmp 0x63eb1
movq -0x28(%rbp), %rax
movl $0x4, 0x10(%rax)
movl $0x0, 0x14(%rax)
jmp 0x63eb1
movq -0x28(%rbp), %rax
movl $0x8, 0x10(%rax)
movl $0x0, 0x14(%rax)
jmp 0x63eb1
movq -0x28(%rbp), %rax
movl $0x1, 0x10(%rax)
movl $0x0, 0x14(%rax)
addq $0x30, %rsp
popq %rbp
retq
nopw (%rax,%rax)