Changeset 3457 for trunk/src/kash/memalloc.h
- Timestamp:
- Sep 14, 2020, 7:34:28 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kash/memalloc.h
r3456 r3457 39 39 char *stacknxt; 40 40 int stacknleft; 41 #ifdef KASH_SEPARATE_PARSER_ALLOCATOR 42 unsigned pstacksize; 43 #endif 41 44 struct stackmark *marknext; 42 45 }; … … 84 87 * subshells by simple reference counting. 85 88 * @{ */ 89 #ifdef KASH_SEPARATE_PARSER_ALLOCATOR 90 struct pstack_block; 91 unsigned pstackretain(struct pstack_block *); 92 unsigned pstackrelease(struct shinstance *, struct pstack_block *); 93 struct pstack_block *pstackpush(struct shinstance *); 94 #endif 86 95 void *pstalloc(struct shinstance *, size_t); 87 96 union node; … … 90 99 struct nodelist *pstalloclist(struct shinstance *); 91 100 char *pstsavestr(struct shinstance *, const char *); /* was: stsavestr */ 92 #define PSTARTSTACKSTR(psh, p) do { (p) = (psh)->stacknxt; (psh)->sstrnleft = (psh)->stacknleft; } while (0)93 101 char *pstmakestrspace(struct shinstance *, size_t, char *); /* was: makestrspace / growstackstr */ 94 #define PSTCHECKSTRSPACE(psh, n, p) do { if ((psh)->sstrnleft >= (n)) {/*likely*/} \ 102 char *pstputcgrow(struct shinstance *, char *, char); 103 char *pstgrabstr(struct shinstance *, char *); /* was: grabstackstr / grabstackblock*/ 104 #ifdef KASH_SEPARATE_PARSER_ALLOCATOR 105 # define PSTBLOCK(psh) ((psh)->curpstack->nextbyte) 106 # define PSTARTSTACKSTR(psh, p) do { \ 107 pstack_block *pstmacro = (psh)->curpstack; \ 108 pstmacro->strleft = pstmacro->avail; \ 109 (p) = pstmacro->nextbyte; \ 110 } while (0) 111 # define PSTCHECKSTRSPACE(psh, n, p) do { \ 112 if ((psh)->curpstack->strleft >= (n)) {/*likely*/} \ 113 else { (p) = pstmakestrspace(psh, (n), (p)); assert((psh)->curpstack->strleft >= (n)); } \ 114 } while (0) 115 # define PSTUPUTC(psh, c, p) do { \ 116 assert((psh)->curpstack->strleft > 0); \ 117 (psh)->curpstack->strleft -= 1; \ 118 *(p)++ = (c); \ 119 } while (0) 120 # define PSTPUTC(psh, c, p) do { \ 121 if ((ssize_t)--(psh)->curpstack->strleft >= 0) *(p)++ = (c); \ 122 else (p) = pstputcgrow(psh, (p), (c)); \ 123 } while (0) 124 # define PSTPUTSTRN(psh, str, n, p) do { \ 125 pstack_block *pstmacro = (psh)->curpstack; \ 126 if (pstmacro->strleft >= (n)) {/*likely?*/} \ 127 else (p) = pstmakestrspace(psh, (n), (p)); \ 128 pstmacro->strleft -= (n); \ 129 memcpy((p), (str), (n)); \ 130 (p) += (n); \ 131 } while (0) 132 #else 133 # define PSTBLOCK(psh) ((psh)->stacknxt) 134 # define PSTARTSTACKSTR(psh, p) do { (p) = (psh)->stacknxt; (psh)->sstrnleft = (psh)->stacknleft; } while (0) 135 # define PSTCHECKSTRSPACE(psh, n, p) do { if ((psh)->sstrnleft >= (n)) {/*likely*/} \ 95 136 else { (p) = pstmakestrspace(psh, (n), (p)); assert((psh)->sstrnleft >= (n)); } } while (0) 96 #define PSTUPUTC(psh, c, p) do { assert((psh)->sstrnleft > 0); --(psh)->sstrnleft; *(p)++ = (c); } while (0) 97 char *pstputcgrow(struct shinstance *, char *, char); 98 #define PSTPUTC(psh, c, p) do { if (--(psh)->sstrnleft >= 0) *(p)++ = (c); else (p) = pstputcgrow(psh, (p), (c)); } while (0) 99 #define PSTPUTSTRN(psh, str, n, p) do { if ((psh)->sstrnleft >= (n)) {/*likely?*/} else (p) = pstmakestrspace(psh, (n), (p)); \ 137 # define PSTUPUTC(psh, c, p) do { assert((psh)->sstrnleft > 0); --(psh)->sstrnleft; *(p)++ = (c); } while (0) 138 # define PSTPUTC(psh, c, p) do { if (--(psh)->sstrnleft >= 0) *(p)++ = (c); else (p) = pstputcgrow(psh, (p), (c)); } while (0) 139 # define PSTPUTSTRN(psh, str, n, p) do { if ((psh)->sstrnleft >= (n)) {/*likely?*/} else (p) = pstmakestrspace(psh, (n), (p)); \ 100 140 memcpy((p), (str), (n)); (psh)->sstrnleft -= (n); (p) += (n); } while (0) 101 #define PSTBLOCK(psh) ((psh)->stacknxt) 102 char *pstgrabstr(struct shinstance *, char *); /* was: grabstackstr / grabstackblock*/ 141 #endif 103 142 /** @} */ 104 143
Note:
See TracChangeset
for help on using the changeset viewer.