[svn:PHP-Sandwich] rev 1036 - PHP-Sandwich/trunk

[email protected] 2 May 2005 04:45:40 -0000
Newsgroups perl.php.sandwich.dev
Message-ID <[email protected]>
Author: shughes
Date: Sun May  1 21:45:39 2005
New Revision: 1036

Modified:
   PHP-Sandwich/trunk/phpfuncs.c
Log:
add a "getVariable" method to the perl object to get a 
perl variable and return the value back to php.

will add oo overloading for this next.


Modified: PHP-Sandwich/trunk/phpfuncs.c
==============================================================================
--- PHP-Sandwich/trunk/phpfuncs.c	(original)
+++ PHP-Sandwich/trunk/phpfuncs.c	Sun May  1 21:45:39 2005
@@ -27,6 +27,49 @@
   memset(&swg->ps_stats, 0, sizeof(swg->ps_stats));
 }
 
+PHP_METHOD(perl, getvariable)
+{
+  struct plobj *pl;
+  SV           *var;
+  zval         *retval;
+  char         *name;
+  int           namelen;
+  pTHX;
+
+  if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &namelen) == 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);
+      break;
+    case '@':
+      var = (SV *) get_av(name + 1, FALSE);
+      break;
+    case '%':
+      var = (SV *) get_hv(name + 1, FALSE);
+      break;
+    default:
+      RETURN_NULL();
+  }
+      
+  if (var != NULL) {
+    retval = SvZval(var);
+    RETURN_ZVAL(retval, 1, 0);
+  } else {
+    RETURN_NULL();
+  }
+} 
+
 PHP_METHOD(perl, getinstance)
 {
   struct plobj *pl;
@@ -102,6 +145,7 @@
 
 static function_entry plobj_functions[] = {
   PHP_ME(perl, eval, NULL, ZEND_ACC_PUBLIC)
+  PHP_ME(perl, getvariable, NULL, ZEND_ACC_PUBLIC) 
   {NULL, NULL, NULL}
 };
 
@@ -187,6 +231,7 @@
   }
 
   INIT_CLASS_ENTRY(plobj, "PerlObject", plobj_functions);
+  
   plobj.create_object = plobj_create_object;
   plobj_ce = zend_register_internal_class(&plobj TSRMLS_CC);
   if (!plobj_ce) {