com gtk/php-gtk: Generate extra class methods added in overrides.: generator/generator.php

[email protected] (David Soria Parra) Sat, 05 Nov 2005 05:53:34 +0000
Newsgroups php.gtk.cvs
Message-ID <[email protected]>
Commit:    1d4fb3d121c2508fa2efadeed25b0d7bd6b16957
Author:    Andrei Zmievski <[email protected]>         Sat, 5 Nov 2005 05:53:34 +0000
Parents:   1005a62cc91cae1d61e4e14b95821f477c475009
Branches:  master

Link:       http://git.php.net/?p=gtk/php-gtk.git;a=commitdiff;h=1d4fb3d121c2508fa2efadeed25b0d7bd6b16957

Log:
Generate extra class methods added in overrides.

Changed paths:
  M  generator/generator.php


Diff:
1d4fb3d121c2508fa2efadeed25b0d7bd6b16957
diff --git a/generator/generator.php b/generator/generator.php
index 101003b..7c4ec7d 100644
--- a/generator/generator.php
+++ b/generator/generator.php
@@ -326,6 +326,27 @@ class Generator {
             }
         }
 
+        if ($this->overrides->have_extra_methods($object->c_name)) {
+            foreach ($this->overrides->get_extra_methods($object->c_name) as $method_name => $method_body) {
+                list($arginfo, $reflection_func) = $this->genReflectionArgInfo(null, $object, $method_name);
+
+                $method_body = preg_replace('!^.*(PHP_METHOD).*$!m', "static $1($object->c_name, $method_name)", $method_body);
+                $this->write_override($method_body, $object->c_name, $method_name);
+                $method_entries[$method_name] = array($object->c_name, $method_name,
+                                                      $reflection_func, 'ZEND_ACC_PUBLIC');
+                $this->divert("gen", "%s  %-11s %s::%s\n", "%%", "method", $object->c_name, $method_name);
+                $num_written++;
+                $this->cover["methods"]->written();
+
+                if ($arginfo === null) {
+                    $object->methods[$method_name] = 1;
+                } else {
+                    $methodarginfos .= $arginfo;
+                    $object->methods[$method_name] = 2;
+                }
+            }
+        }
+
         $this->log_print("(%d written, %d skipped)\n", $num_written, $num_skipped);
 
         return array($method_entries, $methodarginfos);