|
1 | | -from mypyc.ir.deps import BYTES_WRITER_EXTRA_OPS, LIBRT_STRINGS |
| 1 | +from mypyc.ir.deps import BYTES_WRITER_EXTRA_OPS, LIBRT_STRINGS, STRING_WRITER_EXTRA_OPS |
2 | 2 | from mypyc.ir.ops import ERR_MAGIC, ERR_NEVER |
3 | 3 | from mypyc.ir.rtypes import ( |
4 | 4 | bool_rprimitive, |
5 | 5 | bytearray_rprimitive, |
6 | 6 | bytes_rprimitive, |
7 | 7 | bytes_writer_rprimitive, |
| 8 | + int32_rprimitive, |
8 | 9 | int64_rprimitive, |
9 | 10 | none_rprimitive, |
10 | 11 | short_int_rprimitive, |
| 12 | + str_rprimitive, |
| 13 | + string_writer_rprimitive, |
11 | 14 | uint8_rprimitive, |
12 | 15 | void_rtype, |
13 | 16 | ) |
|
126 | 129 | experimental=True, |
127 | 130 | dependencies=[LIBRT_STRINGS, BYTES_WRITER_EXTRA_OPS], |
128 | 131 | ) |
| 132 | + |
| 133 | +# StringWriter operations |
| 134 | +function_op( |
| 135 | + name="librt.strings.StringWriter", |
| 136 | + arg_types=[], |
| 137 | + return_type=string_writer_rprimitive, |
| 138 | + c_function_name="LibRTStrings_StringWriter_internal", |
| 139 | + error_kind=ERR_MAGIC, |
| 140 | + experimental=True, |
| 141 | + dependencies=[LIBRT_STRINGS], |
| 142 | +) |
| 143 | + |
| 144 | +method_op( |
| 145 | + name="getvalue", |
| 146 | + arg_types=[string_writer_rprimitive], |
| 147 | + return_type=str_rprimitive, |
| 148 | + c_function_name="LibRTStrings_StringWriter_getvalue_internal", |
| 149 | + error_kind=ERR_MAGIC, |
| 150 | + experimental=True, |
| 151 | + dependencies=[LIBRT_STRINGS], |
| 152 | +) |
| 153 | + |
| 154 | +method_op( |
| 155 | + name="write", |
| 156 | + arg_types=[string_writer_rprimitive, str_rprimitive], |
| 157 | + return_type=none_rprimitive, |
| 158 | + c_function_name="LibRTStrings_StringWriter_write_internal", |
| 159 | + error_kind=ERR_MAGIC, |
| 160 | + experimental=True, |
| 161 | + dependencies=[LIBRT_STRINGS], |
| 162 | +) |
| 163 | + |
| 164 | +method_op( |
| 165 | + name="append", |
| 166 | + arg_types=[string_writer_rprimitive, int32_rprimitive], |
| 167 | + return_type=none_rprimitive, |
| 168 | + c_function_name="CPyStringWriter_Append", |
| 169 | + error_kind=ERR_MAGIC, |
| 170 | + experimental=True, |
| 171 | + dependencies=[LIBRT_STRINGS, STRING_WRITER_EXTRA_OPS], |
| 172 | +) |
| 173 | + |
| 174 | +function_op( |
| 175 | + name="builtins.len", |
| 176 | + arg_types=[string_writer_rprimitive], |
| 177 | + return_type=short_int_rprimitive, |
| 178 | + c_function_name="CPyStringWriter_Len", |
| 179 | + error_kind=ERR_NEVER, |
| 180 | + experimental=True, |
| 181 | + dependencies=[LIBRT_STRINGS, STRING_WRITER_EXTRA_OPS], |
| 182 | +) |
| 183 | + |
| 184 | +# StringWriter index adjustment - convert negative index to positive |
| 185 | +string_writer_adjust_index_op = custom_primitive_op( |
| 186 | + name="string_writer_adjust_index", |
| 187 | + arg_types=[string_writer_rprimitive, int64_rprimitive], |
| 188 | + return_type=int64_rprimitive, |
| 189 | + c_function_name="CPyStringWriter_AdjustIndex", |
| 190 | + error_kind=ERR_NEVER, |
| 191 | + experimental=True, |
| 192 | + dependencies=[LIBRT_STRINGS, STRING_WRITER_EXTRA_OPS], |
| 193 | +) |
| 194 | + |
| 195 | +# StringWriter range check - check if index is in valid range |
| 196 | +string_writer_range_check_op = custom_primitive_op( |
| 197 | + name="string_writer_range_check", |
| 198 | + arg_types=[string_writer_rprimitive, int64_rprimitive], |
| 199 | + return_type=bool_rprimitive, |
| 200 | + c_function_name="CPyStringWriter_RangeCheck", |
| 201 | + error_kind=ERR_NEVER, |
| 202 | + experimental=True, |
| 203 | + dependencies=[LIBRT_STRINGS, STRING_WRITER_EXTRA_OPS], |
| 204 | +) |
| 205 | + |
| 206 | +# StringWriter.__getitem__() - get character at index (no bounds checking) |
| 207 | +string_writer_get_item_unsafe_op = custom_primitive_op( |
| 208 | + name="string_writer_get_item", |
| 209 | + arg_types=[string_writer_rprimitive, int64_rprimitive], |
| 210 | + return_type=int32_rprimitive, |
| 211 | + c_function_name="CPyStringWriter_GetItem", |
| 212 | + error_kind=ERR_NEVER, |
| 213 | + experimental=True, |
| 214 | + dependencies=[LIBRT_STRINGS, STRING_WRITER_EXTRA_OPS], |
| 215 | +) |
0 commit comments