Team Fortress 2 Source Code as on 22/4/2020
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

332 lines
8.0 KiB

  1. /* -----------------------------------------------------------------------------
  2. * See the LICENSE file for information on copyright, usage and redistribution
  3. * of SWIG, and the README file for authors - http://www.swig.org/release.html.
  4. *
  5. * globalvar.i
  6. *
  7. * Global variables - add the variable to PHP
  8. * ----------------------------------------------------------------------------- */
  9. %typemap(varinit) char *,
  10. char []
  11. {
  12. zval *z_var;
  13. MAKE_STD_ZVAL(z_var);
  14. z_var->type = IS_STRING;
  15. if($1) {
  16. z_var->value.str.val = estrdup($1);
  17. z_var->value.str.len = strlen($1);
  18. } else {
  19. z_var->value.str.val = 0;
  20. z_var->value.str.len = 0;
  21. }
  22. zend_hash_add(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void *)&z_var, sizeof(zval *), NULL);
  23. }
  24. %typemap(varinit) int,
  25. unsigned int,
  26. unsigned short,
  27. short,
  28. unsigned short,
  29. long,
  30. unsigned long,
  31. signed char,
  32. unsigned char,
  33. enum SWIGTYPE
  34. {
  35. zval *z_var;
  36. MAKE_STD_ZVAL(z_var);
  37. z_var->type = IS_LONG;
  38. z_var->value.lval = $1;
  39. zend_hash_add(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void *)&z_var, sizeof(zval *), NULL);
  40. }
  41. %typemap(varinit) bool
  42. {
  43. zval *z_var;
  44. MAKE_STD_ZVAL(z_var);
  45. z_var->type = IS_BOOL;
  46. z_var->value.lval = ($1)?1:0;
  47. zend_hash_add(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void *)&z_var, sizeof(zval *), NULL);
  48. }
  49. %typemap(varinit) float, double
  50. {
  51. zval *z_var;
  52. MAKE_STD_ZVAL(z_var);
  53. z_var->type = IS_DOUBLE;
  54. z_var->value.dval = $1;
  55. zend_hash_add(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void *)&z_var,
  56. sizeof(zval *), NULL);
  57. }
  58. %typemap(varinit) char
  59. {
  60. zval *z_var;
  61. char c[2];
  62. MAKE_STD_ZVAL(z_var);
  63. c[0] = $1;
  64. c[1] = 0;
  65. z_var->type = IS_STRING;
  66. z_var->value.str.val = estrndup(c, 1);
  67. z_var->value.str.len = 1;
  68. zend_hash_add(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void *)&z_var,
  69. sizeof(zval *), NULL);
  70. }
  71. %typemap(varinit) SWIGTYPE *, SWIGTYPE []
  72. {
  73. zval *z_var;
  74. MAKE_STD_ZVAL(z_var);
  75. SWIG_SetPointerZval(z_var, (void*)$1, $1_descriptor, 0);
  76. zend_hash_add(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void *)&z_var,
  77. sizeof(zval *), NULL);
  78. }
  79. %typemap(varinit) SWIGTYPE, SWIGTYPE &
  80. {
  81. $&1_ltype argp;
  82. zval *z_var;
  83. MAKE_STD_ZVAL(z_var);
  84. SWIG_SetPointerZval(z_var, (void*)&$1, $&1_descriptor, 0);
  85. zend_hash_add(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void*)&z_var,
  86. sizeof(zval *), NULL);
  87. }
  88. %typemap(varinit) char [ANY]
  89. {
  90. zval *z_var;
  91. MAKE_STD_ZVAL(z_var);
  92. z_var->type = IS_STRING;
  93. if ($1) {
  94. // varinit char [ANY]
  95. ZVAL_STRINGL(z_var,(char*)$1, $1_dim0, 1);
  96. }
  97. zend_hash_add(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void*)&z_var, sizeof(zval *), NULL);
  98. }
  99. %typemap(varin) int, unsigned int, short, unsigned short, long, unsigned long, signed char, unsigned char, enum SWIGTYPE
  100. {
  101. zval **z_var;
  102. zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
  103. convert_to_long_ex(z_var);
  104. if ($1 != ($1_ltype)((*z_var)->value.lval)) {
  105. $1 = Z_LVAL_PP(z_var);
  106. }
  107. }
  108. %typemap(varin) bool
  109. {
  110. zval **z_var;
  111. zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
  112. convert_to_boolean_ex(z_var);
  113. if ($1 != ($1_ltype)((*z_var)->value.lval)) {
  114. $1 = Z_LVAL_PP(z_var);
  115. }
  116. }
  117. %typemap(varin) double,float
  118. {
  119. zval **z_var;
  120. zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
  121. convert_to_double_ex(z_var);
  122. if ($1 != ($1_ltype)((*z_var)->value.dval)) {
  123. $1 = Z_DVAL_PP(z_var);
  124. }
  125. }
  126. %typemap(varin) char
  127. {
  128. zval **z_var;
  129. zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
  130. convert_to_string_ex(z_var);
  131. if ($1 != *((*z_var)->value.str.val)) {
  132. $1 = *((*z_var)->value.str.val);
  133. }
  134. }
  135. %typemap(varin) char *
  136. {
  137. zval **z_var;
  138. char *s1;
  139. zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
  140. convert_to_string_ex(z_var);
  141. s1 = Z_STRVAL_PP(z_var);
  142. if ((s1 == NULL) || ($1 == NULL) || zend_binary_strcmp(s1, strlen(s1), $1, strlen($1))) {
  143. if (s1)
  144. $1 = estrdup(s1);
  145. else
  146. $1 = NULL;
  147. }
  148. }
  149. %typemap(varin) SWIGTYPE []
  150. {
  151. zval **z_var;
  152. zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
  153. if($1) {
  154. SWIG_SetPointerZval(*z_var, (void*)$1, $1_descriptor, $owner);
  155. }
  156. }
  157. %typemap(varin) char [ANY]
  158. {
  159. zval **z_var;
  160. char *s1;
  161. zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
  162. s1 = Z_STRVAL_PP(z_var);
  163. if((s1 == NULL) || ($1 == NULL) || zend_binary_strcmp(s1, strlen(s1), $1, strlen($1))) {
  164. if(s1)
  165. strncpy($1, s1, $1_dim0);
  166. }
  167. }
  168. %typemap(varin) SWIGTYPE
  169. {
  170. zval **z_var;
  171. $&1_ltype _temp;
  172. zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
  173. if (SWIG_ConvertPtr(*z_var, (void**)&_temp, $&1_descriptor, 0) < 0) {
  174. SWIG_PHP_Error(E_ERROR,"Type error in value of $symname. Expected $&1_descriptor");
  175. }
  176. $1 = *($&1_ltype)_temp;
  177. }
  178. %typemap(varin) SWIGTYPE *, SWIGTYPE &
  179. {
  180. zval **z_var;
  181. $1_ltype _temp;
  182. zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
  183. if (SWIG_ConvertPtr(*z_var, (void **)&_temp, $1_descriptor, 0) < 0) {
  184. SWIG_PHP_Error(E_ERROR,"Type error in value of $symname. Expected $&1_descriptor");
  185. }
  186. $1 = ($1_ltype)_temp;
  187. }
  188. %typemap(varout) int,
  189. unsigned int,
  190. unsigned short,
  191. short,
  192. long,
  193. unsigned long,
  194. signed char,
  195. unsigned char,
  196. enum SWIGTYPE
  197. {
  198. zval **z_var;
  199. zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
  200. if($1 != ($1_ltype)((*z_var)->value.lval)) {
  201. (*z_var)->value.lval = (long)$1;
  202. }
  203. }
  204. //SAMFIX need to cast zval->type, what if zend-hash_find fails? etc?
  205. %typemap(varout) bool
  206. {
  207. zval **z_var;
  208. zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
  209. if($1 != ($1_ltype)((*z_var)->value.lval)) {
  210. (*z_var)->value.lval = (long)$1;
  211. }
  212. }
  213. %typemap(varout) double, float
  214. {
  215. zval **z_var;
  216. zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
  217. if($1 != ($1_ltype)((*z_var)->value.dval)) {
  218. (*z_var)->value.dval = (double)$1;
  219. }
  220. }
  221. %typemap(varout) char
  222. {
  223. zval **z_var;
  224. zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
  225. if($1 != *((*z_var)->value.str.val)) {
  226. char c[2];
  227. efree((*z_var)->value.str.val);
  228. c[0] = $1;
  229. c[1] = 0;
  230. (*z_var)->value.str.val = estrdup(c);
  231. }
  232. }
  233. %typemap(varout) char *
  234. {
  235. zval **z_var;
  236. char *s1;
  237. zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
  238. s1 = Z_STRVAL_PP(z_var);
  239. if((s1 == NULL) || ($1 == NULL) || zend_binary_strcmp(s1, strlen(s1), $1, strlen($1) )) {
  240. if(s1)
  241. efree(s1);
  242. if($1) {
  243. (*z_var)->value.str.val = estrdup($1);
  244. (*z_var)->value.str.len = strlen($1) +1;
  245. } else {
  246. (*z_var)->value.str.val = 0;
  247. (*z_var)->value.str.len = 0;
  248. }
  249. }
  250. }
  251. %typemap(varout) SWIGTYPE
  252. {
  253. zval **z_var;
  254. zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
  255. SWIG_SetPointerZval(*z_var, (void*)&$1, $&1_descriptor, 0);
  256. }
  257. %typemap(varout) SWIGTYPE []
  258. {
  259. zval **z_var;
  260. zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
  261. if($1)
  262. SWIG_SetPointerZval(*z_var, (void*)$1, $1_descriptor, 0);
  263. }
  264. %typemap(varout) char [ANY]
  265. {
  266. zval **z_var;
  267. char *s1;
  268. deliberate error cos this code looks bogus to me
  269. zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
  270. s1 = Z_STRVAL_PP(z_var);
  271. if((s1 == NULL) || zend_binary_strcmp(s1, strlen(s1), $1, strlen($1))) {
  272. if($1) {
  273. (*z_var)->value.str.val = estrdup($1);
  274. (*z_var)->value.str.len = strlen($1)+1;
  275. } else {
  276. (*z_var)->value.str.val = 0;
  277. (*z_var)->value.str.len = 0;
  278. }
  279. }
  280. }
  281. %typemap(varout) SWIGTYPE *, SWIGTYPE &
  282. {
  283. zval **z_var;
  284. zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
  285. SWIG_SetPointerZval(*z_var, (void*)$1, $1_descriptor, 0);
  286. }