Changeset 4
- Timestamp:
- 05/13/2006 01:54:55 AM (3 years ago)
- Location:
- trunk
- Files:
-
- 6 modified
-
mkstructinfo.awk (modified) (1 diff)
-
processor/hashtable.m4 (modified) (1 diff)
-
processor/head.m4 (modified) (2 diffs)
-
processor/main.m4 (modified) (4 diffs)
-
processor/processor.m4 (modified) (5 diffs)
-
processor/struct.m4 (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/mkstructinfo.awk
r1 r4 22 22 # elms = elms " `" buffer[i] "'"; 23 23 elm = elm "sizeof(((" instruct "*)NULL)->" buffer[i] ")"; 24 elms = elms " " buffer[i] ""; 24 25 if (elms == "") { 26 elms = buffer[i]; 27 } 28 else { 29 elms = elms "," buffer[i]; 30 } 25 31 } 26 32 printf "define(`ELEMENTSOF_%s', `%s')\n", instruct, elms; -
trunk/processor/hashtable.m4
r1 r4 101 101 IFCOPY(`pnew->pData = &pnew->pDataPtr;') 102 102 dnl no alloc 103 STRUCT_P_EX(`$2', pnew->pData, (($2*)b->pData), ` $3', ` ')103 STRUCT_P_EX(`$2', pnew->pData, (($2*)b->pData), `', `$3', ` ') 104 104 } 105 105 else { 106 STRUCT_P_EX(`$2', pnew->pData, (($2*)b->pData), ` $3')106 STRUCT_P_EX(`$2', pnew->pData, (($2*)b->pData), `', `$3') 107 107 IFCOPY(`pnew->pDataPtr = NULL;') 108 108 } -
trunk/processor/head.m4
r1 r4 7 7 #include "zend_compile.h" 8 8 #include "zend_API.h" 9 #include "zend_ini.h" 9 10 10 11 #include "xcache.h" … … 29 30 #undef NDEBUG 30 31 #include <assert.h> 31 include( structinfo.m4)32 include(builddir`/structinfo.m4') 32 33 ') 33 34 #ifndef NDEBUG -
trunk/processor/main.m4
r1 r4 87 87 ') 88 88 dnl }}} 89 dnl {{{ PROC_CLASS_ENTRY_P 90 define(`PROC_CLASS_ENTRY_P', `PROC_CLASS_ENTRY_P_EX(`dst->$1', `src->$1')`'DONE(`$1')') 89 dnl {{{ PROC_CLASS_ENTRY_P(1:elm) 90 define(`PROC_CLASS_ENTRY_P', `PROC_CLASS_ENTRY_P_EX(`dst->$1', `src->$1', `$1')`'DONE(`$1')') 91 dnl PROC_CLASS_ENTRY_P_EX(1:dst, 2:src, 3:elm-name) 91 92 define(`PROC_CLASS_ENTRY_P_EX', ` 92 93 if ($2) { 93 94 IFSTORE(`$1 = (zend_class_entry *) xc_get_class_num(processor, $2);') 94 95 IFRESTORE(`$1 = xc_get_class(processor, (zend_uint) $2);') 95 IFDASM(`add_assoc_stringl_ex(dst, ZEND_STRS(" patsubst(`$1', `dst->')"), $2->name, strlen($2->name), 1);')96 IFDASM(`add_assoc_stringl_ex(dst, ZEND_STRS("$3"), $2->name, strlen($2->name), 1);') 96 97 } 97 98 else { 98 COPYNULL_EX( $1)99 COPYNULL_EX(`$1', `$3') 99 100 } 100 101 ') … … 132 133 define(`SETNULL', `SETNULL_EX(`dst->$1')DONE(`$1')') 133 134 dnl }}} 134 dnl {{{ COPYNULL_EX 135 dnl {{{ COPYNULL_EX(1:dst, 2:elm-name) 135 136 define(`COPYNULL_EX', ` 136 IFDASM(`add_assoc_null_ex(dst, ZEND_STRS(" patsubst(`$1', `dst->')"));')137 IFDASM(`add_assoc_null_ex(dst, ZEND_STRS("$2"));') 137 138 IFNOTMEMCPY(`IFCOPY(`$1 = NULL;')') 138 139 ') 140 dnl }}} 141 dnl {{{ COPYNULL(1:elm) 142 # foreach(VAR, (LIST), STMT) 143 m4_define([foreach], 144 [m4_pushdef([$1])_foreach([$1], [$2], [$3])m4_popdef([$1])]) 145 m4_define([_arg1], [$1]) 146 m4_define([_foreach], 147 [ifelse([$2], [()], , 148 [m4_define([$1], _arg1$2)$3[]_foreach([$1], 149 (shift$2), 150 [$3])])]) 139 151 define(`COPYNULL', ` 140 COPYNULL_EX(`dst->$1')DONE(`$1') 152 COPYNULL_EX(`dst->$1', `$2')DONE(`$1') 153 ') 154 dnl }}} 155 dnl {{{ LIST_DIFF(1:left-list, 2:right-list) 156 define(`foreach', 157 `pushdef(`$1')_foreach(`$1', `$2', `$3')popdef(`$1')') 158 define(`_arg1', `$1') 159 define(`_foreach', 160 `ifelse(`$2', `()', , 161 `define(`$1', _arg1$2)$3`'_foreach(`$1', 162 (shift$2), 163 `$3')')') 164 define(`LIST_DIFF', `dnl 165 foreach(`i', `($1)', `pushdef(`item_'defn(`i'))')dnl allocate variable for items in $1 166 foreach(`i', `($2)', `pushdef(`item_'defn(`i'))undefine(`item_'defn(`i'))')dnl allocate variable for items in $2, and undefine it 167 foreach(`i', `($1)', `ifdef(`item_'defn(`i'), `defn(`i') ')')dnl see what is still defined 168 foreach(`i', `($2)', `popdef(`item_'defn(`i'))')dnl 169 foreach(`i', `($1)', `popdef(`item_'defn(`i'))')dnl 141 170 ') 142 171 dnl }}} … … 147 176 ')') 148 177 define(`DONE', ` 149 dnl ifelse(regexp(defn(`ELEMENTS'), ` $1'), -1, m4_errprint(`Unknown $1') m4exit(1)) 150 define(`ELEMENTS', patsubst(defn(`ELEMENTS'), ` $1\>')) 178 define(`ELEMENTS_DONE', defn(`ELEMENTS_DONE')`,$1') 151 179 DONE_SIZE(`sizeof(src->$1)') 152 180 ') … … 186 214 EXPORT(`zval') 187 215 188 include( hashtable.m4)189 include(s tring.m4)190 include(s truct.m4)191 include( dispatch.m4)192 include( head.m4)216 include(srcdir`/processor/hashtable.m4') 217 include(srcdir`/processor/string.m4') 218 include(srcdir`/processor/struct.m4') 219 include(srcdir`/processor/dispatch.m4') 220 include(srcdir`/processor/head.m4') 193 221 194 222 define(`IFNOTMEMCPY', `ifdef(`USEMEMCPY', `', `$1')') 195 REDEF(`KIND', `calc') include( processor.m4)196 REDEF(`KIND', `store') include( processor.m4)197 REDEF(`KIND', `restore') include( processor.m4)223 REDEF(`KIND', `calc') include(srcdir`/processor/processor.m4') 224 REDEF(`KIND', `store') include(srcdir`/processor/processor.m4') 225 REDEF(`KIND', `restore') include(srcdir`/processor/processor.m4') 198 226 199 227 REDEF(`IFNOTMEMCPY', `$1') 200 228 #ifdef HAVE_XCACHE_DPRINT 201 REDEF(`KIND', `dprint') include( processor.m4)229 REDEF(`KIND', `dprint') include(srcdir`/processor/processor.m4') 202 230 #endif /* HAVE_XCACHE_DPRINT */ 203 231 #ifdef HAVE_XCACHE_DISASSEMBLER 204 REDEF(`KIND', `dasm') include( processor.m4)232 REDEF(`KIND', `dasm') include(srcdir`/processor/processor.m4') 205 233 #endif /* HAVE_XCACHE_DISASSEMBLER */ 206 234 #ifdef HAVE_XCACHE_ASSEMBLER 207 REDEF(`KIND', `asm') include( processor.m4)235 REDEF(`KIND', `asm') include(srcdir`/processor/processor.m4') 208 236 #endif /* HAVE_XCACHE_ASSEMBLER */ 209 237 -
trunk/processor/processor.m4
r1 r4 184 184 dnl fprintf(stderr, "copy from %p to %p\n", src[0], dst[0]); 185 185 ') 186 STRUCT_P_EX(zval, dst[0], src[0], ` ', ` ')186 STRUCT_P_EX(zval, dst[0], src[0], `[0]', `', ` ') 187 187 } while (0); 188 188 ') … … 284 284 if (src->num_interfaces) { 285 285 CALLOC(dst->interfaces, zend_class_entry*, src->num_interfaces) 286 DONE(`interfaces') 286 287 } 287 288 else { 288 COPYNULL _EX(dst->interfaces)289 COPYNULL(interfaces) 289 290 } 290 291 ') … … 302 303 add_assoc_zval_ex(dst, ZEND_STRS("interfaces"), arr); 303 304 */ 305 DONE(`interfaces') 304 306 } 305 307 else { 306 COPYNULL_EX(dst->interfaces) 307 } 308 ') 309 DONE(`interfaces') 308 COPYNULL(interfaces) 309 } 310 ') 311 IFRESTORE(`', ` 312 IFDASM(`', ` 313 DONE(`interfaces') 314 ') 315 ') 310 316 DISPATCH(zend_uint, num_interfaces) 311 317 … … 534 540 dnl zend_cv.m4 is illegal to be made public, don not ask me for it 535 541 IFDASM(` 536 sinclude( `zend_cv.m4')542 sinclude(srcdir`/processor/zend_cv.m4') 537 543 ') 538 544 #endif … … 647 653 } 648 654 ') 649 STRUCT_P_EX(zval_ptr, dst->value, src->value, ` ', `&')655 STRUCT_P_EX(zval_ptr, dst->value, src->value, `value', `', `&') 650 656 DONE(value) 651 657 ') -
trunk/processor/struct.m4
r1 r4 3 3 ') 4 4 dnl {{{ DECL_STRUCT_P_FUNC(1:type, 2:name, 3:comma=;) 5 define(`DECL_STRUCT_P_FUNC', ` patsubst(5 define(`DECL_STRUCT_P_FUNC', `translit( 6 6 pushdefFUNC_NAME(`$1', `$2') 7 7 define(`DEFINED_'ifelse(`$2', `', `$1', `$2'), `') … … 17 17 )ifelse(`$3', `', `;') 18 18 popdef(`FUNC_NAME')dnl 19 , ` [20 ]+', ` ')')19 , ` 20 ', ` ')') 21 21 dnl }}} 22 22 dnl {{{ DEF_STRUCT_P_FUNC(1:type, 2:name, 3:body) … … 35 35 int assert_size = SIZEOF_$1, assert_count = COUNTOF_$1; 36 36 int done_size = 0, done_count = 0; 37 ifdef(`ELEMENTSOF_$1', ` 38 define(`ELEMENTS', defn(`ELEMENTSOF_$1')) 39 ') 37 pushdef(`ELEMENTS_DONE') 40 38 /* }}} */ 41 39 IFRESTORE(`assert(xc_is_shm(src));') … … 75 73 } 76 74 ifdef(`ELEMENTSOF_$1', ` 77 ifelse(ELEMENTS, , , ` 75 pushdef(`ELEMENTS_UNDONE', LIST_DIFF(defn(`ELEMENTSOF_$1'), defn(`ELEMENTS_DONE'))) 76 ifelse(defn(`ELEMENTS_UNDONE'), , , ` 78 77 m4_errprint(`====' KIND `$1 =================') 79 m4_errprint(`expected:' ELEMENTSOF_$1)80 m4_errprint(`missing :' ELEMENTS)78 m4_errprint(`expected:' defn(`ELEMENTSOF_$1')) 79 m4_errprint(`missing :' defn(`ELEMENTS_UNDONE')) 81 80 define(`EXIT_PENDING', 1) 82 81 ') 82 popdef(`ELEMENTS_UNDONE') 83 83 ') 84 undefine(`ELEMENTS')85 84 /* }}} */ 86 85 ')') 86 IFASSERT(` 87 undefine(`ELEMENTS_DONE') 88 ') 87 89 } 88 90 /* }`}'} */ … … 90 92 ') 91 93 dnl }}} 92 dnl {{{ STRUCT_P_EX(1:type, 2:dst, 3:src, 4: name=type, 5:&)94 dnl {{{ STRUCT_P_EX(1:type, 2:dst, 3:src, 4:elm-name, 5:name=type, 6:&) 93 95 define(`STRUCT_P_EX', ` 94 96 DBG(`$0($*)') 95 pushdefFUNC_NAME(`$1', `$ 4')96 ifdef(`DEFINED_'ifelse(`$ 4', `', `$1', `$4'), `', `m4_errprint(`Unknown struct "'ifelse(`$4', `', `$1', `$4')`"')')97 assert(sizeof($1) == sizeof(($ 5$3)[0]));98 ifelse(`$ 5', `', `ALLOC(`$2', `$1')')97 pushdefFUNC_NAME(`$1', `$5') 98 ifdef(`DEFINED_'ifelse(`$5', `', `$1', `$5'), `', `m4_errprint(`Unknown struct "'ifelse(`$5', `', `$1', `$5')`"')') 99 assert(sizeof($1) == sizeof(($6 $3)[0])); 100 ifelse(`$6', `', `ALLOC(`$2', `$1')') 99 101 IFDASM(`do { 100 102 zval *zv; … … 103 105 ') 104 106 FUNC_NAME`'( 105 IFDPRINT( ` $ 5$3, indent')106 IFCALC( `processor, $ 5$3')107 IFSTORE( `processor, $ 5 $2, $5$3')108 IFRESTORE(`processor, $ 5 $2, $5$3')109 IFDASM( `zv, $ 5$3')110 IFASM( `$ 5 $2, $5$3')107 IFDPRINT( ` $6 $3, indent') 108 IFCALC( `processor, $6 $3') 109 IFSTORE( `processor, $6 $2, $6 $3') 110 IFRESTORE(`processor, $6 $2, $6 $3') 111 IFDASM( `zv, $6 $3') 112 IFASM( `$6 $2, $6 $3') 111 113 TSRMLS_CC 112 114 ); 113 115 IFDASM(` 114 add_assoc_zval_ex(dst, ZEND_STRS(" patsubst(`$2', `dst->')"), zv);116 add_assoc_zval_ex(dst, ZEND_STRS("$4"), zv); 115 117 } while (0); 116 118 ') 117 119 popdef(`FUNC_NAME') 118 ifelse(`$ 5', , `FIXPOINTER_EX(`$1', `$2')')120 ifelse(`$6', , `FIXPOINTER_EX(`$1', `$2')') 119 121 ') 120 122 dnl }}} … … 123 125 DBG(`$0($*)') 124 126 if (src->$2) { 125 STRUCT_P_EX(`$1', `dst->$2', `src->$2', `$ 3')127 STRUCT_P_EX(`$1', `dst->$2', `src->$2', `$2', `$3') 126 128 IFDPRINT(`INDENT()`'fprintf(stderr, "$1:$2");') 127 129 } 128 130 else { 129 COPYNULL_EX( dst->$2)131 COPYNULL_EX(`dst->$2', `$2') 130 132 IFDPRINT(`INDENT()`'fprintf(stderr, "$1:$2:\tNULL\n");') 131 133 } … … 138 140 assert(sizeof($1) == sizeof(src->$2)); 139 141 IFDPRINT(`INDENT()`'fprintf(stderr, "$1:$2");') 140 STRUCT_P_EX(`$1', `dst->$2', `src->$2', `$ 3', `&')142 STRUCT_P_EX(`$1', `dst->$2', `src->$2', `$2', `$3', `&') 141 143 DONE(`$2') 142 144 ')

