action works! need to clean up xor and ch_range, and write attr_bool

This commit is contained in:
Meredith L. Patterson 2013-12-16 13:13:17 +01:00
parent 53a661442e
commit 6c9410d8de
2 changed files with 10 additions and 11 deletions

View file

@ -21,11 +21,8 @@ class ActionTest extends PHPUnit_Framework_TestCase
public function testSuccess() public function testSuccess()
{ {
$result1 = h_parse($this->parser, "ab"); $result1 = h_parse($this->parser, "ab");
var_dump($result1);
$result2 = h_parse($this->parser, "AB"); $result2 = h_parse($this->parser, "AB");
var_dump($result2);
$result3 = h_parse($this->parser, "aB"); $result3 = h_parse($this->parser, "aB");
var_dump($result3);
$this->assertEquals("AB", $result1); $this->assertEquals("AB", $result1);
$this->assertEquals("AB", $result2); $this->assertEquals("AB", $result2);
$this->assertEquals("AB", $result3); $this->assertEquals("AB", $result3);

View file

@ -4,12 +4,12 @@
%ignore HCountedArray_; %ignore HCountedArray_;
%inline %{ %inline %{
#define PHP_H_TT_PHP_DESCRIPTOR_RES_NAME "Hammer Token"
static int h_tt_php; static int h_tt_php;
static int le_h_tt_php_descriptor; static int le_h_tt_php_descriptor;
%} %}
%init %{ %init %{
#define PHP_H_TT_PHP_DESCRIPTOR_RES_NAME "Hammer Token"
h_tt_php = h_allocate_token_type("com.upstandinghackers.hammer.php"); h_tt_php = h_allocate_token_type("com.upstandinghackers.hammer.php");
// TODO: implement h_arena_free, register a token dtor here // 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); le_h_tt_php_descriptor = zend_register_list_destructors_ex(NULL, NULL, PHP_H_TT_PHP_DESCRIPTOR_RES_NAME, module_number);
@ -113,8 +113,9 @@
break; break;
default: default:
if (token->token_type == h_tt_php) { if (token->token_type == h_tt_php) {
//RETVAL_RESOURCE(token->token_data.user); zval *tmp;
ZEND_REGISTER_RESOURCE(return_value, token->token_data.user, le_h_tt_php_descriptor); tmp = (zval*)token->token_data.user;
RETVAL_ZVAL(tmp, 0, 0);
} else { } else {
int res = 0; int res = 0;
res = SWIG_ConvertPtr(return_value, (void*)token, SWIGTYPE_p_HParsedToken_, 0 | 0); res = SWIG_ConvertPtr(return_value, (void*)token, SWIGTYPE_p_HParsedToken_, 0 | 0);
@ -129,18 +130,19 @@
static HParsedToken* call_action(const HParseResult *p, void *user_data) { static HParsedToken* call_action(const HParseResult *p, void *user_data) {
zval *args[1]; zval *args[1];
zval ret, func; zval func;
zval *ret;
ALLOC_INIT_ZVAL(ret);
ZVAL_STRING(&func, (const char*)user_data, 0); ZVAL_STRING(&func, (const char*)user_data, 0);
hpt_to_php(p->ast, args[0]); hpt_to_php(p->ast, args[0]);
int ok = call_user_function(EG(function_table), NULL, &func, &ret, 1, args TSRMLS_CC); int ok = call_user_function(EG(function_table), NULL, &func, ret, 1, args TSRMLS_CC);
if (ok != SUCCESS) { if (ok != SUCCESS) {
printf("call_user_function failed\n"); printf("call_user_function failed\n");
// FIXME throw some error // FIXME throw some error
return NULL; return NULL;
} }
printf("Value being returned is %s\n", Z_STRVAL(ret)); // Whatever the zval is, stuff it into a token
// TODO: add reference to ret to parse-local data HParsedToken *tok = h_make(p->arena, h_tt_php, ret);
HParsedToken *tok = h_make(p->arena, h_tt_php, &ret);
return tok; return tok;
} }