Commit | Line | Data |
---|---|---|
920dae64 AT |
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 | } |