 
 public class BinaryOpNode: ASTNode {
 
+	static var opTypes: [String : BytecodeInstructionType] {
+		return ["+": .add,
+		        "-": .sub,
+		        "*": .mul,
+		        "/": .div,
+		        "^": .pow,
+		        "==": .eq,
+		        "!=": .neq,
+		        ">": .cmplt,
+		        "<": .cmplt,
+		        ">=": .cmple,
+		        "<=": .cmple,
+		        "&&": .and,
+		        "||": .or,
+		        "!": .not]
+	}
+	
 	public let op: String
+	public let opInstructionType: BytecodeInstructionType
 	public let lhs: ASTNode
 
 	/// Can be nil, e.g. for 'not' operation

				throw CompileError.unexpectedCommand
			}
		}

		self.lhs = lhs
		self.rhs = rhs

		let label = ctx.nextIndexLabel()

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

		bytecode.append(operation)

		return bytecode

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