diff --git a/src/bindings/php/hammer.i b/src/bindings/php/hammer.i index fbdcc59cdeea904f8d131b62e8a528d31461467c..d2a5eca4da3b40af5441288e86e79287d2da6c76 100644 --- a/src/bindings/php/hammer.i +++ b/src/bindings/php/hammer.i @@ -11,13 +11,14 @@ %init %{ #define PHP_H_TT_PHP_DESCRIPTOR_RES_NAME "Hammer Token" h_tt_php = h_allocate_token_type("com.upstandinghackers.hammer.php"); + // TODO: implement h_arena_free, register a token dtor here le_h_tt_php_descriptor = zend_register_list_destructors_ex(NULL, NULL, PHP_H_TT_PHP_DESCRIPTOR_RES_NAME, module_number); %} %inline { struct HParsedToken_; struct HParseResult_; - void hpt_to_php(zval *return_value, const struct HParsedToken_ *token); + void hpt_to_php(const struct HParsedToken_ *token, zval *return_value); static struct HParsedToken_* call_action(const struct HParseResult_ *p, void* user_data); } @@ -76,14 +77,14 @@ //SWIG_exception(SWIG_TypeError, "typemap: should have been an HParseResult*, was NULL"); RETVAL_NULL(); } else { - hpt_to_php($result, $1->ast); + hpt_to_php($1->ast, $result); } } %include "../swig/hammer.i"; %inline { - void hpt_to_php(zval *return_value, const HParsedToken *token) { + void hpt_to_php(const HParsedToken *token, zval *return_value) { if (!token) { RETVAL_NULL(); return; @@ -106,7 +107,7 @@ for (int i=0; i < token->token_data.seq->used; i++) { zval *tmp; ALLOC_INIT_ZVAL(tmp); - hpt_to_php(tmp, token->token_data.seq->elements[i]); + hpt_to_php(token->token_data.seq->elements[i], tmp); add_next_index_zval(return_value, tmp); } break; @@ -130,7 +131,7 @@ zval *args[1]; zval ret, func; ZVAL_STRING(&func, (const char*)user_data, 0); - hpt_to_php(args[0], p->ast); + hpt_to_php(p->ast, args[0]); int ok = call_user_function(EG(function_table), NULL, &func, &ret, 1, args TSRMLS_CC); if (ok != SUCCESS) { printf("call_user_function failed\n");