remove_functions_implementing_unknown_types($defFunctions); //Remove deprecated functions. remove_deprecated_functions($defFunctions); //Remove classes and methods not implemented on all 3 target platforms (windows, linux, mac) remove_classes_and_methods_not_crossplatform($defIni); //Remove deprecated class methods. remove_deprecated_methods($defIni); //Remove methods implementing unhandled argument declaration like //wxRichTextCtrl::PrepareContent(wxRichTextParagraphLayoutBox &WXUNUSED(container)) remove_methods_implementing_unhandled_arguments($defIni); //Remove obsolete .cpp and .h files remove_old_src_and_headers(); //Store all classes that derive from wxEvtHandler $evnHandlers = derivationsOfClass('wxEvtHandler'); //Store all classes that derive from wxObject $wxObject_derivations = derivationsOfClass('wxObject'); print "\n"; //Merges method overloads from parents to child classes //classes_method_merger($defIni); //This is provoking compilation errors on some classes //Generate header files of class groups $header_files = ""; foreach ($defClassGroups as $header_name => $v) { $header_name = str_replace("group_class_", "", $header_name); $header_files .= "#include \"{$header_name}.h\"\n"; } //Generate classes source and header files foreach ($defClassGroups as $file_name => $class_list) { //Strip group_class_ $file_name = str_replace("group_class_", "", $file_name); echo "Generating {$file_name}.cpp ...\n"; //Add neccesary headers to classes implementation file
/** * Generates the code to correctly cast the references variable using * the parent_rsrc_type in order to correctly retrieve the references * object. */ function references_cast_code($class_name) { $derivations = derivationsOfClass($class_name); //Instead of using elseif we have to break it in multiple if since //MS Visual C++ compiler doesnt supports a very deep elseif sequence. $code .= "bool reference_type_found = false;\n\n"; $code .= tabs(3) . "if(current_object_type == PHP_" . strtoupper($class_name) . "_TYPE){\n"; $code .= tabs(4) . "references = &(({$class_name}_php*)native_object)->references;\n"; $code .= tabs(4) . "reference_type_found = true;\n"; $code .= tabs(3) . "}\n"; foreach ($derivations as $derivation_name => $derivation_value) { $code .= tabs(3) . "if((current_object_type == PHP_" . strtoupper($derivation_name) . "_TYPE) && (!reference_type_found)){\n"; $code .= tabs(4) . "references = &(({$derivation_name}_php*)native_object)->references;\n"; $code .= tabs(4) . "reference_type_found = true;\n"; $code .= tabs(3) . "}\n"; } return $code; }
/** * Check if a given class inherits from another class * * @param string $parent_class Base/parent class to check * @param string $child_class Child class to check if inherits from parent class * * @return bool */ function inherits_from_class($parent_class, $child_class) { $derivations = derivationsOfClass($parent_class); return isset($derivations[$child_class]); }
#ifdef USE_WXPHP_DEBUG php_printf("Invoking virtual <?php echo $class_name; ?> ::onEvent\n"); php_printf("===========================================\n"); #endif zval *arg[1]; MAKE_STD_ZVAL(arg[0]); TSRMLS_FETCH(); if(0) {} <?php foreach (derivationsOfClass('wxEvent') as $kevn => $vevn) { ?> else if(!tcscmp(evnt.GetClassInfo()->GetClassName(), wxT("<?php echo $kevn; ?> "))) { #ifdef USE_WXPHP_DEBUG php_printf("Converting event type '<?php echo $kevn; ?> ' to zval to call user function.\n\n"); #endif object_init_ex(arg[0], php_<?php
function derivationsOfClass($myType) { //retorna lista de todas as subclasses derivadas desta + esta global $defIni; $typeVerifier = array(); if ($defIni[$myType]['_type'] != "abstract") { $typeVerifier[$myType] = 1; } foreach ($defIni as $k => $v) { if (isset($v['_implements'])) { if (in_array($myType, $v['_implements'])) { $typeVerifier[$k] = 1; $typeVerifier = array_merge($typeVerifier, derivationsOfClass($k)); } } if ($v['_extends'] == $myType) { $typeVerifier[$k] = 1; $typeVerifier = array_merge($typeVerifier, derivationsOfClass($k)); } } return $typeVerifier; }