 	public func compile(with ctx: BytecodeCompiler, in parent: ASTNode?) throws -> BytecodeBody {
 
 		var bytecode = BytecodeBody()
-
-		var opTypes: [String : BytecodeInstructionType]
-
-		opTypes = ["+": .add,
-		           "-": .sub,
-		           "*": .mul,
-		           "/": .div,
-		           "^": .pow,
-		           "==": .eq,
-		           "!=": .neq,
-		           ">": .cmplt,
-		           "<": .cmplt,
-		           ">=": .cmple,
-		           "<=": .cmple,
-		           "&&": .and,
-		           "||": .or,
-		           "!": .not]
-
-		guard let type = opTypes[op] else {
-			throw CompileError.unexpectedBinaryOperator
-		}
 
 		if op == ">" || op == ">=" {
 

		let label = ctx.nextIndexLabel()

		// FIXME: comment "op" is wrong for ">" and ">="
		let operation = BytecodeInstruction(label: label, type: type, comment: op)

		bytecode.append(operation)

		return bytecode

	}

	public var childNodes: [ASTNode] {
		if let rhs = rhs {
			return [lhs, rhs]

				throw CompileError.unexpectedCommand
			}
		}
		
		guard let type = BinaryOpNode.opTypes[op] else {
			throw CompileError.unexpectedBinaryOperator
		}
		
		self.opInstructionType = type

		self.lhs = lhs
		self.rhs = rhs
