blob: 7af9493a09f7e6b322b2cb93bf065e7e4d1e1f97 [file] [log] [blame]
from cython import final, no_gc, auto_pickle, freelist
from cpython cimport dict, int, list, long, tuple, type
from cpython.bool cimport PyBool_Check
from cpython.buffer cimport (
PyObject_GetBuffer, PyObject_GetBuffer, PyBUF_CONTIG_RO, PyBuffer_Release,
)
from cpython.bytes cimport (
PyBytes_AsStringAndSize, PyBytes_FromStringAndSize, PyBytes_Check,
)
from cpython.dict cimport PyDict_SetItem
from cpython.float cimport PyFloat_Check, PyFloat_AsDouble, PyFloat_FromDouble
from cpython.int cimport PyInt_Check
from cpython.list cimport PyList_Append
from cpython.long cimport PyLong_FromString, PyLong_Check
from cpython.object cimport PyObject, PyObject_GetIter
from cpython.type cimport PyType_Check
from cpython.unicode cimport PyUnicode_Check, PyUnicode_FromEncodedObject, PyUnicode_Format
from libcpp cimport bool as boolean
cdef extern from '<cstddef>' namespace 'std' nogil:
ctypedef unsigned long size_t
cdef extern from '<cstdint>' namespace 'std' nogil:
ctypedef unsigned char uint8_t
ctypedef unsigned short uint16_t
ctypedef unsigned long uint32_t
ctypedef unsigned long long uint64_t
ctypedef signed char int8_t
ctypedef signed short int16_t
ctypedef signed long int32_t
ctypedef signed long long int64_t
cdef extern from '<cstdio>' namespace 'std' nogil:
int snprintf(char *buffer, size_t buf_size, const char *format, ...)
size_t strlen(const char *s)
cdef extern from '<cstring>' namespace 'std' nogil:
void memcpy(void *dest, const void *std, size_t count)
void memset(void *dest, char value, size_t count)
size_t strlen(const char *s)
cdef extern from '<cmath>' nogil:
enum:
FP_INFINITE, FP_NAN, FP_NORMAL, FP_SUBNORMAL, FP_ZERO
cdef extern from '<cmath>' namespace 'std' nogil:
int fpclassify(...)
cdef extern from '<utility>' namespace 'std' nogil:
void swap[T](T&, T&)
cdef extern from 'Python.h':
ctypedef signed char Py_UCS1
ctypedef signed short Py_UCS2
ctypedef signed long Py_UCS4
cdef extern from 'src/native.hpp' namespace 'JSON5EncoderCpp' nogil:
int32_t cast_to_int32(...)
uint32_t cast_to_uint32(...)
ctypedef boolean AlwaysTrue
boolean obj_has_iter(object obj)
ctypedef char EscapeDctItem[8]
cppclass EscapeDct:
EscapeDctItem items[0x100]
boolean is_escaped(uint32_t c)
Py_ssize_t find_unescaped_range(const Py_UCS1 *start, Py_ssize_t length)
Py_ssize_t find_unescaped_range(const Py_UCS2 *start, Py_ssize_t length)
Py_ssize_t find_unescaped_range(const Py_UCS4 *start, Py_ssize_t length)
EscapeDct ESCAPE_DCT
enum:
VERSION_LENGTH
const char VERSION[]
enum:
LONGDESCRIPTION_LENGTH
const char LONGDESCRIPTION[]
const char HEX[]
boolean unicode_is_lo_surrogate(uint32_t ch)
boolean unicode_is_hi_surrogate(uint32_t ch)
uint32_t unicode_join_surrogates(uint32_t hi, uint32_t lo)
void reset_hash[T](T *obj)
AlwaysTrue exception_thrown() except True
void unreachable()
cdef extern from 'src/native.hpp' namespace 'JSON5EncoderCpp':
int iter_next(object iterator, PyObject **value) except -1
cdef extern from 'src/native.hpp' nogil:
boolean expect 'JSON5EncoderCpp_expect'(boolean actual, boolean expected)
cdef extern from 'src/_unicode_cat_of.hpp' namespace 'JSON5EncoderCpp' nogil:
unsigned unicode_cat_of(uint32_t codepoint)
cdef extern from 'src/_stack_heap_string.hpp' namespace 'JSON5EncoderCpp' nogil:
cdef cppclass StackHeapString [T]:
const T *data()
Py_ssize_t size()
boolean push_back(T codepoint) except False
cdef extern from 'src/_decoder_recursive_select.hpp' namespace 'JSON5EncoderCpp' nogil:
cdef enum DrsKind:
DRS_fail,
DRS_null, DRS_true, DRS_false, DRS_inf, DRS_nan,
DRS_string, DRS_number, DRS_recursive
DrsKind drs_lookup[128]
cdef extern from 'third-party/fast_double_parser/include/fast_double_parser.h' namespace 'fast_double_parser' nogil:
const char *parse_number(const char *p, double *outDouble)
cdef extern from 'src/dragonbox.cc' namespace 'dragonbox' nogil:
char *Dtoa(char* buffer, double value)
cdef extern from 'Python.h':
enum:
PyUnicode_WCHAR_KIND
PyUnicode_1BYTE_KIND
PyUnicode_2BYTE_KIND
PyUnicode_4BYTE_KIND
int PyUnicode_READY(object o) except -1
Py_ssize_t PyUnicode_GET_LENGTH(object o) nogil
int PyUnicode_KIND(object o) nogil
boolean PyUnicode_IS_ASCII(object) nogil
Py_UCS1 *PyUnicode_1BYTE_DATA(object o) nogil
Py_UCS2 *PyUnicode_2BYTE_DATA(object o) nogil
Py_UCS4 *PyUnicode_4BYTE_DATA(object o) nogil
boolean Py_EnterRecursiveCall(const char *where) except True
void Py_LeaveRecursiveCall()
bint Py_UNICODE_ISALPHA(Py_UCS4 ch) nogil
bint Py_UNICODE_ISDIGIT(Py_UCS4 ch) nogil
object PyUnicode_FromKindAndData(int kind, const void *buf, Py_ssize_t size)
const char *PyUnicode_AsUTF8AndSize(object o, Py_ssize_t *size) except NULL
object PyDict_SetDefault(object p, object key, object value)
object CallFunction 'PyObject_CallFunction'(PyObject *cb, const char *format, ...)
object CallObject 'PyObject_CallObject'(PyObject *cb, PyObject *args)
ctypedef signed long Py_hash
ctypedef signed short wchar_t
enum:
SSTATE_NOT_INTERNED
SSTATE_INTERNED_MORTAL
SSTATE_INTERNED_IMMORTAL
ctypedef struct __ascii_object_state:
uint8_t interned
uint8_t kind
boolean compact
boolean ascii
boolean ready
ctypedef struct PyASCIIObject:
Py_ssize_t length
Py_hash hash
wchar_t *wstr
__ascii_object_state state
ctypedef struct PyVarObject:
pass
ctypedef struct PyBytesObject:
PyVarObject ob_base
Py_hash ob_shash
char ob_sval[1]
AlwaysTrue ErrNoMemory 'PyErr_NoMemory'() except True
void *ObjectRealloc 'PyObject_Realloc'(void *p, size_t n)
void ObjectFree 'PyObject_Free'(void *p)
object ObjectInit 'PyObject_INIT'(PyObject *obj, type cls)
PyVarObject *ObjectInitVar 'PyObject_InitVar'(PyVarObject *obj, type cls, Py_ssize_t size)
object PyLong_FromString(const char *str, char **pend, int base)
ctypedef struct AsciiObject:
PyASCIIObject base
char data[1]
cdef extern from * nogil:
enum:
CYTHON_COMPILING_IN_PYPY
cdef type datetime, date, time, Decimal, Mapping, IOBase
cdef object saferepr
from collections.abc import Mapping
from datetime import datetime, date, time
from decimal import Decimal
from io import IOBase
from pprint import saferepr