init_builtin_funcs()
init_builtin_types()
init_builtin_structs()
- global list_type, tuple_type, dict_type
+ global list_type, tuple_type, dict_type, unicode_type
list_type = builtin_scope.lookup('list').type
tuple_type = builtin_scope.lookup('tuple').type
dict_type = builtin_scope.lookup('dict').type
+ unicode_type = builtin_scope.lookup('unicode').type
init_builtins()
from Nodes import Node
import PyrexTypes
from PyrexTypes import py_object_type, c_long_type, typecast, error_type
-from Builtin import list_type, tuple_type, dict_type
+from Builtin import list_type, tuple_type, dict_type, unicode_type
import Symtab
import Options
from Annotate import AnnotationItem
class UnicodeNode(PyConstNode):
# entry Symtab.Entry
- type = PyrexTypes.c_unicode_type
+ type = unicode_type
def analyse_types(self, env):
self.entry = env.add_string_const(self.value)
return '"%s"' % Utils.escape_byte_string(value)
+class CUTF8CharArrayType(CStringType, CArrayType):
+ # C 'char []' type.
+
+ parsetuple_format = "s"
+ pymemberdef_typecode = "T_STRING_INPLACE"
+ is_unicode = 1
+
+ to_py_function = "PyUnicode_DecodeUTF8"
+ exception_value = "NULL"
+
+ def __init__(self, size):
+ CArrayType.__init__(self, c_char_type, size)
+
class CCharArrayType(CStringType, CArrayType):
# C 'char []' type.
CPtrType.__init__(self, c_char_type)
-class UnicodeType(BuiltinObjectType):
- # The Python unicode type.
-
- is_string = 1
- is_unicode = 1
-
- parsetuple_format = "U"
-
- def __init__(self):
- BuiltinObjectType.__init__(self, "unicode", "PyUnicodeObject")
-
- def literal_code(self, value):
- assert isinstance(value, str)
- return '"%s"' % Utils.escape_byte_string(value)
-
- def declaration_code(self, entity_code,
- for_display = 0, dll_linkage = None, pyrex = 0):
- if pyrex or for_display:
- return self.base_declaration_code(self.name, entity_code)
- else:
- return "%s %s[]" % (public_decl("char", dll_linkage), entity_code)
-
-
class ErrorType(PyrexType):
# Used to prevent propagation of error messages.
c_null_ptr_type = CNullPtrType(c_void_type)
c_char_array_type = CCharArrayType(None)
-c_unicode_type = UnicodeType()
c_char_ptr_type = CCharPtrType()
+c_utf8_char_array_type = CUTF8CharArrayType(None)
c_char_ptr_ptr_type = CPtrType(c_char_ptr_type)
c_py_ssize_t_ptr_type = CPtrType(c_py_ssize_t_type)
c_int_ptr_type = CPtrType(c_int_type)