/** * Generates the code that calls a method, function or constructor * and returns the data * * @param array $method_definitions Data for the method or function. * @param string $method_name Name of the function. * @param string $class_name Name of parent class if applicable * @param bool $is_constructor Flag to indicate if constructor or just a regular method. * * @return string Generated code ready to insert on the end of * the PHP_METHOD or PHP_FUNCTION body after the generated code of class_method_called_overload() */ function function_return($method_definitions, $method_name, $class_name = null, $is_constructor = false) { //Positions on the array of $method_definition where type and parameters data is stored $function_return_types = "return_type"; $parameter_types = "parameters_type"; $parameter_names = "parameters_name"; $parameter_required = "parameters_required"; $parameter_values = "parameters_default_value"; $return_called_overload = ""; foreach ($method_definitions as $declaration_index => $declaration) { $return_called_overload .= "if(overload{$declaration_index}_called)\n"; $return_called_overload .= "\t{\n"; $required_parameters = count($declaration[$parameter_required]); $parameters_count = count($declaration[$parameter_types]); //Generate code for object arguments foreach ($declaration[$parameter_types] as $parameter_index => $parameter_type) { $parameter_is_array = $declaration["parameters_is_array"][$parameter_index]; $argument_type_modifier = ""; $standard_parameter_type = parameter_type($parameter_type, $parameter_is_array, $method_name, $class_name, $argument_type_modifier); $plain_type = str_replace(array("const ", "&", "*"), "", $parameter_type); switch ($standard_parameter_type) { case "bool": switch ($argument_type_modifier) { case "const_pointer": $return_called_overload .= tabs(2) . "int array_count{$declaration_index}_{$parameter_index} = 1;\n"; $return_called_overload .= tabs(2) . "HashTable* arr_hash{$declaration_index}_{$parameter_index};\n"; $return_called_overload .= tabs(2) . "if(arguments_received > {$parameter_index})\n"; $return_called_overload .= tabs(2) . "{\n"; $return_called_overload .= tabs(3) . "arr_hash{$declaration_index}_{$parameter_index} = Z_ARRVAL_P(" . $declaration[$parameter_names][$parameter_index] . $declaration_index . ");\n"; $return_called_overload .= tabs(3) . "array_count{$declaration_index}_{$parameter_index} = zend_hash_num_elements(arr_hash{$declaration_index}_{$parameter_index});\n"; $return_called_overload .= tabs(2) . "}\n"; $return_called_overload .= tabs(2) . "bool* bools_array{$declaration_index}_{$parameter_index} = new bool[array_count{$declaration_index}_{$parameter_index}];\n"; $return_called_overload .= tabs(2) . "bool bools_continue{$declaration_index}_{$parameter_index} = true;\n\n"; break; } break; case "integer": switch ($argument_type_modifier) { case "const_pointer": $return_called_overload .= tabs(2) . "int array_count{$declaration_index}_{$parameter_index} = 1;\n"; $return_called_overload .= tabs(2) . "HashTable* arr_hash{$declaration_index}_{$parameter_index};\n"; $return_called_overload .= tabs(2) . "if(arguments_received > {$parameter_index})\n"; $return_called_overload .= tabs(2) . "{\n"; $return_called_overload .= tabs(3) . "arr_hash{$declaration_index}_{$parameter_index} = Z_ARRVAL_P(" . $declaration[$parameter_names][$parameter_index] . $declaration_index . ");\n"; $return_called_overload .= tabs(3) . "array_count{$declaration_index}_{$parameter_index} = zend_hash_num_elements(arr_hash{$declaration_index}_{$parameter_index});\n"; $return_called_overload .= tabs(2) . "}\n"; $return_called_overload .= tabs(2) . "{$plain_type}* integers_array{$declaration_index}_{$parameter_index} = new {$plain_type}[array_count{$declaration_index}_{$parameter_index}];\n"; $return_called_overload .= tabs(2) . "bool integers_continue{$declaration_index}_{$parameter_index} = true;\n\n"; break; } break; case "float": switch ($argument_type_modifier) { case "const_pointer": $return_called_overload .= tabs(2) . "int array_count{$declaration_index}_{$parameter_index} = 1;\n"; $return_called_overload .= tabs(2) . "HashTable* arr_hash{$declaration_index}_{$parameter_index};\n"; $return_called_overload .= tabs(2) . "if(arguments_received > {$parameter_index})\n"; $return_called_overload .= tabs(2) . "{\n"; $return_called_overload .= tabs(3) . "arr_hash{$declaration_index}_{$parameter_index} = Z_ARRVAL_P(" . $declaration[$parameter_names][$parameter_index] . $declaration_index . ");\n"; $return_called_overload .= tabs(3) . "array_count{$declaration_index}_{$parameter_index} = zend_hash_num_elements(arr_hash{$declaration_index}_{$parameter_index});\n"; $return_called_overload .= tabs(2) . "}\n"; $return_called_overload .= tabs(2) . "{$plain_type}* floats_array{$declaration_index}_{$parameter_index} = new {$plain_type}[array_count{$declaration_index}_{$parameter_index}];\n"; $return_called_overload .= tabs(2) . "bool floats_continue{$declaration_index}_{$parameter_index} = true;\n\n"; break; } break; case "string": switch ($argument_type_modifier) { case "const_pointer": //const wxString* Array //const wxString* Array case "const_reference_array": //const wxString&[] //const wxString&[] case "const_none_array": //const wxString[] //const wxString[] case "none_array": //wxString[] $return_called_overload .= tabs(2) . "int array_count{$declaration_index}_{$parameter_index} = 1;\n"; $return_called_overload .= tabs(2) . "HashTable* arr_hash{$declaration_index}_{$parameter_index};\n"; $return_called_overload .= tabs(2) . "if(arguments_received > {$parameter_index})\n"; $return_called_overload .= tabs(2) . "{\n"; $return_called_overload .= tabs(3) . "arr_hash{$declaration_index}_{$parameter_index} = Z_ARRVAL_P(" . $declaration[$parameter_names][$parameter_index] . $declaration_index . ");\n"; $return_called_overload .= tabs(3) . "array_count{$declaration_index}_{$parameter_index} = zend_hash_num_elements(arr_hash{$declaration_index}_{$parameter_index});\n"; $return_called_overload .= tabs(2) . "}\n"; $return_called_overload .= tabs(2) . "wxString* strings_array{$declaration_index}_{$parameter_index} = new wxString[array_count{$declaration_index}_{$parameter_index}];\n"; $return_called_overload .= tabs(2) . "bool strings_continue{$declaration_index}_{$parameter_index} = true;\n\n"; break; } break; case "strings_array": $return_called_overload .= tabs(2) . "wxArrayString strings_array{$declaration_index}_{$parameter_index};\n"; $return_called_overload .= tabs(2) . "bool strings_continue{$declaration_index}_{$parameter_index} = true;\n\n"; break; case "date": switch ($argument_type_modifier) { case "const_pointer": $return_called_overload .= tabs(2) . "int array_count{$declaration_index}_{$parameter_index} = 1;\n"; $return_called_overload .= tabs(2) . "HashTable* arr_hash{$declaration_index}_{$parameter_index};\n"; $return_called_overload .= tabs(2) . "if(arguments_received > {$parameter_index})\n"; $return_called_overload .= tabs(2) . "{\n"; $return_called_overload .= tabs(3) . "arr_hash{$declaration_index}_{$parameter_index} = Z_ARRVAL_P(" . $declaration[$parameter_names][$parameter_index] . $declaration_index . ");\n"; $return_called_overload .= tabs(3) . "array_count{$declaration_index}_{$parameter_index} = zend_hash_num_elements(arr_hash{$declaration_index}_{$parameter_index});\n"; $return_called_overload .= tabs(2) . "}\n"; $return_called_overload .= tabs(2) . "wxDateTime* dates_array{$declaration_index}_{$parameter_index} = new wxDateTime[array_count{$declaration_index}_{$parameter_index}];\n"; $return_called_overload .= tabs(2) . "bool dates_continue{$declaration_index}_{$parameter_index} = true;\n\n"; break; } break; } } $return_called_overload .= "\t\tswitch(arguments_received)\n"; $return_called_overload .= "\t\t{\n"; for ($required_parameters; $required_parameters <= $parameters_count; $required_parameters++) { $return_called_overload .= "\t\t\tcase {$required_parameters}:\n"; $return_called_overload .= "\t\t\t{\n"; $after_return_called_overload = ""; //Holds code that sets reference variables (* or &) $after_constructor_called = ""; //Holds code to execute after a constructor was called $parameters_string = ""; for ($parameter_index = 0; $parameter_index < $required_parameters; $parameter_index++) { $parameter_is_array = $declaration["parameters_is_array"][$parameter_index]; $declaration_modifier = ""; $standard_parameter_type = parameter_type($declaration[$parameter_types][$parameter_index], $parameter_is_array, $method_name, $class_name, $declaration_modifier); $argument_parameter_type = str_replace(array("const ", "*", "&"), "", $declaration[$parameter_types][$parameter_index]); //Holds the name of the variable passed to called function $variable_name = $declaration[$parameter_names][$parameter_index] . $declaration_index; //Holds the name for the reference variable $reference_name = $declaration[$parameter_names][$parameter_index] . $declaration_index . "_ref"; switch ($standard_parameter_type) { case "bool": switch ($declaration_modifier) { case "pointer": //bool* $parameters_string .= $variable_name . ", "; break; case "const_pointer": //const bool* Array $return_called_overload .= tabs(4) . "int array_index{$declaration_index}_{$parameter_index} = 0;\n"; $return_called_overload .= tabs(4) . "zval** temp_array_value{$declaration_index}_{$parameter_index} = 0;\n"; $return_called_overload .= tabs(4) . "while(bools_continue{$declaration_index}_{$parameter_index})\n"; $return_called_overload .= tabs(4) . "{\n"; $return_called_overload .= tabs(5) . "if(zend_hash_index_find(HASH_OF(" . $variable_name . "), array_index{$declaration_index}_{$parameter_index}, (void**)&temp_array_value{$declaration_index}_{$parameter_index}) == SUCCESS)\n"; $return_called_overload .= tabs(5) . "{\n"; $return_called_overload .= tabs(6) . "convert_to_boolean_ex(temp_array_value{$declaration_index}_{$parameter_index});\n"; $return_called_overload .= tabs(6) . "bools_array{$declaration_index}_{$parameter_index}[array_index{$declaration_index}_{$parameter_index}] = Z_BVAL_PP(temp_array_value{$declaration_index}_{$parameter_index});\n"; $return_called_overload .= tabs(6) . "array_index{$declaration_index}_{$parameter_index}++;\n"; $return_called_overload .= tabs(5) . "}\n"; $return_called_overload .= tabs(5) . "else\n"; $return_called_overload .= tabs(5) . "{\n"; $return_called_overload .= tabs(6) . "bools_continue{$declaration_index}_{$parameter_index} = false;\n"; $return_called_overload .= tabs(5) . "}\n"; $return_called_overload .= tabs(4) . "}\n"; $parameters_string .= "bools_array{$declaration_index}_{$parameter_index}, "; $after_return_called_overload .= tabs(4) . "delete[] bools_array{$declaration_index}_{$parameter_index};\n"; break; case "reference": //bool& $parameters_string .= $variable_name . ", "; break; case "const_reference": //const bool& //const bool& case "none": //bool //bool case "const_none": //const bool $parameters_string .= $variable_name . ", "; break; } //Code to set references switch ($declaration_modifier) { case "pointer": $after_return_called_overload .= tabs(4) . "size_t elements_returned{$declaration_index}_{$parameter_index} = sizeof({$variable_name})/sizeof(*{$variable_name});\n"; $after_return_called_overload .= tabs(4) . "array_init({$reference_name});\n"; $after_return_called_overload .= tabs(4) . "for(size_t i=0; i<elements_returned{$declaration_index}_{$parameter_index}; i++)\n"; $after_return_called_overload .= tabs(4) . "{\n"; $after_return_called_overload .= tabs(5) . "add_next_index_long({$reference_name}, {$variable_name}[i]);\n"; $after_return_called_overload .= tabs(4) . "}\n"; break; case "reference": $after_return_called_overload .= tabs(4) . "ZVAL_BOOL({$reference_name}, {$variable_name});\n"; break; } break; case "integer": case "class_enum": case "global_enum": $integer_type = $class_enum . $declaration[$parameter_types][$parameter_index]; if ($enum_class = enum_parent_class($argument_parameter_type)) { if ("" . strpos($integer_type, "{$enum_class}::") . "" == "") { $integer_type = str_replace($argument_parameter_type, "{$enum_class}::{$argument_parameter_type}", $integer_type); } } switch ($declaration_modifier) { case "pointer": //integer* $parameters_string .= "(" . $integer_type . ") " . $variable_name . ", "; break; case "const_pointer": //const integer* Array $return_called_overload .= tabs(4) . "int array_index{$declaration_index}_{$parameter_index} = 0;\n"; $return_called_overload .= tabs(4) . "zval** temp_array_value{$declaration_index}_{$parameter_index} = 0;\n"; $return_called_overload .= tabs(4) . "while(integers_continue{$declaration_index}_{$parameter_index})\n"; $return_called_overload .= tabs(4) . "{\n"; $return_called_overload .= tabs(5) . "if(zend_hash_index_find(HASH_OF(" . $variable_name . "), array_index{$declaration_index}_{$parameter_index}, (void**)&temp_array_value{$declaration_index}_{$parameter_index}) == SUCCESS)\n"; $return_called_overload .= tabs(5) . "{\n"; $return_called_overload .= tabs(6) . "convert_to_long_ex(temp_array_value{$declaration_index}_{$parameter_index});\n"; $return_called_overload .= tabs(6) . "integers_array{$declaration_index}_{$parameter_index}[array_index{$declaration_index}_{$parameter_index}] = ({$argument_parameter_type}) Z_LVAL_PP(temp_array_value{$declaration_index}_{$parameter_index});\n"; $return_called_overload .= tabs(6) . "array_index{$declaration_index}_{$parameter_index}++;\n"; $return_called_overload .= tabs(5) . "}\n"; $return_called_overload .= tabs(5) . "else\n"; $return_called_overload .= tabs(5) . "{\n"; $return_called_overload .= tabs(6) . "integers_continue{$declaration_index}_{$parameter_index} = false;\n"; $return_called_overload .= tabs(5) . "}\n"; $return_called_overload .= tabs(4) . "}\n"; $parameters_string .= "(" . $integer_type . ") " . "integers_array{$declaration_index}_{$parameter_index}, "; $after_return_called_overload .= tabs(4) . "delete[] integers_array{$declaration_index}_{$parameter_index};\n"; break; case "reference": //integer& $parameters_string .= "(" . $integer_type . ") " . $variable_name . ", "; break; case "const_reference": //const integer& //const integer& case "none": //integer //integer case "const_none": //const integer $parameters_string .= "(" . $integer_type . ") " . $variable_name . ", "; break; } //Code to set references switch ($declaration_modifier) { case "pointer": $after_return_called_overload .= tabs(4) . "size_t elements_returned{$declaration_index}_{$parameter_index} = sizeof({$variable_name})/sizeof(*{$variable_name});\n"; $after_return_called_overload .= tabs(4) . "array_init({$reference_name});\n"; $after_return_called_overload .= tabs(4) . "for(size_t i=0; i<elements_returned{$declaration_index}_{$parameter_index}; i++)\n"; $after_return_called_overload .= tabs(4) . "{\n"; $after_return_called_overload .= tabs(5) . "add_next_index_long({$reference_name}, {$variable_name}[i]);\n"; $after_return_called_overload .= tabs(4) . "}\n"; break; case "reference": $after_return_called_overload .= tabs(4) . "ZVAL_LONG({$reference_name}, {$variable_name});\n"; break; } break; case "float": switch ($declaration_modifier) { case "pointer": //double* $parameters_string .= $variable_name . ", "; break; case "const_pointer": //const double* Array $return_called_overload .= tabs(4) . "int array_index{$declaration_index}_{$parameter_index} = 0;\n"; $return_called_overload .= tabs(4) . "zval** temp_array_value{$declaration_index}_{$parameter_index} = 0;\n"; $return_called_overload .= tabs(4) . "while(floats_continue{$declaration_index}_{$parameter_index})\n"; $return_called_overload .= tabs(4) . "{\n"; $return_called_overload .= tabs(5) . "if(zend_hash_index_find(HASH_OF(" . $variable_name . "), array_index{$declaration_index}_{$parameter_index}, (void**)&temp_array_value{$declaration_index}_{$parameter_index}) == SUCCESS)\n"; $return_called_overload .= tabs(5) . "{\n"; $return_called_overload .= tabs(6) . "convert_to_double_ex(temp_array_value{$declaration_index}_{$parameter_index});\n"; $return_called_overload .= tabs(6) . "floats_array{$declaration_index}_{$parameter_index}[array_index{$declaration_index}_{$parameter_index}] = ({$argument_parameter_type}) Z_DVAL_PP(temp_array_value{$declaration_index}_{$parameter_index});\n"; $return_called_overload .= tabs(6) . "array_index{$declaration_index}_{$parameter_index}++;\n"; $return_called_overload .= tabs(5) . "}\n"; $return_called_overload .= tabs(5) . "else\n"; $return_called_overload .= tabs(5) . "{\n"; $return_called_overload .= tabs(6) . "floats_continue{$declaration_index}_{$parameter_index} = false;\n"; $return_called_overload .= tabs(5) . "}\n"; $return_called_overload .= tabs(4) . "}\n"; $parameters_string .= "(" . $declaration[$parameter_types][$parameter_index] . ") " . "floats_array{$declaration_index}_{$parameter_index}, "; $after_return_called_overload .= tabs(4) . "delete[] floats_array{$declaration_index}_{$parameter_index};\n"; break; case "reference": //double& $parameters_string .= $variable_name . ", "; break; case "const_reference": //const double& //const double& case "none": //double //double case "const_none": //const double $parameters_string .= $variable_name . ", "; break; } //Code to set references switch ($declaration_modifier) { case "pointer": $after_return_called_overload .= tabs(4) . "size_t elements_returned{$declaration_index}_{$parameter_index} = sizeof({$variable_name})/sizeof(*{$variable_name});\n"; $after_return_called_overload .= tabs(4) . "array_init({$reference_name});\n"; $after_return_called_overload .= tabs(4) . "for(size_t i=0; i<elements_returned{$declaration_index}_{$parameter_index}; i++)\n"; $after_return_called_overload .= tabs(4) . "{\n"; $after_return_called_overload .= tabs(5) . "add_next_index_long({$reference_name}, {$variable_name}[i]);\n"; $after_return_called_overload .= tabs(4) . "}\n"; break; case "reference": $after_return_called_overload .= tabs(4) . "ZVAL_DOUBLE({$reference_name}, {$variable_name});\n"; break; } break; case "characters": switch ($declaration_modifier) { case "pointer": //char* Array with reference //char* Array with reference case "const_pointer": //const char* Array $parameters_string .= $variable_name . ", "; break; case "reference": //char& $parameters_string .= "(" . $declaration[$parameter_types][$parameter_index] . ") " . $variable_name . ", "; break; case "const_reference": //const char& //const char& case "none": //char //char case "const_none": //const char $parameters_string .= "(" . $declaration[$parameter_types][$parameter_index] . ") " . $variable_name . ", "; break; } //Code to set references switch ($declaration_modifier) { case "pointer": $after_return_called_overload .= tabs(4) . "ZVAL_STRING({$reference_name}, {$variable_name}, 1);\n"; break; case "reference": $after_return_called_overload .= tabs(4) . "ZVAL_LONG({$reference_name}, {$variable_name});\n"; break; } break; case "void": switch ($declaration_modifier) { case "pointer": //void* //void* case "const_pointer": //const void* $parameters_string .= "(" . $declaration[$parameter_types][$parameter_index] . ") " . $variable_name . ", "; break; //Not handled for now //Not handled for now case "pointer_pointer": case "const_pointer_pointer": $parameters_string .= "(void**) 0, "; break; } //Code to set references switch ($declaration_modifier) { case "pointer": $after_return_called_overload .= tabs(4) . "ZVAL_STRING({$reference_name}, (char*) {$variable_name}, 1);\n"; break; } break; case "date": switch ($declaration_modifier) { case "pointer": //date* $return_called_overload .= tabs(4) . "wxDateTime date_time{$declaration_index}_{$parameter_index} = wxDateTime(" . $variable_name . ");\n"; $parameters_string .= "&date_time{$declaration_index}_{$parameter_index}, "; break; case "const_pointer": //const date* Array $return_called_overload .= tabs(4) . "int array_index{$declaration_index}_{$parameter_index} = 0;\n"; $return_called_overload .= tabs(4) . "zval** temp_array_value{$declaration_index}_{$parameter_index} = 0;\n"; $return_called_overload .= tabs(4) . "while(dates_continue{$declaration_index}_{$parameter_index})\n"; $return_called_overload .= tabs(4) . "{\n"; $return_called_overload .= tabs(5) . "if(zend_hash_index_find(HASH_OF(" . $variable_name . "), array_index{$declaration_index}_{$parameter_index}, (void**)&temp_array_value{$declaration_index}_{$parameter_index}) == SUCCESS)\n"; $return_called_overload .= tabs(5) . "{\n"; $return_called_overload .= tabs(6) . "convert_to_long_ex(temp_array_value{$declaration_index}_{$parameter_index});\n"; $return_called_overload .= tabs(6) . "dates_array{$declaration_index}_{$parameter_index}[array_index{$declaration_index}_{$parameter_index}] = wxDateTime((time_t) Z_LVAL_PP(temp_array_value{$declaration_index}_{$parameter_index}));\n"; $return_called_overload .= tabs(6) . "array_index{$declaration_index}_{$parameter_index}++;\n"; $return_called_overload .= tabs(5) . "}\n"; $return_called_overload .= tabs(5) . "else\n"; $return_called_overload .= tabs(5) . "{\n"; $return_called_overload .= tabs(6) . "dates_continue{$declaration_index}_{$parameter_index} = false;\n"; $return_called_overload .= tabs(5) . "}\n"; $return_called_overload .= tabs(4) . "}\n"; $parameters_string .= "dates_array{$declaration_index}_{$parameter_index}, "; $after_return_called_overload .= tabs(4) . "delete[] dates_array{$declaration_index}_{$parameter_index};\n"; break; case "reference": //date& $return_called_overload .= tabs(4) . "wxDateTime date_time{$declaration_index}_{$parameter_index} = wxDateTime(" . $variable_name . ");\n"; $parameters_string .= "date_time{$declaration_index}_{$parameter_index}, "; break; case "const_reference": //const date& //const date& case "none": //date //date case "const_none": //const date $parameters_string .= "wxDateTime(" . $variable_name . "), "; break; } //Code to set references switch ($declaration_modifier) { case "pointer": case "reference": $after_return_called_overload .= tabs(4) . "ZVAL_LONG({$reference_name}, date_time{$declaration_index}_{$parameter_index}.GetTicks());\n"; break; } break; case "string": switch ($declaration_modifier) { case "pointer": //wxString* $return_called_overload .= tabs(4) . "wxString string_arg{$declaration_index}_{$parameter_index} = wxString(" . $variable_name . ", wxConvUTF8);\n"; $parameters_string .= "&string_arg{$declaration_index}_{$parameter_index}, "; break; case "const_pointer": //const wxString* Array //const wxString* Array case "const_reference_array": //const wxString&[] //const wxString&[] case "const_none_array": //const wxString[] //const wxString[] case "none_array": //wxString[] $return_called_overload .= tabs(4) . "int array_index{$declaration_index}_{$parameter_index} = 0;\n"; $return_called_overload .= tabs(4) . "zval** temp_array_value{$declaration_index}_{$parameter_index} = 0;\n"; $return_called_overload .= tabs(4) . "while(strings_continue{$declaration_index}_{$parameter_index})\n"; $return_called_overload .= tabs(4) . "{\n"; $return_called_overload .= tabs(5) . "if(zend_hash_index_find(HASH_OF(" . $variable_name . "), array_index{$declaration_index}_{$parameter_index}, (void**)&temp_array_value{$declaration_index}_{$parameter_index}) == SUCCESS)\n"; $return_called_overload .= tabs(5) . "{\n"; $return_called_overload .= tabs(6) . "convert_to_string(*temp_array_value{$declaration_index}_{$parameter_index});\n"; $return_called_overload .= tabs(6) . "strings_array{$declaration_index}_{$parameter_index}[array_index{$declaration_index}_{$parameter_index}] = wxString(Z_STRVAL_PP(temp_array_value{$declaration_index}_{$parameter_index}), wxConvUTF8);\n"; $return_called_overload .= tabs(6) . "array_index{$declaration_index}_{$parameter_index}++;\n"; $return_called_overload .= tabs(5) . "}\n"; $return_called_overload .= tabs(5) . "else\n"; $return_called_overload .= tabs(5) . "{\n"; $return_called_overload .= tabs(6) . "strings_continue{$declaration_index}_{$parameter_index} = false;\n"; $return_called_overload .= tabs(5) . "}\n"; $return_called_overload .= tabs(4) . "}\n"; $parameters_string .= "strings_array{$declaration_index}_{$parameter_index}, "; $after_return_called_overload .= tabs(4) . "delete[] strings_array{$declaration_index}_{$parameter_index};\n"; break; case "reference": //wxString& $return_called_overload .= tabs(4) . "wxString string_arg{$declaration_index}_{$parameter_index} = wxString(" . $variable_name . ", wxConvUTF8);\n"; $parameters_string .= "string_arg{$declaration_index}_{$parameter_index}, "; break; case "const_reference": //const wxString& //const wxString& case "none": //char //char case "const_none": //const wxString $parameters_string .= "wxString(" . $variable_name . ", wxConvUTF8), "; break; } //Code to set references switch ($declaration_modifier) { case "pointer": case "reference": $after_return_called_overload .= tabs(4) . "char* temp_string{$declaration_index}_{$parameter_index};\n"; $after_return_called_overload .= tabs(4) . "temp_string{$declaration_index}_{$parameter_index} = (char*)malloc(sizeof(wxChar)*(string_arg{$declaration_index}_{$parameter_index}.size()+1));\n"; $after_return_called_overload .= tabs(4) . "strcpy (temp_string{$declaration_index}_{$parameter_index}, (const char *) string_arg{$declaration_index}_{$parameter_index}.char_str() );\n"; $after_return_called_overload .= tabs(4) . "ZVAL_STRING({$reference_name}, (char*) temp_string{$declaration_index}_{$parameter_index}, 1);\n"; $after_return_called_overload .= tabs(4) . "free(temp_string{$declaration_index}_{$parameter_index});\n\n"; break; } break; case "strings_array": $return_called_overload .= tabs(4) . "int array_index{$declaration_index}_{$parameter_index} = 0;\n"; $return_called_overload .= tabs(4) . "zval** temp_array_value{$declaration_index}_{$parameter_index} = 0;\n"; $return_called_overload .= tabs(4) . "while(strings_continue{$declaration_index}_{$parameter_index})\n"; $return_called_overload .= tabs(4) . "{\n"; $return_called_overload .= tabs(5) . "if(zend_hash_index_find(HASH_OF(" . $variable_name . "), array_index{$declaration_index}_{$parameter_index}, (void**)&temp_array_value{$declaration_index}_{$parameter_index}) == SUCCESS)\n"; $return_called_overload .= tabs(5) . "{\n"; $return_called_overload .= tabs(6) . "convert_to_string(*temp_array_value{$declaration_index}_{$parameter_index});\n"; $return_called_overload .= tabs(6) . "strings_array{$declaration_index}_{$parameter_index}.Add(wxString(Z_STRVAL_PP(temp_array_value{$declaration_index}_{$parameter_index}), wxConvUTF8));\n"; $return_called_overload .= tabs(6) . "array_index{$declaration_index}_{$parameter_index}++;\n"; $return_called_overload .= tabs(5) . "}\n"; $return_called_overload .= tabs(5) . "else\n"; $return_called_overload .= tabs(5) . "{\n"; $return_called_overload .= tabs(6) . "strings_continue{$declaration_index}_{$parameter_index} = false;\n"; $return_called_overload .= tabs(5) . "}\n"; $return_called_overload .= tabs(4) . "}\n"; switch ($declaration_modifier) { case "const_pointer": case "pointer": $parameters_string .= "&strings_array{$declaration_index}_{$parameter_index}, "; break; case "const_reference": case "reference": case "const_none": case "none": $parameters_string .= "strings_array{$declaration_index}_{$parameter_index}, "; break; } //Code to set references switch ($declaration_modifier) { case "pointer": case "reference": $after_return_called_overload .= tabs(4) . "char* temp_string{$declaration_index}_{$parameter_index};\n"; $after_return_called_overload .= tabs(4) . "array_init({$variable_name});\n"; $after_return_called_overload .= tabs(4) . "for(size_t i=0; i<strings_array{$declaration_index}_{$parameter_index}.GetCount(); i++)\n"; $after_return_called_overload .= tabs(4) . "{\n"; $after_return_called_overload .= tabs(5) . "temp_string{$declaration_index}_{$parameter_index} = (char*)malloc(sizeof(wxChar)*(strings_array{$declaration_index}_{$parameter_index}[i].size()+1));\n"; $after_return_called_overload .= tabs(5) . "strcpy (temp_string{$declaration_index}_{$parameter_index}, (const char *) strings_array{$declaration_index}_{$parameter_index}[i].char_str() );\n"; $after_return_called_overload .= tabs(5) . "add_next_index_string({$variable_name}, (char*) temp_string{$declaration_index}_{$parameter_index}, 1);\n"; $after_return_called_overload .= tabs(5) . "free(temp_string{$declaration_index}_{$parameter_index});\n\n"; $after_return_called_overload .= tabs(4) . "}\n"; break; } break; case "object": switch ($declaration_modifier) { case "pointer": //object* Array with reference //object* Array with reference case "const_pointer": //const object* Array $parameters_string .= "(" . $declaration[$parameter_types][$parameter_index] . ") object_pointer{$declaration_index}_{$parameter_index}" . ", "; if (!$declaration["static"] && $class_name && !$is_constructor) { $after_return_called_overload .= tabs(4) . "references->AddReference({$variable_name}, \"{$class_name}::{$method_name} at call with {$required_parameters} argument(s)\");\n"; } else { if ($is_constructor) { $after_constructor_called .= tabs(4) . "(({$class_name}_php*) native_object)->references.AddReference({$variable_name}, \"{$class_name}::{$method_name} at call with {$required_parameters} argument(s)\");\n"; } } break; case "reference": //object& //object& case "const_reference": //const object& $parameters_string .= "*(" . $argument_parameter_type . "*) object_pointer{$declaration_index}_{$parameter_index}" . ", "; if (!$declaration["static"] && $class_name && !$is_constructor) { $after_return_called_overload .= tabs(4) . "references->AddReference({$variable_name}, \"{$class_name}::{$method_name} at call with {$required_parameters} argument(s)\");\n"; } else { if ($is_constructor) { $after_constructor_called .= tabs(4) . "(({$class_name}_php*) native_object)->references.AddReference({$variable_name}, \"{$class_name}::{$method_name} at call with {$required_parameters} argument(s)\");\n"; } } break; case "none": //char //char case "const_none": //const object $parameters_string .= "*(" . $argument_parameter_type . "*) object_pointer{$declaration_index}_{$parameter_index}" . ", "; break; } break; } } $parameters_string = trim($parameters_string, ", "); if (!$is_constructor) { $parameter_is_array = $declaration["parameters_is_array"][$parameter_index]; $return_modifier = ""; $standard_return_type = parameter_type($declaration[$function_return_types], $parameter_is_array, $method_name, $class_name, $return_modifier); $return_type = str_replace(array("const ", "*", "&"), "", $declaration[$function_return_types]); $class_name_ex = $class_name; if (isset($declaration["override_class"])) { $class_name_ex = $declaration["override_class"]; } switch ($standard_return_type) { case "bool": $return_called_overload .= tabs(4) . "#ifdef USE_WXPHP_DEBUG\n"; if ($declaration["static"]) { $return_called_overload .= tabs(4) . "php_printf(\"Static \");\n"; } $return_called_overload .= tabs(4) . "php_printf(\"Executing RETURN_BOOL({$class_name_ex}::{$method_name}({$parameters_string}))\\n\\n\");\n"; $return_called_overload .= tabs(4) . "#endif\n\n"; if ($class_name == null) { $return_called_overload .= function_return_call($method_name, $parameters_string, $required_parameters, $standard_return_type, $declaration[$function_return_types]); } elseif (!$declaration["static"]) { $return_called_overload .= class_method_return_call($class_name_ex, $method_name, $parameters_string, $required_parameters, $standard_return_type, $declaration[$function_return_types]); } else { switch ($return_modifier) { case "pointer": case "const_pointer": $return_called_overload .= tabs(4) . "ZVAL_BOOL(return_value, *({$class_name_ex}::{$method_name}({$parameters_string})));\n"; break; default: $return_called_overload .= tabs(4) . "ZVAL_BOOL(return_value, {$class_name_ex}::{$method_name}({$parameters_string}));\n"; break; } } break; case "integer": case "class_enum": case "global_enum": $return_called_overload .= tabs(4) . "#ifdef USE_WXPHP_DEBUG\n"; if ($declaration["static"]) { $return_called_overload .= tabs(4) . "php_printf(\"Static \");\n"; } $return_called_overload .= tabs(4) . "php_printf(\"Executing RETURN_LONG({$class_name_ex}::{$method_name}({$parameters_string}))\\n\\n\");\n"; $return_called_overload .= tabs(4) . "#endif\n\n"; if ($class_name == null) { $return_called_overload .= function_return_call($method_name, $parameters_string, $required_parameters, $standard_return_type, $declaration[$function_return_types]); } elseif (!$declaration["static"]) { $return_called_overload .= class_method_return_call($class_name_ex, $method_name, $parameters_string, $required_parameters, $standard_return_type, $declaration[$function_return_types]); } else { switch ($return_modifier) { case "pointer": case "const_pointer": $return_called_overload .= tabs(4) . "ZVAL_LONG(return_value, *({$class_name_ex}::{$method_name}({$parameters_string})));\n"; break; default: $return_called_overload .= tabs(4) . "ZVAL_LONG(return_value, {$class_name_ex}::{$method_name}({$parameters_string}));\n"; break; } } break; case "float": $return_called_overload .= tabs(4) . "#ifdef USE_WXPHP_DEBUG\n"; if ($declaration["static"]) { $return_called_overload .= tabs(4) . "php_printf(\"Static \");\n"; } $return_called_overload .= tabs(4) . "php_printf(\"Executing RETURN_LONG({$class_name_ex}::{$method_name}({$parameters_string}))\\n\\n\");\n"; $return_called_overload .= tabs(4) . "#endif\n\n"; if ($class_name == null) { $return_called_overload .= function_return_call($method_name, $parameters_string, $required_parameters, $standard_return_type, $declaration[$function_return_types]); } elseif (!$declaration["static"]) { $return_called_overload .= class_method_return_call($class_name_ex, $method_name, $parameters_string, $required_parameters, $standard_return_type, $declaration[$function_return_types]); } else { switch ($return_modifier) { case "pointer": case "const_pointer": $return_called_overload .= tabs(4) . "ZVAL_DOUBLE(return_value, *({$class_name_ex}::{$method_name}({$parameters_string})));\n"; break; default: $return_called_overload .= tabs(4) . "ZVAL_DOUBLE(return_value, {$class_name_ex}::{$method_name}({$parameters_string}));\n"; break; } } break; case "characters": $return_called_overload .= tabs(4) . "#ifdef USE_WXPHP_DEBUG\n"; if ($declaration["static"]) { $return_called_overload .= tabs(4) . "php_printf(\"Static \");\n"; } $return_called_overload .= tabs(4) . "php_printf(\"Executing RETURN_STRING({$class_name_ex}::{$method_name}({$parameters_string}).fn_str(), 1)\\n\\n\");\n"; $return_called_overload .= tabs(4) . "#endif\n\n"; $return_called_overload .= tabs(4) . $return_type . "* value_to_return{$required_parameters};\n"; if ($class_name == null) { $return_called_overload .= function_return_call($method_name, $parameters_string, $required_parameters, $standard_return_type, $declaration[$function_return_types]); } elseif (!$declaration["static"]) { $return_called_overload .= class_method_return_call($class_name_ex, $method_name, $parameters_string, $required_parameters, $standard_return_type, $declaration[$function_return_types]); } else { $return_called_overload .= tabs(4) . "value_to_return{$required_parameters} = {$class_name_ex}::{$method_name}({$parameters_string});\n"; } $return_called_overload .= tabs(4) . "ZVAL_STRING(return_value, value_to_return{$required_parameters}, 1);\n"; break; case "void": $return_called_overload .= tabs(4) . "#ifdef USE_WXPHP_DEBUG\n"; if ($declaration["static"]) { $return_called_overload .= tabs(4) . "php_printf(\"Static \");\n"; } $return_called_overload .= tabs(4) . "php_printf(\"Executing {$class_name_ex}::{$method_name}({$parameters_string})\\n\\n\");\n"; $return_called_overload .= tabs(4) . "#endif\n\n"; if ($class_name == null) { $return_called_overload .= function_return_call($method_name, $parameters_string, $required_parameters, $standard_return_type, $declaration[$function_return_types]); } elseif (!$declaration["static"]) { $return_called_overload .= class_method_return_call($class_name_ex, $method_name, $parameters_string, $required_parameters, $standard_return_type, $declaration[$function_return_types]); } else { $return_called_overload .= tabs(4) . "{$class_name_ex}::{$method_name}({$parameters_string});\n"; } break; case "date": $return_called_overload .= tabs(4) . "#ifdef USE_WXPHP_DEBUG\n"; if ($declaration["static"]) { $return_called_overload .= tabs(4) . "php_printf(\"Static \");\n"; } $return_called_overload .= tabs(4) . "php_printf(\"Executing {$class_name_ex}::{$method_name}({$parameters_string}) to return timestamp\\n\\n\");\n"; $return_called_overload .= tabs(4) . "#endif\n\n"; $return_type = "time_t"; $return_called_overload .= tabs(4) . $return_type . " value_to_return{$required_parameters};\n"; if ($class_name == null) { $return_called_overload .= function_return_call($method_name, $parameters_string, $required_parameters, $standard_return_type, $declaration[$function_return_types]); } elseif (!$declaration["static"]) { $return_called_overload .= class_method_return_call($class_name_ex, $method_name, $parameters_string, $required_parameters, $standard_return_type, $declaration[$function_return_types]); } else { $return_called_overload .= tabs(4) . "value_to_return{$required_parameters} = {$class_name_ex}::{$method_name}({$parameters_string}).GetTicks();\n"; } $return_called_overload .= tabs(4) . "ZVAL_LONG(return_value, value_to_return{$required_parameters});\n"; break; case "string": $return_called_overload .= tabs(4) . "#ifdef USE_WXPHP_DEBUG\n"; if ($declaration["static"]) { $return_called_overload .= tabs(4) . "php_printf(\"Static \");\n"; } $return_called_overload .= tabs(4) . "php_printf(\"Executing RETURN_STRING({$class_name_ex}::{$method_name}({$parameters_string}).fn_str(), 1)\\n\\n\");\n"; $return_called_overload .= tabs(4) . "#endif\n\n"; $return_called_overload .= tabs(4) . $return_type . " value_to_return{$required_parameters};\n"; if ($class_name == null) { $return_called_overload .= function_return_call($method_name, $parameters_string, $required_parameters, $standard_return_type, $declaration[$function_return_types]); } elseif (!$declaration["static"]) { $return_called_overload .= class_method_return_call($class_name_ex, $method_name, $parameters_string, $required_parameters, $standard_return_type, $declaration[$function_return_types]); } else { $return_called_overload .= tabs(4) . "value_to_return{$required_parameters} = {$class_name_ex}::{$method_name}({$parameters_string});\n"; } $return_called_overload .= tabs(4) . "char* temp_string{$required_parameters};\n"; $return_called_overload .= tabs(4) . "temp_string{$required_parameters} = (char*)malloc(sizeof(wxChar)*(value_to_return{$required_parameters}.size()+1));\n"; $return_called_overload .= tabs(4) . "strcpy (temp_string{$required_parameters}, (const char *) value_to_return{$required_parameters}.char_str() );\n"; $return_called_overload .= tabs(4) . "ZVAL_STRING(return_value, temp_string{$required_parameters}, 1);\n"; $return_called_overload .= tabs(4) . "free(temp_string{$required_parameters});\n"; break; case "strings_array": $return_called_overload .= tabs(4) . "#ifdef USE_WXPHP_DEBUG\n"; if ($declaration["static"]) { $return_called_overload .= tabs(4) . "php_printf(\"Static \");\n"; } $return_called_overload .= tabs(4) . "php_printf(\"Executing {$class_name_ex}::{$method_name}({$parameters_string}) to return strings array\\n\\n\");\n"; $return_called_overload .= tabs(4) . "#endif\n\n"; $return_type = str_replace(array("const", " ", "&"), "", $declaration[$function_return_types]); $return_called_overload .= tabs(4) . $return_type . " value_to_return{$required_parameters};\n"; if ($class_name == null) { $return_called_overload .= function_return_call($method_name, $parameters_string, $required_parameters, $standard_return_type, $declaration[$function_return_types]); } elseif (!$declaration["static"]) { $return_called_overload .= class_method_return_call($class_name_ex, $method_name, $parameters_string, $required_parameters, $standard_return_type, $declaration[$function_return_types]); } else { $return_called_overload .= tabs(4) . "value_to_return{$required_parameters} = {$class_name_ex}::{$method_name}({$parameters_string});\n"; } $return_called_overload .= tabs(4) . "char* temp_string{$required_parameters};\n"; $return_called_overload .= tabs(4) . "array_init(return_value);\n"; $return_called_overload .= tabs(4) . "for(size_t i=0; i<value_to_return{$required_parameters}.GetCount(); i++)\n"; $return_called_overload .= tabs(4) . "{\n"; $return_called_overload .= tabs(5) . "temp_string{$required_parameters} = (char*)malloc(sizeof(wxChar)*(value_to_return{$required_parameters}[i].size()+1));\n"; $return_called_overload .= tabs(5) . "strcpy (temp_string{$required_parameters}, (const char *) value_to_return{$required_parameters}[i].char_str() );\n"; $return_called_overload .= tabs(5) . "add_next_index_string(return_value, (char*) temp_string{$required_parameters}, 1);\n"; $return_called_overload .= tabs(5) . "free(temp_string{$required_parameters});\n"; $return_called_overload .= tabs(4) . "}\n"; break; case "object": switch ($return_modifier) { case "pointer": case "const_pointer": $return_called_overload .= tabs(4) . "#ifdef USE_WXPHP_DEBUG\n"; if ($declaration["static"]) { $return_called_overload .= tabs(4) . "php_printf(\"Static \");\n"; } $return_called_overload .= tabs(4) . "php_printf(\"Executing {$class_name_ex}::{$method_name}({$parameters_string}) to return object pointer\\n\\n\");\n"; $return_called_overload .= tabs(4) . "#endif\n\n"; $return_called_overload .= tabs(4) . $return_type . "_php* value_to_return{$required_parameters};\n"; if ($class_name == null) { $return_called_overload .= function_return_call($method_name, $parameters_string, $required_parameters, $standard_return_type, $declaration[$function_return_types]); } elseif (!$declaration["static"]) { $return_called_overload .= class_method_return_call($class_name_ex, $method_name, $parameters_string, $required_parameters, $standard_return_type, $declaration[$function_return_types]); } else { $return_called_overload .= tabs(4) . "value_to_return{$required_parameters} = ({$return_type}_php*) {$class_name_ex}::{$method_name}({$parameters_string});\n"; } $return_called_overload .= tabs(4) . "if(value_to_return{$required_parameters} == NULL){\n"; $return_called_overload .= tabs(5) . "ZVAL_NULL(return_value);\n"; $return_called_overload .= tabs(4) . "}\n"; $return_called_overload .= tabs(4) . "else if(value_to_return{$required_parameters}->references.IsUserInitialized()){\n"; $return_called_overload .= tabs(5) . "if(value_to_return{$required_parameters}->phpObj != NULL){\n"; $return_called_overload .= tabs(6) . "*return_value = *value_to_return{$required_parameters}->phpObj;\n"; $return_called_overload .= tabs(6) . "zval_add_ref(&value_to_return{$required_parameters}->phpObj);\n"; $return_called_overload .= tabs(6) . "return_is_user_initialized = true;\n"; $return_called_overload .= tabs(5) . "}\n"; $return_called_overload .= tabs(5) . "else{\n"; $return_called_overload .= tabs(6) . "zend_error(E_ERROR, \"Could not retreive original zval.\");\n"; $return_called_overload .= tabs(5) . "}\n"; $return_called_overload .= tabs(4) . "}\n"; $return_called_overload .= tabs(4) . "else{\n"; $return_called_overload .= tabs(5) . "object_init_ex(return_value, php_{$return_type}_entry);\n"; $return_called_overload .= tabs(5) . "((zo_{$return_type}*) zend_object_store_get_object(return_value TSRMLS_CC))->native_object = ({$return_type}_php*) value_to_return{$required_parameters};\n"; $return_called_overload .= tabs(4) . "}\n\n"; if (!$declaration["static"] && $class_name) { $return_called_overload .= tabs(4) . "if(Z_TYPE_P(return_value) != IS_NULL && (void*)value_to_return{$required_parameters} != (void*)native_object && return_is_user_initialized){\n"; $return_called_overload .= tabs(5) . "references->AddReference(return_value, \"{$class_name_ex}::{$method_name} at call with {$required_parameters} argument(s)\");\n"; $return_called_overload .= tabs(4) . "}\n"; } break; case "const_reference": case "reference": $return_called_overload .= tabs(4) . "#ifdef USE_WXPHP_DEBUG\n"; if ($declaration["static"]) { $return_called_overload .= tabs(4) . "php_printf(\"Static \");\n"; } $return_called_overload .= tabs(4) . "php_printf(\"Executing {$class_name_ex}::{$method_name}({$parameters_string}) to return object reference\\n\\n\");\n"; $return_called_overload .= tabs(4) . "#endif\n\n"; $return_called_overload .= tabs(4) . $return_type . "_php* value_to_return{$required_parameters};\n"; if ($class_name == null) { $return_called_overload .= function_return_call($method_name, $parameters_string, $required_parameters, $standard_return_type, $declaration[$function_return_types]); } elseif (!$declaration["static"]) { $return_called_overload .= class_method_return_call($class_name_ex, $method_name, $parameters_string, $required_parameters, $standard_return_type, $declaration[$function_return_types]); } else { $return_called_overload .= tabs(4) . "value_to_return{$required_parameters} = ({$return_type}_php*) &{$class_name_ex}::{$method_name}({$parameters_string});\n"; } $return_called_overload .= tabs(4) . "if(value_to_return{$required_parameters}->references.IsUserInitialized()){\n"; $return_called_overload .= tabs(5) . "if(value_to_return{$required_parameters}->phpObj != NULL){\n"; $return_called_overload .= tabs(6) . "*return_value = *value_to_return{$required_parameters}->phpObj;\n"; $return_called_overload .= tabs(6) . "zval_add_ref(&value_to_return{$required_parameters}->phpObj);\n"; $return_called_overload .= tabs(6) . "return_is_user_initialized = true;\n"; $return_called_overload .= tabs(5) . "}\n"; $return_called_overload .= tabs(5) . "else{\n"; $return_called_overload .= tabs(6) . "zend_error(E_ERROR, \"Could not retreive original zval.\");\n"; $return_called_overload .= tabs(5) . "}\n"; $return_called_overload .= tabs(4) . "}\n"; $return_called_overload .= tabs(4) . "else{\n"; $return_called_overload .= tabs(5) . "object_init_ex(return_value,php_{$return_type}_entry);\n"; $return_called_overload .= tabs(5) . "((zo_{$return_type}*) zend_object_store_get_object(return_value TSRMLS_CC))->native_object = ({$return_type}_php*) value_to_return{$required_parameters};\n"; $return_called_overload .= tabs(4) . "}\n\n"; if (!$declaration["static"] && $class_name) { $return_called_overload .= tabs(4) . "if((void*)value_to_return{$required_parameters} != (void*)native_object && return_is_user_initialized){ //Prevent adding references to it self\n"; $return_called_overload .= tabs(5) . "references->AddReference(return_value, \"{$class_name_ex}::{$method_name} at call with {$required_parameters} argument(s)\");\n"; $return_called_overload .= tabs(4) . "}\n"; } break; case "const_none": case "none": $return_called_overload .= tabs(4) . "#ifdef USE_WXPHP_DEBUG\n"; if ($declaration["static"]) { $return_called_overload .= tabs(4) . "php_printf(\"Static \");\n"; } $return_called_overload .= tabs(4) . "php_printf(\"Executing {$class_name_ex}::{$method_name}({$parameters_string}) to return new object\\n\\n\");\n"; $return_called_overload .= tabs(4) . "#endif\n\n"; $return_called_overload .= tabs(4) . $return_type . " value_to_return{$required_parameters};\n"; if ($class_name == null) { $return_called_overload .= function_return_call($method_name, $parameters_string, $required_parameters, $standard_return_type, $declaration[$function_return_types]); } elseif (!$declaration["static"]) { $return_called_overload .= class_method_return_call($class_name_ex, $method_name, $parameters_string, $required_parameters, $standard_return_type, $declaration[$function_return_types]); } else { $return_called_overload .= tabs(4) . "value_to_return{$required_parameters} = {$class_name_ex}::{$method_name}({$parameters_string});\n"; if (inherits_from_class("wxObject", $return_type)) { $return_called_overload .= tabs(4) . "#if !defined(__WXMSW__) && !defined(__WXMAC__)\n"; $return_called_overload .= tabs(4) . "((wxRefCounter *) value_to_return{$required_parameters}.GetRefData())->IncRef();\n"; $return_called_overload .= tabs(4) . "#endif\n"; } $return_called_overload .= tabs(4) . "void* ptr = safe_emalloc(1, sizeof({$return_type}_php), 0);\n"; $return_called_overload .= tabs(4) . "memcpy(ptr, (void*) &value_to_return{$required_parameters}, sizeof({$return_type}));\n"; $return_called_overload .= tabs(4) . "object_init_ex(return_value, php_{$return_type}_entry);\n"; $return_called_overload .= tabs(4) . "(({$return_type}_php*)ptr)->phpObj = return_value;\n"; if (class_has_properties($return_type)) { $return_called_overload .= tabs(4) . "(({$return_type}_php*)ptr)->InitProperties();\n"; } $return_called_overload .= tabs(4) . "zo_{$return_type}* zo{$required_parameters} = (zo_{$return_type}*) zend_object_store_get_object(return_value TSRMLS_CC);\n"; $return_called_overload .= tabs(4) . "zo{$required_parameters}->native_object = ({$return_type}_php*) ptr;\n"; } break; } break; } $return_called_overload .= "\n" . $after_return_called_overload . "\n"; $return_called_overload .= tabs(4) . "return;\n"; } else { $return_called_overload .= tabs(4) . "#ifdef USE_WXPHP_DEBUG\n"; $return_called_overload .= tabs(4) . "php_printf(\"Executing __construct({$parameters_string})\\n\");\n"; $return_called_overload .= tabs(4) . "#endif\n\n"; $return_called_overload .= tabs(4) . "native_object = new {$method_name}_php({$parameters_string});\n\n"; $return_called_overload .= tabs(4) . "native_object->references.Initialize();\n"; $return_called_overload .= $after_constructor_called; } $return_called_overload .= tabs(4) . "break;\n"; $return_called_overload .= tabs(3) . "}\n"; } $return_called_overload .= tabs(2) . "}\n"; $return_called_overload .= tabs(1) . "}\n"; $return_called_overload .= "\n\t"; } return $return_called_overload; }
$object_constants .= tabs(2) . "wxPHP_REGISTER_OBJECT_CONSTANT(\"wxTransparentColour\", z_wx_transparent_color, CONST_CS | CONST_PERSISTENT);\n"; continue; } //Since wxART_ global variables are defined as wxString but what they are really is a char[] if ("" . strpos($variable_name, "wxART_") . "" != "") { $classes .= "\tchar _wxchar_{$variable_name}[] = {$variable_name};\n"; $classes .= "\tREGISTER_STRING_CONSTANT(\"{$variable_name}\", _wxchar_{$variable_name}, CONST_CS | CONST_PERSISTENT);\n"; continue; } //To prevent wx/datetime.h(1810): assert "IsValid()" failed in GetTicks(): invalid wxDateTime if ($variable_name == "wxDefaultDateTime") { $classes .= "\tREGISTER_LONG_CONSTANT(\"{$variable_name}\", time(NULL), CONST_CS | CONST_PERSISTENT);\n"; continue; } $type_modifier = ""; $standard_type = parameter_type($variable_type, false, "Global Variables", null, $type_modifier, true); $plain_type = str_replace(array("const ", "&", "*"), "", $variable_type); switch ($standard_type) { case "bool": switch ($type_modifier) { case "pointer": case "const_pointer": $classes .= "\tREGISTER_LONG_CONSTANT(\"{$variable_name}\", *{$variable_name}, CONST_CS | CONST_PERSISTENT);\n"; break; case "reference": case "const_reference": case "none": case "const_none": $classes .= "\tREGISTER_LONG_CONSTANT(\"{$variable_name}\", {$variable_name}, CONST_CS | CONST_PERSISTENT);\n"; break; }
/** * Converts an argument type to an html link only if the type * is a wxwidgets class or strips const, reference and pointer * operators. * * @param $method_type The name of the type to parse * * @return html link */ function get_method_type_link($type, $type_name, $function_name, $class_name = null) { $declaration_modifier = ""; $standard_type = parameter_type($type, false, $function_name, $class_name, $declaration_modifier, true); $cleaned_type = str_replace(array("const ", "*", "&"), "", $type); $type_name = "<span class=\"parameter-name\">\${$type_name}</span>"; $method_type = ""; switch ($standard_type) { case "bool": switch ($declaration_modifier) { case "pointer": //bool* //bool* case "reference": //bool& $method_type = "bool &{$type_name}"; break; case "const_pointer": //const bool* Array $method_type = "array {$type_name}"; break; case "const_reference": //const bool& //const bool& case "none": //bool //bool case "const_none": //const bool $method_type = "bool {$type_name}"; break; } break; case "integer": switch ($declaration_modifier) { case "pointer": //integer* //integer* case "reference": //integer& $method_type = "integer &{$type_name}"; break; case "const_pointer": //const integer* Array $method_type = "array {$type_name}"; break; case "const_reference": //const integer& //const integer& case "none": //integer //integer case "const_none": //const integer $method_type = "integer {$type_name}"; break; } break; case "class_enum": switch ($declaration_modifier) { case "pointer": //integer* //integer* case "reference": //integer& $method_type = "<a href=\"class_constants.html#{$cleaned_type}\">{$cleaned_type}</a> &{$type_name}"; break; case "const_pointer": //const integer* Array $method_type = "array {$type_name}"; break; case "const_reference": //const integer& //const integer& case "none": //integer //integer case "const_none": //const integer $method_type = "<a href=\"class_constants.html#{$cleaned_type}\">{$cleaned_type}</a> {$type_name}"; break; } break; case "global_enum": switch ($declaration_modifier) { case "pointer": //integer* //integer* case "reference": //integer& $method_type = "<a href=\"enum_constants.html#{$cleaned_type}\">{$cleaned_type}</a> &{$type_name}"; break; case "const_pointer": //const integer* Array $method_type = "array {$type_name}"; break; case "const_reference": //const integer& //const integer& case "none": //integer //integer case "const_none": //const integer $method_type = "<a href=\"enum_constants.html#{$cleaned_type}\">{$cleaned_type}</a> {$type_name}"; break; } break; case "float": switch ($declaration_modifier) { case "pointer": //float* //float* case "reference": //float& $method_type = "float &{$type_name}"; break; case "const_pointer": //const float* Array $method_type = "array {$type_name}"; break; case "const_reference": //const float& //const float& case "none": //float //float case "const_none": //const float $method_type = "float {$type_name}"; break; } break; case "characters": switch ($declaration_modifier) { case "pointer": //char* //char* case "reference": //char& $method_type = "string &{$type_name}"; break; case "const_pointer": //const char* $method_type = "string {$type_name}"; break; case "const_reference": //const char& //const char& case "none": //char //char case "const_none": //const char $method_type = "string {$type_name}"; break; } break; case "void": switch ($declaration_modifier) { case "const_pointer_pointer": //const void** $method_type = "string {$type_name}"; break; case "pointer_pointer": $method_type = "string[] &{$type_name}"; break; case "const_pointer": //const void* $method_type = "string {$type_name}"; break; case "pointer": //void* $method_type = "string &{$type_name}"; break; } break; case "date": switch ($declaration_modifier) { case "pointer": //long* //long* case "reference": //long& $method_type = "timestamp &{$type_name}"; break; case "const_pointer": //const long* Array $method_type = "array {$type_name}"; break; case "const_reference": //const long& //const long& case "none": //long //long case "const_none": //const long $method_type = "timestamp {$type_name}"; break; } break; case "string": switch ($declaration_modifier) { case "pointer": //wxString* //wxString* case "reference": //wxString& $method_type = "string &{$type_name}"; break; case "const_pointer": //const wxString* Array $method_type = "array {$type_name}"; break; case "const_reference": //const wxString& //const wxString& case "none": //wxString //wxString case "const_none": //const wxString $method_type = "string {$type_name}"; break; } break; case "strings_array": switch ($declaration_modifier) { case "pointer": //wxArrayString* //wxArrayString* case "reference": //wxArrayString& $method_type = "array &{$type_name}"; break; case "const_pointer": //const wxArrayString* Array $method_type = "array {$type_name}"; break; case "const_reference": //const wxArrayString& //const wxArrayString& case "none": //wxArrayString //wxArrayString case "const_none": //const wxArrayString $method_type = "array {$type_name}"; break; } break; case "object": switch ($declaration_modifier) { case "pointer": //object* //object* case "reference": //object& $method_type = "<a href=\"{$cleaned_type}.html\">{$cleaned_type}</a> &{$type_name}"; break; case "const_pointer": //const bool* Array //const bool* Array case "const_reference": //const bool& //const bool& case "none": //bool //bool case "const_none": //const bool $method_type = "<a href=\"{$cleaned_type}.html\">{$cleaned_type}</a> {$type_name}"; break; } break; default: } return $method_type; }
/** * @author Jefferson González * * @license * This file is part of wxPHP check the LICENSE file for information. * * @description * Functions to assist on the generation of the wxWidgets functions * to php functions code * */ function classes_get_property_code($class_name) { global $defClassProperties; $code = ""; if (isset($defClassProperties[$class_name])) { $property_index = 0; foreach ($defClassProperties[$class_name] as $property_name => $property_attributes) { $type_modifier = ""; $standard_type = parameter_type($property_attributes["type"], false, "MINIT", $class_name, $type_modifier, true); $property_type = str_replace(array("const ", "&", "*"), "", $property_attributes["type"]); switch ($type_modifier) { //If constant skip case "const_pointer": case "const_pointer_pointer": case "const_reference": case "const_none": continue; default: //If not constant continue break; } if (!$property_attributes["static"]) { $code .= "else if(strcmp(\"{$property_name}\", name) == 0)\n"; $code .= tabs(1) . "{\n"; } else { //Skip static properties (we should handle them differently?) continue; } switch ($standard_type) { case "bool": switch ($type_modifier) { case "pointer": case "pointer_pointer": $code .= tabs(2) . "RETVAL_BOOL(*((bool*) *((void**) native_object->properties[{$property_index}])));\n"; break; case "reference": case "none": $code .= tabs(2) . "RETVAL_BOOL(*((bool*) native_object->properties[{$property_index}]));\n"; break; } break; case "integer": case "class_enum": case "global_enum": switch ($type_modifier) { case "pointer": case "pointer_pointer": $code .= tabs(2) . "RETVAL_LONG(*(({$property_type}*) *((void**) native_object->properties[{$property_index}])));\n"; break; case "reference": case "none": $code .= tabs(2) . "RETVAL_LONG(*(({$property_type}*) native_object->properties[{$property_index}]));\n"; break; } break; case "float": switch ($type_modifier) { case "pointer": case "pointer_pointer": $code .= tabs(2) . "RETVAL_DOUBLE(*(({$property_type}*) *((void**) native_object->properties[{$property_index}])));\n"; break; case "reference": case "none": $code .= tabs(2) . "RETVAL_DOUBLE(*(({$property_type}*) native_object->properties[{$property_index}]));\n"; break; } break; case "characters": switch ($type_modifier) { case "pointer": case "pointer_pointer": $code .= tabs(2) . "RETVAL_STRING(((char*) *((void**) native_object->properties[{$property_index}])), 1);\n"; break; case "reference": case "none": $code .= tabs(2) . "RETVAL_LONG(*((char*) native_object->properties[{$property_index}]));\n"; break; } break; case "date": switch ($type_modifier) { case "pointer": case "pointer_pointer": $code .= tabs(2) . "RETVAL_LONG(*((wxDateTime*) *((void**) native_object->properties[{$property_index}])).GetTicks());\n"; break; case "reference": case "none": $code .= tabs(2) . "RETVAL_LONG(*((wxDateTime*) native_object->properties[{$property_index}]).GetTicks());\n"; break; } break; case "string": switch ($type_modifier) { case "pointer": case "pointer_pointer": $code .= tabs(2) . "RETVAL_STRING(*((wxString*) *((void**) native_object->properties[{$property_index}])).char_str(), 1);\n"; break; case "reference": case "none": $code .= tabs(2) . "RETVAL_STRING((const char*) *((wxString*) native_object->properties[{$property_index}])->char_str(), 1);\n"; break; } break; case "object": switch ($type_modifier) { case "pointer": case "pointer_pointer": $code .= tabs(2) . "object_init_ex(return_value, php_{$property_type}_entry);\n"; $code .= tabs(2) . "((zo_{$class_name}*) zend_object_store_get_object(return_value TSRMLS_CC))->native_object = (({$property_type}_php*) *((void**) native_object->properties[{$property_index}]));\n"; $code .= tabs(2) . "return;\n"; break; case "reference": case "none": $code .= tabs(2) . "object_init_ex(return_value, php_{$property_type}_entry);\n"; $code .= tabs(2) . "((zo_{$class_name}*) zend_object_store_get_object(return_value TSRMLS_CC))->native_object = (({$property_type}_php*) native_object->properties[{$property_index}]);\n"; $code .= tabs(2) . "return;\n"; break; } break; default: //Just skip unknown types } $code .= tabs(1) . "}\n"; $code .= tabs(1); $property_index++; } } $code = rtrim($code, "\t"); return $code; }
/** * Generates the code that calls a user space virtual method and returns the data * * @param array $method_definitions Data for the method. * @param string $method_name Name of the method. * @param string $class_name Name of the method parent class. * * @return string Generated code ready to insert on the end of * the virtual method body. */ function class_virtual_method_return($method_definition, $method_name, $class_name) { //Positions on the array of $method_definition where type and parameters data is stored $function_return_types = "return_type"; $output = ""; $return_type_modifier = ""; $standard_parameter_type = parameter_type($method_definition[$function_return_types], false, $method_name, $class_name, $return_type_modifier); $return_type = str_replace(array("const ", "&", "*"), "", $method_definition[$function_return_types]); switch ($standard_parameter_type) { case "bool": $output = "return Z_BVAL_P(return_value);\n"; break; case "integer": case "class_enum": case "global_enum": $output .= "return ({$return_type}) Z_LVAL_P(return_value);\n"; break; case "float": $output .= "return Z_DVAL_P(return_value);\n"; break; case "characters": $output .= "return Z_STRVAL_P(return_value);\n"; break; case "void": switch ($return_type_modifier) { case "const_pointer": case "pointer": $output .= "return (void*) Z_STRVAL_P(return_value);\n"; break; default: $output .= "return;\n"; break; } break; case "date": $output .= "return wxDateTime(Z_LVAL_P(return_value));\n"; break; case "string": $output .= "return wxString(Z_STRVAL_P(return_value), wxConvUTF8);\n"; break; /*case "strings_array": break;*/ /*case "strings_array": break;*/ case "object": $output .= "if(Z_TYPE_P(return_value) == IS_OBJECT)\n"; $output .= tabs(1) . "{\n"; $output .= tabs(2) . "return_object = (void*) ((zo_{$return_type}*) zend_object_store_get_object(return_value TSRMLS_CC))->native_object;\n"; $output .= tabs(1) . "}\n\n"; $output .= tabs(1) . "//Threat it as a normal object on the calling function and not a php user space intiialized one\n"; $output .= tabs(1) . "((zo_{$return_type}*) zend_object_store_get_object(return_value TSRMLS_CC))->is_user_initialized = 0;\n"; $output .= tabs(1) . "{$return_type}_php* var = ({$return_type}_php*) return_object;\n"; $output .= tabs(1) . "var->references.UnInitialize();\n\n"; switch ($return_type_modifier) { case "const_pointer": case "pointer": $output .= tabs(1) . "return (" . $method_definition[$function_return_types] . ") return_object;\n"; break; case "const_reference": case "reference": case "const_none": case "none": $output .= tabs(1) . "return *(" . $return_type . "*) return_object;\n"; } break; } return $output; }
function get_argument_declaration($type, $type_name, $function_name, $class_name = null) { $declaration_modifier = ""; $standard_type = parameter_type($type, false, $function_name, $class_name, $declaration_modifier, true); $cleaned_type = str_replace(array("const ", "*", "&"), "", $type); $method_type = ""; switch ($standard_type) { case "bool": switch ($declaration_modifier) { case "pointer": //bool* //bool* case "reference": //bool& $method_type = "&\${$type_name}"; break; case "const_pointer": //const bool* Array $method_type = "array \${$type_name}"; break; case "const_reference": //const bool& //const bool& case "none": //bool //bool case "const_none": //const bool $method_type = "\${$type_name}"; break; } break; case "integer": switch ($declaration_modifier) { case "pointer": //integer* //integer* case "reference": //integer& $method_type = "&\${$type_name}"; break; case "const_pointer": //const integer* Array $method_type = "array \${$type_name}"; break; case "const_reference": //const integer& //const integer& case "none": //integer //integer case "const_none": //const integer $method_type = "\${$type_name}"; break; } break; case "class_enum": switch ($declaration_modifier) { case "pointer": //integer* //integer* case "reference": //integer& $method_type = "&\${$type_name}"; break; case "const_pointer": //const integer* Array $method_type = "array \${$type_name}"; break; case "const_reference": //const integer& //const integer& case "none": //integer //integer case "const_none": //const integer $method_type = "\${$type_name}"; break; } break; case "global_enum": switch ($declaration_modifier) { case "pointer": //integer* //integer* case "reference": //integer& $method_type = "{$cleaned_type} &\${$type_name}"; break; case "const_pointer": //const integer* Array $method_type = "array \${$type_name}"; break; case "const_reference": //const integer& //const integer& case "none": //integer //integer case "const_none": //const integer $method_type = "{$cleaned_type} \${$type_name}"; break; } break; case "float": switch ($declaration_modifier) { case "pointer": //float* //float* case "reference": //float& $method_type = "&\${$type_name}"; break; case "const_pointer": //const float* Array $method_type = "array \${$type_name}"; break; case "const_reference": //const float& //const float& case "none": //float //float case "const_none": //const float $method_type = "\${$type_name}"; break; } break; case "characters": switch ($declaration_modifier) { case "pointer": //char* //char* case "reference": //char& $method_type = "&\${$type_name}"; break; case "const_pointer": //const char* $method_type = "\${$type_name}"; break; case "const_reference": //const char& //const char& case "none": //char //char case "const_none": //const char $method_type = "\${$type_name}"; break; } break; case "void": switch ($declaration_modifier) { case "const_pointer_pointer": //const void** //const void** case "pointer_pointer": case "const_pointer": //const void* //const void* case "pointer": //void* $method_type = "\${$type_name}"; break; } break; case "date": switch ($declaration_modifier) { case "pointer": //long* //long* case "reference": //long& $method_type = "&\${$type_name}"; break; case "const_pointer": //const long* Array $method_type = "array \${$type_name}"; break; case "const_reference": //const long& //const long& case "none": //long //long case "const_none": //const long $method_type = "\${$type_name}"; break; } break; case "string": switch ($declaration_modifier) { case "pointer": //wxString* //wxString* case "reference": //wxString& $method_type = "&\${$type_name}"; break; case "const_pointer": //const wxString* Array $method_type = "array \${$type_name}"; break; case "const_reference": //const wxString& //const wxString& case "none": //wxString //wxString case "const_none": //const wxString $method_type = "\${$type_name}"; break; } break; case "strings_array": switch ($declaration_modifier) { case "pointer": //wxArrayString* //wxArrayString* case "reference": //wxArrayString& $method_type = "array &\${$type_name}"; break; case "const_pointer": //const wxArrayString* Array $method_type = "array \${$type_name}"; break; case "const_reference": //const wxArrayString& //const wxArrayString& case "none": //wxArrayString //wxArrayString case "const_none": //const wxArrayString $method_type = "array \${$type_name}"; break; } break; case "object": switch ($declaration_modifier) { case "pointer": //object* //object* case "reference": //object& $method_type = "{$cleaned_type} &\${$type_name}"; break; case "const_pointer": //const bool* Array //const bool* Array case "const_reference": //const bool& //const bool& case "none": //bool //bool case "const_none": //const bool $method_type = "{$cleaned_type} \${$type_name}"; break; } break; default: } return $method_type; }
function register_class_const_properties($class_name) { global $defClassProperties; $code = ""; if (isset($defClassProperties[$class_name])) { foreach ($defClassProperties[$class_name] as $property_name => $property_attributes) { $type_modifier = ""; $standard_type = parameter_type($property_attributes["type"], false, "MINIT", $class_name, $type_modifier, true); $property_type = str_replace(array("const ", "&", "*"), "", $property_attributes["type"]); switch ($type_modifier) { case "const_pointer": case "const_pointer_pointer": case "const_reference": case "const_none": break; default: //If not constant skip continue; } switch ($standard_type) { case "bool": switch ($type_modifier) { case "const_pointer": case "const_pointer_pointer": $code .= "\tzend_declare_class_constant_bool(php_{$class_name}_entry, \"{$property_name}\", " . strlen($property_name) . ", *{$property_name} TSRMLS_CC);\n"; break; case "const_reference": case "const_none": $code .= "\tzend_declare_class_constant_bool(php_{$class_name}_entry, \"{$property_name}\", " . strlen($property_name) . ", {$property_name} TSRMLS_CC);\n"; break; } break; case "integer": case "class_enum": case "global_enum": switch ($type_modifier) { case "const_pointer": case "const_pointer_pointer": $code .= "\tzend_declare_class_constant_long(php_{$class_name}_entry, \"{$property_name}\", " . strlen($property_name) . ", *{$property_name} TSRMLS_CC);\n"; break; case "const_reference": case "const_none": $code .= "\tzend_declare_class_constant_long(php_{$class_name}_entry, \"{$property_name}\", " . strlen($property_name) . ", {$property_name} TSRMLS_CC);\n"; break; } break; case "float": switch ($type_modifier) { case "const_pointer": case "const_pointer_pointer": $code .= "\tzend_declare_class_constant_double(php_{$class_name}_entry, \"{$property_name}\", " . strlen($property_name) . ", *{$property_name} TSRMLS_CC);\n"; break; case "const_reference": case "const_none": $code .= "\tzend_declare_class_constant_double(php_{$class_name}_entry, \"{$property_name}\", " . strlen($property_name) . ", {$property_name} TSRMLS_CC);\n"; break; } break; case "characters": switch ($type_modifier) { case "const_pointer": case "const_pointer_pointer": $code .= "\tzend_declare_class_constant_string(php_{$class_name}_entry, \"{$property_name}\", " . strlen($property_name) . ", {$property_name} TSRMLS_CC);\n"; break; case "const_reference": case "const_none": $code .= "\tzend_declare_class_constant_long(php_{$class_name}_entry, \"{$property_name}\", " . strlen($property_name) . ", {$property_name} TSRMLS_CC);\n"; break; } break; case "date": switch ($type_modifier) { case "const_pointer": case "const_pointer_pointer": $code .= "\tzend_declare_class_constant_bool(php_{$class_name}_entry, \"{$property_name}\", " . strlen($property_name) . ", {$property_name->GetTicks}() TSRMLS_CC);\n"; break; case "const_reference": case "const_none": $code .= "\tzend_declare_class_constant_bool(php_{$class_name}_entry, \"{$property_name}\", " . strlen($property_name) . ", {$property_name}.GetTicks() TSRMLS_CC);\n"; break; } break; case "string": switch ($type_modifier) { case "const_pointer": case "const_pointer_pointer": $code .= "\tzend_declare_class_constant_stringl(php_{$class_name}_entry, \"{$property_name}\", " . strlen($property_name) . ", {$property_name->char_str}(), {$property_name->size}() TSRMLS_CC);\n"; break; case "const_reference": case "const_none": $code .= "\tzend_declare_class_constant_stringl(php_{$class_name}_entry, \"{$property_name}\", " . strlen($property_name) . ", {$property_name}.char_str(), {$property_name}.size() TSRMLS_CC);\n"; break; } break; case "object": switch ($type_modifier) { case "const_pointer": case "const_pointer_pointer": $code .= "\tzval* {$property_name}_zval;\n"; $code .= "\tMAKE_STD_ZVAL({$property_name}_zval)\n"; $code .= "\tobject_init_ex({$property_name}_zval, php_{$property_type}_entry);\n"; $code .= "\t((zo_{$property_type}*) zend_object_store_get_object({$property_name}_zval TSRMLS_CC))->native_object = ({$property_type}_php*) {$property_name};\n"; $code .= "\tzend_declare_class_constant(php_{$class_name}_entry, \"{$property_name}\", " . strlen($property_name) . ", {$property_name}_zval TSRMLS_CC);\n"; break; case "const_reference": case "const_none": $code .= "\tzval* {$property_name}_zval;\n"; $code .= "\tMAKE_STD_ZVAL({$property_name}_zval)\n"; $code .= "\tobject_init_ex({$property_name}_zval, php_{$property_type}_entry);\n"; $code .= "\t((zo_{$property_type}*) zend_object_store_get_object({$property_name}_zval TSRMLS_CC))->native_object = ({$property_type}_php*) &{$property_name};\n"; $code .= "\tzend_declare_class_constant(php_{$class_name}_entry, \"{$property_name}\", " . strlen($property_name) . ", {$property_name}_zval TSRMLS_CC);\n"; break; } break; default: //Just skip unknown types } } } return $code; }