| 1 | /* Typemaps for constants */ |
| 2 | |
| 3 | %typemap(consttab) int, |
| 4 | unsigned int, |
| 5 | short, |
| 6 | unsigned short, |
| 7 | long, |
| 8 | unsigned long, |
| 9 | unsigned char, |
| 10 | signed char, |
| 11 | bool, |
| 12 | enum SWIGTYPE |
| 13 | "REGISTER_LONG_CONSTANT( \"$symname\", $value, CONST_CS | CONST_PERSISTENT);"; |
| 14 | |
| 15 | %typemap(consttab) float, |
| 16 | double |
| 17 | "REGISTER_DOUBLE_CONSTANT(\"$symname\", $value, CONST_CS | CONST_PERSISTENT);"; |
| 18 | |
| 19 | %typemap(consttab) char |
| 20 | "REGISTER_STRING_CONSTANT(\"$symname\", \"$value\", CONST_CS | CONST_PERSISTENT );"; |
| 21 | |
| 22 | %typemap(consttab) char *, |
| 23 | const char *, |
| 24 | char [], |
| 25 | const char [] |
| 26 | "REGISTER_STRING_CONSTANT(\"$symname\", $value, CONST_CS | CONST_PERSISTENT);"; |
| 27 | |
| 28 | %typemap(consttab) SWIGTYPE *, |
| 29 | SWIGTYPE &, |
| 30 | SWIGTYPE [] { |
| 31 | // This actually registers it as a global variable and constant. I don't like it, but I can't figure out |
| 32 | // the zend_constant code... |
| 33 | zval *z_var; |
| 34 | MAKE_STD_ZVAL(z_var); |
| 35 | SWIG_SetPointerZval(z_var, (void*)$value, $1_descriptor, 0); |
| 36 | //zend_hash_add(&EG(symbol_table), "$1", strlen("$1")+1, (void *)&z_var,sizeof(zval *), NULL); |
| 37 | zend_constant c; |
| 38 | c.value = *z_var; |
| 39 | zval_copy_ctor(&c.value); |
| 40 | size_t len = strlen("$1"); |
| 41 | c.name = zend_strndup( "$1", len ); |
| 42 | c.name_len = len+1; |
| 43 | c.flags = CONST_CS | CONST_PERSISTENT; |
| 44 | c.module_number = module_number; |
| 45 | zend_register_constant( &c TSRMLS_CC ); |
| 46 | } |