1#
2#   C naming conventions
3#
4#
5#   Prefixes for generating C names.
6#   Collected here to facilitate ensuring uniqueness.
7#
8
9pyrex_prefix    = "__pyx_"
10
11
12codewriter_temp_prefix = pyrex_prefix + "t_"
13
14temp_prefix       = u"__cyt_"
15
16builtin_prefix    = pyrex_prefix + "builtin_"
17arg_prefix        = pyrex_prefix + "arg_"
18funcdoc_prefix    = pyrex_prefix + "doc_"
19enum_prefix       = pyrex_prefix + "e_"
20func_prefix       = pyrex_prefix + "f_"
21func_prefix_api   = pyrex_prefix + "api_f_"
22pyfunc_prefix     = pyrex_prefix + "pf_"
23pywrap_prefix     = pyrex_prefix + "pw_"
24genbody_prefix    = pyrex_prefix + "gb_"
25gstab_prefix      = pyrex_prefix + "getsets_"
26prop_get_prefix   = pyrex_prefix + "getprop_"
27const_prefix      = pyrex_prefix + "k_"
28py_const_prefix   = pyrex_prefix + "kp_"
29label_prefix      = pyrex_prefix + "L"
30pymethdef_prefix  = pyrex_prefix + "mdef_"
31method_wrapper_prefix = pyrex_prefix + "specialmethod_"
32methtab_prefix    = pyrex_prefix + "methods_"
33memtab_prefix     = pyrex_prefix + "members_"
34objstruct_prefix  = pyrex_prefix + "obj_"
35typeptr_prefix    = pyrex_prefix + "ptype_"
36prop_set_prefix   = pyrex_prefix + "setprop_"
37type_prefix       = pyrex_prefix + "t_"
38typeobj_prefix    = pyrex_prefix + "type_"
39var_prefix        = pyrex_prefix + "v_"
40varptr_prefix     = pyrex_prefix + "vp_"
41varptr_prefix_api = pyrex_prefix + "api_vp_"
42wrapperbase_prefix= pyrex_prefix + "wrapperbase_"
43pybuffernd_prefix   = pyrex_prefix + "pybuffernd_"
44pybufferstruct_prefix  = pyrex_prefix + "pybuffer_"
45vtable_prefix     = pyrex_prefix + "vtable_"
46vtabptr_prefix    = pyrex_prefix + "vtabptr_"
47vtabstruct_prefix = pyrex_prefix + "vtabstruct_"
48opt_arg_prefix    = pyrex_prefix + "opt_args_"
49convert_func_prefix = pyrex_prefix + "convert_"
50closure_scope_prefix = pyrex_prefix + "scope_"
51closure_class_prefix = pyrex_prefix + "scope_struct_"
52lambda_func_prefix = pyrex_prefix + "lambda_"
53module_is_main   = pyrex_prefix + "module_is_main_"
54defaults_struct_prefix = pyrex_prefix + "defaults"
55dynamic_args_cname = pyrex_prefix + "dynamic_args"
56
57interned_prefixes = {
58    'str': pyrex_prefix + "n_",
59    'int': pyrex_prefix + "int_",
60    'float': pyrex_prefix + "float_",
61    'tuple': pyrex_prefix + "tuple_",
62    'codeobj': pyrex_prefix + "codeobj_",
63    'slice': pyrex_prefix + "slice_",
64    'ustring': pyrex_prefix + "ustring_",
65    'umethod': pyrex_prefix + "umethod_",
66}
67
68ctuple_type_prefix = pyrex_prefix + "ctuple_"
69args_cname       = pyrex_prefix + "args"
70generator_cname  = pyrex_prefix + "generator"
71sent_value_cname = pyrex_prefix + "sent_value"
72pykwdlist_cname  = pyrex_prefix + "pyargnames"
73obj_base_cname   = pyrex_prefix + "base"
74builtins_cname   = pyrex_prefix + "b"
75preimport_cname  = pyrex_prefix + "i"
76moddict_cname    = pyrex_prefix + "d"
77dummy_cname      = pyrex_prefix + "dummy"
78filename_cname   = pyrex_prefix + "filename"
79modulename_cname = pyrex_prefix + "modulename"
80filetable_cname  = pyrex_prefix + "f"
81intern_tab_cname = pyrex_prefix + "intern_tab"
82kwds_cname       = pyrex_prefix + "kwds"
83lineno_cname     = pyrex_prefix + "lineno"
84clineno_cname    = pyrex_prefix + "clineno"
85cfilenm_cname    = pyrex_prefix + "cfilenm"
86local_tstate_cname = pyrex_prefix + "tstate"
87module_cname     = pyrex_prefix + "m"
88moddoc_cname     = pyrex_prefix + "mdoc"
89methtable_cname  = pyrex_prefix + "methods"
90retval_cname     = pyrex_prefix + "r"
91reqd_kwds_cname  = pyrex_prefix + "reqd_kwds"
92self_cname       = pyrex_prefix + "self"
93stringtab_cname  = pyrex_prefix + "string_tab"
94vtabslot_cname   = pyrex_prefix + "vtab"
95c_api_tab_cname  = pyrex_prefix + "c_api_tab"
96gilstate_cname   = pyrex_prefix + "state"
97skip_dispatch_cname = pyrex_prefix + "skip_dispatch"
98empty_tuple      = pyrex_prefix + "empty_tuple"
99empty_bytes      = pyrex_prefix + "empty_bytes"
100empty_unicode	 = pyrex_prefix + "empty_unicode"
101print_function   = pyrex_prefix + "print"
102print_function_kwargs   = pyrex_prefix + "print_kwargs"
103cleanup_cname    = pyrex_prefix + "module_cleanup"
104pymoduledef_cname = pyrex_prefix + "moduledef"
105pymoduledef_slots_cname = pyrex_prefix + "moduledef_slots"
106pymodinit_module_arg = pyrex_prefix + "pyinit_module"
107pymodule_create_func_cname = pyrex_prefix + "pymod_create"
108pymodule_exec_func_cname = pyrex_prefix + "pymod_exec"
109optional_args_cname = pyrex_prefix + "optional_args"
110import_star      = pyrex_prefix + "import_star"
111import_star_set  = pyrex_prefix + "import_star_set"
112outer_scope_cname= pyrex_prefix + "outer_scope"
113cur_scope_cname  = pyrex_prefix + "cur_scope"
114enc_scope_cname  = pyrex_prefix + "enc_scope"
115frame_cname      = pyrex_prefix + "frame"
116frame_code_cname = pyrex_prefix + "frame_code"
117binding_cfunc    = pyrex_prefix + "binding_PyCFunctionType"
118fused_func_prefix = pyrex_prefix + 'fuse_'
119quick_temp_cname = pyrex_prefix + "temp" # temp variable for quick'n'dirty temping
120tp_dict_version_temp = pyrex_prefix + "tp_dict_version"
121obj_dict_version_temp = pyrex_prefix + "obj_dict_version"
122type_dict_guard_temp = pyrex_prefix + "type_dict_guard"
123cython_runtime_cname   = pyrex_prefix + "cython_runtime"
124
125global_code_object_cache_find = pyrex_prefix + 'find_code_object'
126global_code_object_cache_insert = pyrex_prefix + 'insert_code_object'
127
128genexpr_id_ref = 'genexpr'
129freelist_name  = 'freelist'
130freecount_name = 'freecount'
131
132line_c_macro = "__LINE__"
133
134file_c_macro = "__FILE__"
135
136extern_c_macro  = pyrex_prefix.upper() + "EXTERN_C"
137
138exc_type_name   = pyrex_prefix + "exc_type"
139exc_value_name  = pyrex_prefix + "exc_value"
140exc_tb_name     = pyrex_prefix + "exc_tb"
141exc_lineno_name = pyrex_prefix + "exc_lineno"
142
143parallel_exc_type = pyrex_prefix + "parallel_exc_type"
144parallel_exc_value = pyrex_prefix + "parallel_exc_value"
145parallel_exc_tb = pyrex_prefix + "parallel_exc_tb"
146parallel_filename = pyrex_prefix + "parallel_filename"
147parallel_lineno = pyrex_prefix + "parallel_lineno"
148parallel_clineno = pyrex_prefix + "parallel_clineno"
149parallel_why = pyrex_prefix + "parallel_why"
150
151exc_vars = (exc_type_name, exc_value_name, exc_tb_name)
152
153api_name        = pyrex_prefix + "capi__"
154
155h_guard_prefix   = "__PYX_HAVE__"
156api_guard_prefix = "__PYX_HAVE_API__"
157api_func_guard   = "__PYX_HAVE_API_FUNC_"
158
159PYX_NAN          = "__PYX_NAN()"
160
161def py_version_hex(major, minor=0, micro=0, release_level=0, release_serial=0):
162    return (major << 24) | (minor << 16) | (micro << 8) | (release_level << 4) | (release_serial)
163