throw new Exception("invalid flag {$flag}"); } return substr($ret, 2); } /////////////////////////////////////////////////////////////////////////////// // schema functions that will be used (and only used) by schemas function ResetSchema() { global $current_class, $preamble, $funcs, $classes, $constants; $current_class = ''; $preamble = ''; $funcs = array(); $classes = array(); $constants = array(); } ResetSchema(); function DefinePreamble($p) { global $preamble; $preamble .= $p; } function BeginClass($class) { global $classes, $current_class; $current_class = $class['name']; if (!isset($class['parent'])) { $class['parent'] = null; } if (!isset($class['ifaces'])) { $class['ifaces'] = array(); }
function parseIDLForMethods(&$ext_class_info, $mangleMap, $idlDir) { global $scriptPath; $files = findIDLFiles($idlDir); foreach ($files as $file) { require $file; global $classes; foreach ($classes as $cls) { $cname = $cls['name']; if (strtolower($cname) === 'closure' || strtolower($cname) === 'generatorclosure') { // Ignore the C++ version of Closure and GeneratorClosure; // the VM uses the pure Closure class declared in systemlib.php continue; } $method_info = array(); foreach ($cls['methods'] as $method) { $method_info[] = parseIDLMethod($method, $mangleMap, $cname); } $ext_class_info[$cname] = $method_info; } ResetSchema(); } }