PageRenderTime 36ms CodeModel.GetById 15ms RepoModel.GetById 1ms app.codeStats 0ms

/hphp/system/idl/newext.php

http://github.com/facebook/hiphop-php
PHP | 96 lines | 72 code | 16 blank | 8 comment | 3 complexity | 08aa6b6bd573f00b81105067d5fcb688 MD5 | raw file
Possible License(s): LGPL-2.1, BSD-2-Clause, BSD-3-Clause, MPL-2.0-no-copyleft-exception, MIT, LGPL-2.0, Apache-2.0
  1. <?php
  2. /**
  3. * Generate initial IDL file from php.net. For example,
  4. *
  5. * php newext.php imap
  6. * make imap.gendoc
  7. *
  8. * Then manually correct parameter and return types.
  9. */
  10. $name = $argv[1];
  11. require 'base.php';
  12. function get_func_info($func, $clsname = 'function') {
  13. $info = phpnet_get_function_info($func, $clsname);
  14. $arr = array(
  15. 'name' => $func,
  16. 'desc' => idx($info, 'desc'),
  17. 'flags' => array(
  18. 'ZendCompat',
  19. 'NeedsActRec',
  20. ),
  21. 'return' => array(
  22. 'type' => 'Variant',
  23. 'desc' => idx($info, 'ret'),
  24. )
  25. );
  26. $args = array();
  27. if (isset($info['params'])) {
  28. for ($i = 0; $i < count($info['params']); $i++) {
  29. $args[] = array(
  30. 'name' => $info['param_names'][$i],
  31. 'type' => 'Variant',
  32. 'desc' => $info['params'][$i],
  33. );
  34. }
  35. }
  36. $arr['args'] = $args;
  37. return $arr;
  38. }
  39. $ret = array(
  40. 'preamble' => '',
  41. 'consts' => array(),
  42. 'funcs' => array(),
  43. 'classes' => array(),
  44. );
  45. $funcs = phpnet_get_extension_functions($name);
  46. foreach ($funcs as $func) {
  47. print "Importing $func\n";
  48. $ret['funcs'][] = get_func_info($func);
  49. }
  50. $consts = phpnet_get_extension_constants($name);
  51. foreach ($consts as $const) {
  52. if (!defined($const)) {
  53. var_dump("Undefined: $const. Try using Zend to run this script");
  54. continue;
  55. }
  56. $ret['consts'][] = array(
  57. 'name' => $const,
  58. 'value' => constant($const),
  59. );
  60. }
  61. $classes = phpnet_get_extension_classes($name);
  62. foreach ($classes as $class) {
  63. print "Importing $class\n";
  64. $info = phpnet_get_class_info($class);
  65. $arr = array(
  66. 'name' => $class,
  67. 'desc' => idx($info, 'desc'),
  68. 'flags' => array(
  69. 'ZendCompat',
  70. ),
  71. 'parent' => idx($info, 'parent'),
  72. 'funcs' => array()
  73. );
  74. foreach (array_unique($info['funcs']) as $func) {
  75. print "Importing $class::$func\n";
  76. $arr['funcs'][] = get_func_info($func, $class);
  77. }
  78. $ret['classes'][] = $arr;
  79. }
  80. file_put_contents("$name.idl.json", json_encode($ret, JSON_PRETTY_PRINT));