self.invalid_types_error(operand1, op, operand2)
new_common_type = error_type
+ if new_common_type.is_string and (isinstance(operand1, BytesNode) or
+ isinstance(operand2, BytesNode)):
+ # special case when comparing char* to bytes literal: must
+ # compare string values!
+ new_common_type = bytes_type
+
# recursively merge types
if common_type is None or new_common_type.is_error:
common_type = new_common_type
cimport cython
+################################################################################
+## plain char*
+
+@cython.test_assert_path_exists('//SingleAssignmentNode')
+#@cython.test_fail_if_path_exists('//SingleAssignmentNode//CoerceFromPyTypeNode')
+def charptr_equals_literal(char* s):
+ """
+ >>> charptr_equals_literal('abc'.encode('ASCII'))
+ True
+ >>> charptr_equals_literal('aabc'.encode('ASCII'))
+ False
+ >>> charptr_equals_literal('abcx'.encode('ASCII'))
+ False
+ >>> charptr_equals_literal('bcx'.encode('ASCII'))
+ False
+ """
+ cdef bint result = (s == b"abc")
+ return result
+
+def charptr_gt_literal(char* s):
+ """
+ >>> charptr_gt_literal('abc'.encode('ASCII'))
+ False
+ >>> charptr_gt_literal('aabc'.encode('ASCII'))
+ False
+ >>> charptr_gt_literal('abcx'.encode('ASCII'))
+ True
+ >>> charptr_gt_literal('bcx'.encode('ASCII'))
+ True
+ """
+ cdef bint result = (s > b"abc")
+ return result
+
+def charptr_lt_literal(char* s):
+ """
+ >>> charptr_lt_literal('abc'.encode('ASCII'))
+ False
+ >>> charptr_lt_literal('aabc'.encode('ASCII'))
+ True
+ >>> charptr_lt_literal('abcx'.encode('ASCII'))
+ False
+ >>> charptr_lt_literal('bcx'.encode('ASCII'))
+ False
+ """
+ cdef bint result = (s < b"abc")
+ return result
+
+def charptr_ge_literal(char* s):
+ """
+ >>> charptr_ge_literal('abc'.encode('ASCII'))
+ True
+ >>> charptr_ge_literal('aabc'.encode('ASCII'))
+ False
+ >>> charptr_ge_literal('abcx'.encode('ASCII'))
+ True
+ >>> charptr_ge_literal('bcx'.encode('ASCII'))
+ True
+ """
+ cdef bint result = (s >= b"abc")
+ return result
+
+def charptr_le_literal(char* s):
+ """
+ >>> charptr_le_literal('abc'.encode('ASCII'))
+ True
+ >>> charptr_le_literal('aabc'.encode('ASCII'))
+ True
+ >>> charptr_le_literal('abcx'.encode('ASCII'))
+ False
+ >>> charptr_le_literal('bcx'.encode('ASCII'))
+ False
+ """
+ cdef bint result = (s <= b"abc")
+ return result
+
+
+################################################################################
+## slices
+
@cython.test_assert_path_exists('//SingleAssignmentNode')
#FIXME: optimise me!
#@cython.test_fail_if_path_exists('//SingleAssignmentNode//CoerceFromPyTypeNode')