mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-01-31 11:37:35 +00:00
39bf41f4eb
- Python static hello world now 1.8mb - Python static fully loaded now 10mb - Python HTTPS client now uses MbedTLS - Python REPL now completes import stmts - Increase stack size for Python for now - Begin synthesizing posixpath and ntpath - Restore Python \N{UNICODE NAME} support - Restore Python NFKD symbol normalization - Add optimized code path for Intel SHA-NI - Get more Python unit tests passing faster - Get Python help() pagination working on NT - Python hashlib now supports MbedTLS PBKDF2 - Make memcpy/memmove/memcmp/bcmp/etc. faster - Add Mersenne Twister and Vigna to LIBC_RAND - Provide privileged __printf() for error code - Fix zipos opendir() so that it reports ENOTDIR - Add basic chmod() implementation for Windows NT - Add Cosmo's best functions to Python cosmo module - Pin function trace indent depth to that of caller - Show memory diagram on invalid access in MODE=dbg - Differentiate stack overflow on crash in MODE=dbg - Add stb_truetype and tools for analyzing font files - Upgrade to UNICODE 13 and reduce its binary footprint - COMPILE.COM now logs resource usage of build commands - Start implementing basic poll() support on bare metal - Set getauxval(AT_EXECFN) to GetModuleFileName() on NT - Add descriptions to strerror() in non-TINY build modes - Add COUNTBRANCH() macro to help with micro-optimizations - Make error / backtrace / asan / memory code more unbreakable - Add fast perfect C implementation of μ-Law and a-Law audio codecs - Make strtol() functions consistent with other libc implementations - Improve Linenoise implementation (see also github.com/jart/bestline) - COMPILE.COM now suppresses stdout/stderr of successful build commands
85 lines
2.7 KiB
C
85 lines
2.7 KiB
C
#ifndef SRE_INCLUDED
|
|
#define SRE_INCLUDED
|
|
#include "third_party/python/Include/object.h"
|
|
#include "third_party/python/Include/unicodeobject.h"
|
|
#include "third_party/python/Modules/sre_constants.h"
|
|
|
|
/* size of a code word (must be unsigned short or larger, and
|
|
large enough to hold a UCS4 character) */
|
|
#define SRE_CODE Py_UCS4
|
|
#if SIZEOF_SIZE_T > 4
|
|
#define SRE_MAXREPEAT (~(SRE_CODE)0)
|
|
#define SRE_MAXGROUPS ((~(SRE_CODE)0) / 2)
|
|
#else
|
|
#define SRE_MAXREPEAT ((SRE_CODE)PY_SSIZE_T_MAX)
|
|
#define SRE_MAXGROUPS ((SRE_CODE)PY_SSIZE_T_MAX / SIZEOF_SIZE_T / 2)
|
|
#endif
|
|
|
|
typedef struct {
|
|
PyObject_VAR_HEAD Py_ssize_t groups; /* must be first! */
|
|
PyObject* groupindex;
|
|
PyObject* indexgroup;
|
|
/* compatibility */
|
|
PyObject* pattern; /* pattern source (or None) */
|
|
int flags; /* flags used when compiling pattern source */
|
|
PyObject* weakreflist; /* List of weak references */
|
|
int isbytes; /* pattern type (1 - bytes, 0 - string, -1 - None) */
|
|
/* pattern code */
|
|
Py_ssize_t codesize;
|
|
SRE_CODE code[1];
|
|
} PatternObject;
|
|
|
|
#define PatternObject_GetCode(o) (((PatternObject*)(o))->code)
|
|
|
|
typedef struct {
|
|
PyObject_VAR_HEAD PyObject*
|
|
string; /* link to the target string (must be first) */
|
|
PyObject* regs; /* cached list of matching spans */
|
|
PatternObject* pattern; /* link to the regex (pattern) object */
|
|
Py_ssize_t pos, endpos; /* current target slice */
|
|
Py_ssize_t lastindex; /* last index marker seen by the engine (-1 if none) */
|
|
Py_ssize_t groups; /* number of groups (start/end marks) */
|
|
Py_ssize_t mark[1];
|
|
} MatchObject;
|
|
|
|
typedef unsigned int (*SRE_TOLOWER_HOOK)(unsigned int ch);
|
|
|
|
typedef struct SRE_REPEAT_T {
|
|
Py_ssize_t count;
|
|
SRE_CODE* pattern; /* points to REPEAT operator arguments */
|
|
void* last_ptr; /* helper to check for infinite loops */
|
|
struct SRE_REPEAT_T* prev; /* points to previous repeat context */
|
|
} SRE_REPEAT;
|
|
|
|
typedef struct {
|
|
/* string pointers */
|
|
void* ptr; /* current position (also end of current slice) */
|
|
void* beginning; /* start of original string */
|
|
void* start; /* start of current slice */
|
|
void* end; /* end of original string */
|
|
/* attributes for the match object */
|
|
PyObject* string;
|
|
Py_ssize_t pos, endpos;
|
|
int isbytes;
|
|
int charsize; /* character size */
|
|
/* registers */
|
|
Py_ssize_t lastindex;
|
|
Py_ssize_t lastmark;
|
|
void** mark;
|
|
/* dynamically allocated stuff */
|
|
char* data_stack;
|
|
size_t data_stack_size;
|
|
size_t data_stack_base;
|
|
Py_buffer buffer;
|
|
/* current repeat context */
|
|
SRE_REPEAT* repeat;
|
|
/* hooks */
|
|
SRE_TOLOWER_HOOK lower, upper;
|
|
} SRE_STATE;
|
|
|
|
typedef struct {
|
|
PyObject_HEAD PyObject* pattern;
|
|
SRE_STATE state;
|
|
} ScannerObject;
|
|
|
|
#endif /* SRE_INCLUDED */
|