wez Thu Jan 30 07:12:21 2003 EDT
Modified files:
/embed/php-irssi genobjdefs.php gensignals.php php-irssi-obj.c
php-irssi.h typemap.php
Log:
Return a vestigal class entry for non-ZE2 aware code.
Expose the php module signals to php scripts.
Some refinements to the code generator scripts.
Index: embed/php-irssi/genobjdefs.php
diff -u embed/php-irssi/genobjdefs.php:1.2 embed/php-irssi/genobjdefs.php:1.3
--- embed/php-irssi/genobjdefs.php:1.2 Thu Jan 30 04:45:04 2003
+++ embed/php-irssi/genobjdefs.php Thu Jan 30 07:12:20 2003
@@ -15,7 +15,7 @@
+----------------------------------------------------------------------+
| Author: Wez Furlong <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
- $Id: genobjdefs.php,v 1.2 2003/01/30 09:45:04 wez Exp $
+ $Id: genobjdefs.php,v 1.3 2003/01/30 12:12:20 wez Exp $
*/
/* We build three sets of tables:
@@ -27,12 +27,6 @@
*/
$top_srcdir = realpath($argv[1]);
-$objects_to_scan = array(
- "src/core/server-rec.h" => array("SERVER_REC", "server"),
- "src/core/channel-rec.h"=> array("CHANNEL_REC", "channel"),
- "src/core/nick-rec.h"=> array("NICK_REC", "nick"),
- );
-
$obj_bind = array();
include "typemap.php";
Index: embed/php-irssi/gensignals.php
diff -u embed/php-irssi/gensignals.php:1.2 embed/php-irssi/gensignals.php:1.3
--- embed/php-irssi/gensignals.php:1.2 Thu Jan 30 04:04:35 2003
+++ embed/php-irssi/gensignals.php Thu Jan 30 07:12:20 2003
@@ -15,7 +15,7 @@
+----------------------------------------------------------------------+
| Author: Wez Furlong <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
- $Id: gensignals.php,v 1.2 2003/01/30 09:04:35 wez Exp $
+ $Id: gensignals.php,v 1.3 2003/01/30 12:12:20 wez Exp $
*/
/* Generate signal information from the signals.txt file in the docs
@@ -25,23 +25,20 @@
echo "static struct php_irssi_signal_args php_irssi_sig_args_table[] = {\n";
-while (!feof(STDIN)) {
- $line = fgets(STDIN);
- if ($line === false)
- break;
-
+function read_signal($line)
+{
if (!preg_match('/^ "([^"]+)"(<.*>)?,\s*(.*)/', $line, $matches))
- continue;
+ return;
if (strpos($line, '...') || strpos($line, '('))
- continue;
+ return;
$signal = $matches[1];
$thing = $matches[2];
if ($thing)
- continue;
-
+ return;
+
$args = explode(", ", $matches[3]);
$ok = true;
@@ -53,13 +50,39 @@
if ($ok)
$record[] = $handler;
else
- break;
+ return;
}
if ($ok) {
echo "{ \"$signal\", 0, " . count($record) . ", {" . implode(",",
$record) . "} },\n";
}
}
+
+while (!feof(STDIN)) {
+ $line = fgets(STDIN);
+ if ($line === false)
+ break;
+
+ read_signal($line);
+}
+
+/* signals provided by the php module itself.
+ * the "php error" signal is dangerous to bind to php code as there
+ * is a high potential of infinite loops.
+ * We don't list "php unloaded" as there is no PHP around to
+ * handle that event at that time...
+ */
+
+$php_signals = <<<EOD
+ "php output", char *data
+ "php error", char *data
+ "php unloading"
+EOD;
+
+foreach (explode("\n", $php_signals) as $line) {
+ read_signal($line);
+}
+
echo "{ NULL, 0, 0 }\n};\n";
Index: embed/php-irssi/php-irssi-obj.c
diff -u embed/php-irssi/php-irssi-obj.c:1.1 embed/php-irssi/php-irssi-obj.c:1.2
--- embed/php-irssi/php-irssi-obj.c:1.1 Thu Jan 30 04:04:35 2003
+++ embed/php-irssi/php-irssi-obj.c Thu Jan 30 07:12:20 2003
@@ -14,11 +14,13 @@
+----------------------------------------------------------------------+
| Author: Wez Furlong <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
- $Id: php-irssi-obj.c,v 1.1 2003/01/30 09:04:35 wez Exp $
+ $Id: php-irssi-obj.c,v 1.2 2003/01/30 12:12:20 wez Exp $
*/
#include "php-irssi.h"
#include "php-irssi-obj-defs.h"
+static zend_class_entry php_irssi_ce;
+
void *php_irssi_resolve_to_SERVER_REC(struct php_irssi_obj_ref *ref)
{
return server_find_tag(ref->idents[IDX_SERVER]);
@@ -63,7 +65,7 @@
ZVAL_NULL(val);
}
*rval = val;
- ZVAL_DELREF(val);
+ /* ZVAL_DELREF(val); */
}
@@ -148,6 +150,11 @@
return NULL;
}
+static zend_class_entry *pih_get_class(zval *object TSRMLS_DC)
+{
+ return &php_irssi_ce;
+}
+
static int pih_get_class_name(zval *object, char **class_name, zend_uint
*class_name_len, int parent TSRMLS_DC)
{
struct php_irssi_obj_ref *ref = zend_object_store_get_object(object TSRMLS_CC);
@@ -182,7 +189,7 @@
pih_get_method,
NULL,
pih_get_ctor,
- NULL,
+ pih_get_class,
pih_get_class_name,
};
@@ -231,7 +238,7 @@
if (zobj) {
Z_TYPE_P(zobj) = IS_OBJECT;
zobj->value.obj = retval;
- ZVAL_DELREF(zobj);
+/* ZVAL_DELREF(zobj); */
}
return retval;
@@ -250,7 +257,6 @@
}
-static zend_class_entry php_irssi_ce;
int php_irssi_init_objects(void)
Index: embed/php-irssi/php-irssi.h
diff -u embed/php-irssi/php-irssi.h:1.1 embed/php-irssi/php-irssi.h:1.2
--- embed/php-irssi/php-irssi.h:1.1 Thu Jan 30 04:04:35 2003
+++ embed/php-irssi/php-irssi.h Thu Jan 30 07:12:20 2003
@@ -14,7 +14,7 @@
+----------------------------------------------------------------------+
| Author: Wez Furlong <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
- $Id: php-irssi.h,v 1.1 2003/01/30 09:04:35 wez Exp $
+ $Id: php-irssi.h,v 1.2 2003/01/30 12:12:20 wez Exp $
*/
#define MODULE_NAME "php/core"
@@ -45,7 +45,7 @@
PIAT_ULONG,
PIAT_NICK,
PIAT_ARRAY_OF_STRING,
- PIAT_BOOL
+ PIAT_BOOL,
};
struct php_irssi_signal_args {
Index: embed/php-irssi/typemap.php
diff -u embed/php-irssi/typemap.php:1.1 embed/php-irssi/typemap.php:1.2
--- embed/php-irssi/typemap.php:1.1 Thu Jan 30 04:04:35 2003
+++ embed/php-irssi/typemap.php Thu Jan 30 07:12:20 2003
@@ -15,23 +15,33 @@
+----------------------------------------------------------------------+
| Author: Wez Furlong <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
- $Id: typemap.php,v 1.1 2003/01/30 09:04:35 wez Exp $
+ $Id: typemap.php,v 1.2 2003/01/30 12:12:20 wez Exp $
*/
/* This array describes the functions that can be used to convert between
* irssi and php/ze types */
+$objects_to_scan = array(
+ "src/core/server-rec.h" => array("SERVER_REC", "server"),
+ "src/core/channel-rec.h" => array("CHANNEL_REC", "channel"),
+ "src/core/nick-rec.h" => array("NICK_REC", "nick"),
+ );
+
$marshal = array(
"char *" => array("PIAT_STRING", false),
- "SERVER_REC" => array("PIAT_SERVER", true),
- "CHANNEL_REC" => array("PIAT_CHANNEL", true),
"time_t" => array("PIAT_INT", false),
"int" => array("PIAT_INT", false),
"unsigned int" => array("PIAT_INT", false),
"ulong" => array("PIAT_ULONG", false),
- "NICK_REC" => array("PIAT_NICK", true),
"GList * of char*" => array("PIAT_ARRAY_OF_STRING", false),
);
+
+/* fixup the marshal array to include supported objects */
+foreach ($objects_to_scan as $data) {
+ list($rec, $name) = $data;
+ $label = preg_replace('/_.*/', '', $rec);
+ $marshal[$rec] = array("PIAT_$label", true);
+}
function match_decl($decl, &$name, &$handler, $pointers = false)
{
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php