123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- /*
- ** $Id: lptypes.h,v 1.14 2015/09/28 17:17:41 roberto Exp $
- ** LPeg - PEG pattern matching for Lua
- ** Copyright 2007-2015, Lua.org & PUC-Rio (see 'lpeg.html' for license)
- ** written by Roberto Ierusalimschy
- */
-
- #if !defined(lptypes_h)
- #define lptypes_h
-
-
- #if !defined(LPEG_DEBUG)
- #define NDEBUG
- #endif
-
- #include <assert.h>
- #include <limits.h>
-
- #include "lua.h"
-
-
- #define VERSION "1.0.0"
-
-
- #define PATTERN_T "lpeg-pattern"
- #define MAXSTACKIDX "lpeg-maxstack"
-
-
- /*
- ** compatibility with Lua 5.1
- */
- #if (LUA_VERSION_NUM == 501)
-
- #define lp_equal lua_equal
-
- #define lua_getuservalue lua_getfenv
- #define lua_setuservalue lua_setfenv
-
- #define lua_rawlen lua_objlen
-
- #define luaL_setfuncs(L,f,n) luaL_register(L,NULL,f)
- #define luaL_newlib(L,f) luaL_register(L,"lpeg",f)
-
- #endif
-
-
- #if !defined(lp_equal)
- #define lp_equal(L,idx1,idx2) lua_compare(L,(idx1),(idx2),LUA_OPEQ)
- #endif
-
-
- /* default maximum size for call/backtrack stack */
- #if !defined(MAXBACK)
- #define MAXBACK 400
- #endif
-
-
- /* maximum number of rules in a grammar */
- #if !defined(MAXRULES)
- #define MAXRULES 1000
- #endif
-
-
-
- /* initial size for capture's list */
- #define INITCAPSIZE 32
-
-
- /* index, on Lua stack, for subject */
- #define SUBJIDX 2
-
- /* number of fixed arguments to 'match' (before capture arguments) */
- #define FIXEDARGS 3
-
- /* index, on Lua stack, for capture list */
- #define caplistidx(ptop) ((ptop) + 2)
-
- /* index, on Lua stack, for pattern's ktable */
- #define ktableidx(ptop) ((ptop) + 3)
-
- /* index, on Lua stack, for backtracking stack */
- #define stackidx(ptop) ((ptop) + 4)
-
-
-
- typedef unsigned char byte;
-
-
- #define BITSPERCHAR 8
-
- #define CHARSETSIZE ((UCHAR_MAX/BITSPERCHAR) + 1)
-
-
-
- typedef struct Charset {
- byte cs[CHARSETSIZE];
- } Charset;
-
-
-
- #define loopset(v,b) { int v; for (v = 0; v < CHARSETSIZE; v++) {b;} }
-
- /* access to charset */
- #define treebuffer(t) ((byte *)((t) + 1))
-
- /* number of slots needed for 'n' bytes */
- #define bytes2slots(n) (((n) - 1) / sizeof(TTree) + 1)
-
- /* set 'b' bit in charset 'cs' */
- #define setchar(cs,b) ((cs)[(b) >> 3] |= (1 << ((b) & 7)))
-
-
- /*
- ** in capture instructions, 'kind' of capture and its offset are
- ** packed in field 'aux', 4 bits for each
- */
- #define getkind(op) ((op)->i.aux & 0xF)
- #define getoff(op) (((op)->i.aux >> 4) & 0xF)
- #define joinkindoff(k,o) ((k) | ((o) << 4))
-
- #define MAXOFF 0xF
- #define MAXAUX 0xFF
-
-
- /* maximum number of bytes to look behind */
- #define MAXBEHIND MAXAUX
-
-
- /* maximum size (in elements) for a pattern */
- #define MAXPATTSIZE (SHRT_MAX - 10)
-
-
- /* size (in elements) for an instruction plus extra l bytes */
- #define instsize(l) (((l) + sizeof(Instruction) - 1)/sizeof(Instruction) + 1)
-
-
- /* size (in elements) for a ISet instruction */
- #define CHARSETINSTSIZE instsize(CHARSETSIZE)
-
- /* size (in elements) for a IFunc instruction */
- #define funcinstsize(p) ((p)->i.aux + 2)
-
-
-
- #define testchar(st,c) (((int)(st)[((c) >> 3)] & (1 << ((c) & 7))))
-
-
- #endif
|