diff options
| author | Hartmut Holzgraefe <hholzgra@php.net> | 2003-04-26 15:05:01 +0000 |
|---|---|---|
| committer | Hartmut Holzgraefe <hholzgra@php.net> | 2003-04-26 15:05:01 +0000 |
| commit | 76d82c53bb6d3aa3f7d32fc3c8c4aa964bfb9c4e (patch) | |
| tree | a2e287416698ecbd3dabe976af2bebd7f7e5095b /scripts/ext_skel_ng/php_global.php | |
| parent | ddefccd04a412a5facbf7013a06ff74963e0ce10 (diff) | |
| download | php-git-76d82c53bb6d3aa3f7d32fc3c8c4aa964bfb9c4e.tar.gz | |
module global variables and ini parameters now have
their own generator classes
Diffstat (limited to 'scripts/ext_skel_ng/php_global.php')
| -rw-r--r-- | scripts/ext_skel_ng/php_global.php | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/scripts/ext_skel_ng/php_global.php b/scripts/ext_skel_ng/php_global.php new file mode 100644 index 0000000000..bec2082e09 --- /dev/null +++ b/scripts/ext_skel_ng/php_global.php @@ -0,0 +1,80 @@ +<?php + + class php_global extends php_element { + + function __construct($attr) { + + $this->name = $attr["name"]; + + if (!$this->is_name($this->name)) { + $this->error[] = "'$attr[name]' is not a valid C variable name"; + } + + $this->type = $attr['type']; + if (!$this->is_type($this->type)) { + $this->error[] = "'$attr[type]' is not a valid C data type"; + } + } + + /* overriding type check as we deal with C types here + check is rather naive as it doesn't know about context + so we check for a sequence of valid names for now + TODO: check for either simple type, struct/class or single word (typedef) + */ + function is_type($type) { + $array = explode(" ", str_replace('*',' ',$type)); + foreach ($array as $name) { + if (empty($name)) continue; + if (!$this->is_name($name)) return false; + } + return true; + } + + + + static function c_code_header($name) { + return "static void php_{name}_init_globals(zend_{name}_globals *{name}_globals)\n{\n"; + } + + function c_code($name) { + $code = " {$name}_globals->{$this->name} = "; + if (strstr($this->type, "*")) { + $code .= "NULL;\n"; + } else { + $code .= "0;\n"; + } + return $code; + } + + static function c_code_footer() { + return "}\n\n"; + } + + static function h_code_header($name) { + return "ZEND_BEGIN_MODULE_GLOBALS({$name})\n"; + } + + function h_code($name) { + return " {$this->type} {$this->name};\n"; + } + + static function h_code_footer($name) { + $upname = strtoupper($name); + + return " +ZEND_END_MODULE_GLOBALS({$name}) + +#ifdef ZTS +#define {$upname}_G(v) TSRMG({$name}_globals_id, zend_{$name}_globals *, v) +#else +#define {$upname}_G(v) ({$name}_globals.v) +#endif + +"; + + } + + + } + +?> |
