cvs: php-gtk /generator generator.php override.php
| From: | Andrei Zmievski | Date: | Fri, 10 Mar 2006 05:26:45 +0000 |
| Subject: | cvs: php-gtk /generator generator.php override.php | ||
| Groups: | php.gtk.cvs | ||
| Request: | Send a blank email to php-gtk-cvs+get-2179@lists.php.net to get a copy of this message | ||
andrei Fri Mar 10 05:26:45 2006 UTC
Modified files:
/php-gtk/generator generator.php override.php
Log:
Allowing adding extra programmatic fields (properties).
http://cvs.php.net/viewcvs.cgi/php-gtk/generator/generator.php?r1=1.109&r2=1.110&diff_format=u
Index: php-gtk/generator/generator.php
diff -u php-gtk/generator/generator.php:1.109 php-gtk/generator/generator.php:1.110
--- php-gtk/generator/generator.php:1.109 Sun Feb 19 21:53:44 2006
+++ php-gtk/generator/generator.php Fri Mar 10 05:26:44 2006
@@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-/* $Id: generator.php,v 1.109 2006/02/19 21:53:44 andrei Exp $ */
+/* $Id: generator.php,v 1.110 2006/03/10 05:26:44 andrei Exp $ */
/*
* Significant portions of this generator are based on the pygtk code generator
@@ -534,7 +534,7 @@
{
global $matcher;
- if (!$object->fields) {
+ if (!$object->fields &&
!$this->overrides->have_extra_props($object->c_name)) {
return 'NULL';
}
@@ -578,7 +578,7 @@
}
if (isset($overrides['write'])) {
$write_override = preg_replace('!^.*(PHPG_PROP_WRITER).*$!m',
"static $1($object->c_name, $field_name)", $overrides['write']);
- $this->write_override($overrides['read'], $object->c_name,
$field_name, 'write');
+ $this->write_override($overrides['write'], $object->c_name,
$field_name, 'write');
$this->divert("gen ", "%%%% %-11s %s->%s\n",
"writer for", $object->c_name, $field_name);
}
} else {
@@ -604,6 +604,35 @@
} catch (Exception $e) {
$this->divert("notgen", " %-11s %s->%s: %s\n",
"reader for", $object->c_name, $field_name, $e->getMessage());
$num_skipped++;
+ $this->cover["props"]->skipped();
+ }
+ }
+
+ if ($this->overrides->have_extra_props($object->c_name)) {
+ foreach ($this->overrides->get_extra_props($object->c_name) as $prop_name
=> $overrides) {
+
+ $read_func = "PHPG_PROP_READ_FN($object->c_name, $prop_name)";
+ $write_func = 'NULL';
+ $info = new Wrapper_Info();
+
+ if (isset($overrides['read'])) {
+ $read_override = preg_replace('!^.*(PHPG_PROP_READER).*$!m',
"$1($object->c_name, $prop_name)", $overrides['read']);
+ $this->write_override($read_override, $object->c_name, $prop_name,
'read', 'extra');
+ $this->divert("gen", "%%%% %-11s %s->%s\n",
"reader for", $object->c_name, $prop_name);
+ $this->cover["props"]->written();
+ } else {
+ $read_func = 'NULL';
+ }
+
+ if (isset($overrides['write'])) {
+ $write_override = preg_replace('!^.*(PHPG_PROP_WRITER).*$!m',
"static $1($object->c_name, $prop_name)", $overrides['write']);
+ $this->write_override($overrides['write'], $object->c_name,
$prop_name, 'write', 'extra');
+ $this->divert("gen ", "%%%% %-11s %s->%s\n",
"writer for", $object->c_name, $prop_name);
+ }
+
+ $prop_defs[] = sprintf(Templates::prop_info_entry,
+ $prop_name, $read_func, $write_func);
+ $num_written++;
$this->cover["props"]->written();
}
}
http://cvs.php.net/viewcvs.cgi/php-gtk/generator/override.php?r1=1.30&r2=1.31&diff_format=u
Index: php-gtk/generator/override.php
diff -u php-gtk/generator/override.php:1.30 php-gtk/generator/override.php:1.31
--- php-gtk/generator/override.php:1.30 Sat Feb 18 19:43:32 2006
+++ php-gtk/generator/override.php Fri Mar 10 05:26:44 2006
@@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-/* $Id: override.php,v 1.30 2006/02/18 19:43:32 andrei Exp $ */
+/* $Id: override.php,v 1.31 2006/03/10 05:26:44 andrei Exp $ */
class Overrides {
var $ignores = array();
@@ -28,9 +28,9 @@
var $prop_overrides = array();
var $handler_overrides = array();
var $extra_methods = array();
+ var $extra_props = array();
var $extra_arginfo = array();//reflection information
var $unused_extra_arginfo = array();//which reflection information has not been used
- var $getprops = array();
var $register_classes = array();
var $headers = '';
var $constants = '';
@@ -190,6 +190,17 @@
$this->lineinfo["$class.$method"] = array($blocklineno + 1,
$file_name);
break;
+ case 'add-prop':
+ $class = $words[0];
+ $prop = $words[1];
+ if (isset($words[2]))
+ $type = $words[2];
+ else
+ $type = 'read';
+ $this->extra_props[$class][$prop][$type] = $rest;
+ $this->lineinfo["$class.$prop.$type.extra"] = array($blocklineno + 1,
$file_name);
+ break;
+
case 'add-arginfo':
$class = $words[0];
$method = $words[1];
@@ -263,14 +274,14 @@
return $this->extra_methods[$class];
}
- function have_get_prop($class_name, $prop_name)
+ function have_extra_props($class)
{
- return isset($this->getprops[$class_name][$prop_name]);
+ return isset($this->extra_props[$class]);
}
- function get_prop($class_name, $prop_name)
+ function get_extra_props($class)
{
- return $this->getprops[$class_name][$prop_name];
+ return $this->extra_props[$class];
}
function have_post_registration($class)