[svn:PHP-Sandwich] rev 1040 - in PHP-Sandwich/trunk: . t
[email protected] 2 May 2005 20:44:02 -0000
| Newsgroups | perl.php.sandwich.dev |
|---|---|
| Message-ID | <[email protected]> |
Author: gschlossnagle
Date: Mon May 2 13:44:01 2005
New Revision: 1040
Modified:
PHP-Sandwich/trunk/phpfuncs.c
PHP-Sandwich/trunk/phpinterp.h
PHP-Sandwich/trunk/t/14.t
Log:
setVariable
only works for setting scalars, will segfault if you
pass in an object, as it lacks the sandwich_interp
Modified: PHP-Sandwich/trunk/phpfuncs.c
==============================================================================
--- PHP-Sandwich/trunk/phpfuncs.c (original)
+++ PHP-Sandwich/trunk/phpfuncs.c Mon May 2 13:44:01 2005
@@ -121,7 +121,52 @@
} else {
RETURN_NULL();
}
-}
+}
+
+PHP_METHOD(perl, setvariable)
+{
+ struct plobj *pl;
+ SV *var;
+ zval *retval;
+ char *name;
+ int namelen;
+ zval *param;
+ SV *sparam;
+ pTHX;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz", &name, &namelen, ¶m) == FAILURE) {
+ return;
+ }
+
+ if (namelen < 1) {
+ RETURN_NULL();
+ }
+
+ pl = zend_object_store_get_object(getThis() TSRMLS_CC);
+ aTHX = pl->perl;
+ var = NULL;
+
+ switch (name[0]) {
+ case '$':
+ var = get_sv(name + 1, FALSE);
+ sparam = newSVzval(param, NULL);
+ sv_setsv(var, sparam);
+ break;
+ case '@':
+ /* check type require param IS_ARRAY, maybe IS_OBJECT */
+ var = (SV *) get_av(name + 1, FALSE);
+ RETURN_NULL();
+ break;
+ case '%':
+ /* check type require param IS_ARRAY, maybe IS_OBJECT */
+ var = (SV *) get_hv(name + 1, FALSE);
+ RETURN_NULL();
+ break;
+ default:
+ RETURN_NULL();
+ }
+ RETURN_TRUE;
+}
PHP_METHOD(perl, getinstance)
{
@@ -199,6 +244,7 @@
static function_entry plobj_functions[] = {
PHP_ME(perl, eval, NULL, ZEND_ACC_PUBLIC)
PHP_ME(perl, getvariable, NULL, ZEND_ACC_PUBLIC)
+ PHP_ME(perl, setvariable, NULL, ZEND_ACC_PUBLIC)
{NULL, NULL, NULL}
};
Modified: PHP-Sandwich/trunk/phpinterp.h
==============================================================================
--- PHP-Sandwich/trunk/phpinterp.h (original)
+++ PHP-Sandwich/trunk/phpinterp.h Mon May 2 13:44:01 2005
@@ -39,5 +39,6 @@
#define sandwich_interp_dec_ref(interp) if(--interp->ref == 0) sandwich_per_interp_shutdown(interp)
zval *SvZval(SV *sv);
+SV *newSVzval(zval *param, sandwich_per_interp *interp);
#endif
Modified: PHP-Sandwich/trunk/t/14.t
==============================================================================
--- PHP-Sandwich/trunk/t/14.t (original)
+++ PHP-Sandwich/trunk/t/14.t Mon May 2 13:44:01 2005
@@ -1,6 +1,6 @@
#!/opt/ecelerity/3rdParty/bin/perl
use strict;
-use Test::More tests => 5;
+use Test::More tests => 8;
BEGIN {
use_ok 'PHP' or die;
@@ -8,6 +8,7 @@
}
our @var;
+our $scalar;
push @var, "hello";
push @var, "goodbye";
@@ -20,6 +21,19 @@
$value = $perl->getVariable('@var');
return $value;
}
+ function bar() {
+ $perl = Perl::getInstance();
+ $value = $perl->getVariable('$var[0]');
+ return $value;
+ }
/), 'Define PHP function that returns Perl values';
my @phpval = $p->foo();
ok $phpval[0] == 'hello', 'Check return value of PHP foo()';
+my $phpval = $p->bar();
+ok $phpval == 'hello', 'Check return value of PHP bar()';
+ok $p->eval(q/
+ $perl = Perl::getInstance();
+ $perl->setVariable('$scalar', 'george');
+/), 'Test use of Perl::setVariable';
+
+is $scalar, 'george', 'Test scalar version of setVariable';