cvs: php4 /scripts/ext_skel_ng php_global.php php_ini.php
| From: | Hartmut Holzgraefe | Date: | Sat, 26 Apr 2003 15:05:09 +0000 |
| Subject: | cvs: php4 /scripts/ext_skel_ng php_global.php php_ini.php | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-20508@lists.php.net to get a copy of this message | ||
hholzgra Sat Apr 26 11:05:09 2003 EDT
Added files:
/php4/scripts/ext_skel_ng php_global.php php_ini.php
Log:
module global variables and ini parameters now have
their own generator classes
Index: php4/scripts/ext_skel_ng/php_global.php
+++ php4/scripts/ext_skel_ng/php_global.php
<?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
";
}
}
?>
Index: php4/scripts/ext_skel_ng/php_ini.php
+++ php4/scripts/ext_skel_ng/php_ini.php
<?php
class php_ini extends php_element {
function __construct($attr) {
$this->name = $attr["name"];
if (!$this->is_name($this->name)) {
$this->error[] = "'$attr[name]' is not a valid php.ini directive name";
}
$this->type = $this->is_type($attr['type']);
if (!$this->type) {
$this->error[] = "'$attr[type]' is not a valid PHP data type";
}
$this->value = $attr["value"];
$this->desc = $attr["desc"];
switch ($attr["access"]) {
case "system":
$this->access = "PHP_INI_SYSTEM";
break;
case "perdir":
$this->access = "PHP_INI_PERDIR";
break;
case "user":
$this->access = "PHP_INI_USER";
break;
case "all":
case "":
$this->access = "PHP_INI_ALL";
break;
default:
$this->error[] = "'$attr[access]' is not a valid access mode
(system|perdir|user|all)";
}
switch ($this->type) {
case "bool":
$this->onupdate = "OnUpdateBool";
$this->c_type = "zend_bool";
break;
case "int":
$this->onupdate = "OnUpdateLong";
$this->c_type = "long";
break;
case "float":
$this->onupdate = "OnUpdateReal";
$this->c_type = "double";
break;
case "string":
$this->onupdate = "OnUpdateString";
$this->c_type = "char *";
break;
default:
$this->error[] = "'$this->type' not supported, only bool, int, float and
string";
break;
}
if (isset($attr["onupdate"])) {
$this->onupdate = $attr["onupdate"];
}
}
static function c_code_header($name) {
return "PHP_INI_BEGIN()\n";
}
function c_code($name) {
return " STD_PHP_INI_ENTRY(\"{$name}.$name\", \"{$this->value}\",
{$this->access}, {$this->onupdate}, $name, zend_{$name}_globals, {$name}_globals)\n";
}
static function c_code_footer() {
return "PHP_INI_END()\n\n";
}
static function docbook_xml_header($name) {
return
" <table>
<title>$name runtime configuration</title>
<tgroup cols='3'>
<thead>
<row>
<entry>directive</entry>
<entry>default value</entry>
<entry>descrpition</entry>
</row>
</thead>
<tbody>
";
}
function docbook_xml() {
return
" <row>
<entry>$this->name</entry>
<entry>$this->value</entry>
<entry>$this->desc</entry>
</row>
";
}
static function docbook_xml_footer() {
return
" </tbody>
</tgroup>
</table>
";
}
}
?>