- 添加 genArgumentDeclaration 方法统一处理参数声明格式 - 将参数声明逻辑从多个位置提取到独立方法中 - 简化可变参数和普通参数的声明处理流程 - 更新版本号从 1002 到 103 - 删除废弃的示例文件 test1.cc - 添加混合类型声明的测试用例pull/1/head
parent
436e09f6ae
commit
673f3b3dc5
5 changed files with 35 additions and 245 deletions
@ -1,238 +0,0 @@ |
|||||||
#include <phpx.h> |
|
||||||
#include <phpx_helper.h> |
|
||||||
#include <phpx_func.h> |
|
||||||
#include <php_func_decl.h> |
|
||||||
|
|
||||||
extern php::Var _GET; |
|
||||||
extern php::Var _POST; |
|
||||||
extern php::Var _COOKIE; |
|
||||||
extern php::Var _SERVER; |
|
||||||
extern php::Var _FILES; |
|
||||||
extern php::Var _SESSION; |
|
||||||
extern php::Var _REQUEST; |
|
||||||
extern php::Var GLOBALS; |
|
||||||
extern php::Var argc; |
|
||||||
extern php::Var argv; |
|
||||||
extern php::Var _literal_strings[0]; |
|
||||||
|
|
||||||
php::Bool php_write_mandelbrot_to_stream(php::Var w, php::Var h, php::Var stream, php::Var bitmap) { |
|
||||||
php::Int bit_num; |
|
||||||
php::Int byte_acc; |
|
||||||
php::Int iter; |
|
||||||
php::Float yfac; |
|
||||||
php::Float xfac; |
|
||||||
php::Str ochars; |
|
||||||
php::Str pack_format; |
|
||||||
php::Int y; |
|
||||||
php::Float Ci; |
|
||||||
php::Int x; |
|
||||||
php::Float Zr; |
|
||||||
php::Float Zi; |
|
||||||
php::Float Tr; |
|
||||||
php::Float Ti; |
|
||||||
php::Float Cr; |
|
||||||
php::Int i; |
|
||||||
php::Object tmp_var_0; |
|
||||||
php::Object e; |
|
||||||
|
|
||||||
// Stmt_If [15:16]
|
|
||||||
if (bitmap) { |
|
||||||
// Stmt_Expression [16:16]
|
|
||||||
php::call(php::fprintf, {stream, "P4\n%d %d\n", w, h}); |
|
||||||
} |
|
||||||
|
|
||||||
// Stmt_Expression [18:18]
|
|
||||||
bit_num = php::toInt(128L); |
|
||||||
// Stmt_Expression [19:19]
|
|
||||||
byte_acc = php::toInt(0L); |
|
||||||
// Stmt_Expression [20:20]
|
|
||||||
iter = php::toInt(50L); |
|
||||||
// Stmt_Expression [22:22]
|
|
||||||
yfac = php::to_float(2.0 / (h)); |
|
||||||
// Stmt_Expression [23:23]
|
|
||||||
xfac = php::to_float(2.0 / (w)); |
|
||||||
// Stmt_Expression [25:25]
|
|
||||||
ochars = " .:-;!/>)|&IH%*#"; |
|
||||||
// Stmt_Expression [26:26]
|
|
||||||
pack_format = "c*"; |
|
||||||
// Stmt_For [28:78]
|
|
||||||
y = php::toInt(0L); |
|
||||||
for (; php::to_bool((y) < (php::to_int(h))); ++y) { |
|
||||||
// Stmt_Expression [29:29]
|
|
||||||
Ci = php::to_float((((php::to_float(y)) * (yfac))) - (php::to_float(1.0))); |
|
||||||
// Stmt_For [30:68]
|
|
||||||
x = php::toInt(0L); |
|
||||||
for (; php::to_bool((x) < (php::to_int(w))); ++x) { |
|
||||||
// Stmt_Expression [31:31]
|
|
||||||
Zr = php::to_float(0.0); |
|
||||||
// Stmt_Expression [32:32]
|
|
||||||
Zi = php::to_float(0.0); |
|
||||||
// Stmt_Expression [33:33]
|
|
||||||
Tr = php::to_float(0.0); |
|
||||||
// Stmt_Expression [34:34]
|
|
||||||
Ti = php::to_float(0.0); |
|
||||||
// Stmt_Expression [35:35]
|
|
||||||
Cr = php::to_float((((php::to_float(x)) * (xfac))) - (php::to_float(1.5))); |
|
||||||
// Stmt_TryCatch [37:51]
|
|
||||||
zend_try { |
|
||||||
// Stmt_Do [38:49]
|
|
||||||
do { |
|
||||||
// Stmt_For [39:47]
|
|
||||||
i = php::toInt(0L); |
|
||||||
for (; php::to_bool((i) < (php::toInt(iter))); ++i) { |
|
||||||
// Stmt_Expression [40:40]
|
|
||||||
Zi = php::to_float((((((2.0) * (php::to_float(Zr)))) * (php::to_float(Zi)))) + |
|
||||||
(php::to_float(Ci))); |
|
||||||
// Stmt_Expression [41:41]
|
|
||||||
Zr = php::to_float((((Tr) - (php::to_float(Ti)))) + (php::to_float(Cr))); |
|
||||||
// Stmt_Expression [42:42]
|
|
||||||
Tr = php::to_float((Zr) * (php::to_float(Zr))); |
|
||||||
// Stmt_If [44:46]
|
|
||||||
if (php::to_bool((((Tr) + (php::to_float(Ti = php::to_float((Zi) * (php::to_float(Zi))))))) > |
|
||||||
(php::to_float(4.0)))) { |
|
||||||
// Stmt_Expression [45:45]
|
|
||||||
php::throwException(php::newObject("Exception", "break 2")); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
// Stmt_Expression [48:48]
|
|
||||||
byte_acc += php::toInt(bit_num); |
|
||||||
} while (false); |
|
||||||
} |
|
||||||
zend_catch { |
|
||||||
tmp_var_0 = php::catchException(); |
|
||||||
e = tmp_var_0; |
|
||||||
if (e && php::instanceOf(e, "Exception")) { |
|
||||||
tmp_var_0.unset(); |
|
||||||
} |
|
||||||
} |
|
||||||
zend_end_try(); |
|
||||||
if (tmp_var_0) { |
|
||||||
php::throwException(tmp_var_0); |
|
||||||
} |
|
||||||
// Stmt_If [53:67]
|
|
||||||
if (bitmap) { |
|
||||||
// Stmt_If [54:60]
|
|
||||||
if (php::same(bit_num, 1L)) { |
|
||||||
// Stmt_Expression [55:55]
|
|
||||||
php::call(php::fwrite, {stream, php::call(php::pack, {pack_format, byte_acc})}); |
|
||||||
// Stmt_Expression [56:56]
|
|
||||||
bit_num = php::toInt(128L); |
|
||||||
// Stmt_Expression [57:57]
|
|
||||||
byte_acc = php::toInt(0L); |
|
||||||
} else { |
|
||||||
// Stmt_Expression [59:59]
|
|
||||||
bit_num >>= 1L; |
|
||||||
} |
|
||||||
|
|
||||||
} else { |
|
||||||
// Stmt_If [62:66]
|
|
||||||
if (php::equals(i, iter)) { |
|
||||||
// Stmt_Expression [63:63]
|
|
||||||
php::call(php::fwrite, {stream, ochars.offsetGet(0L)}); |
|
||||||
} else { |
|
||||||
// Stmt_Expression [65:65]
|
|
||||||
php::call(php::fwrite, |
|
||||||
{stream, ochars.offsetGet((((i) + (php::toInt(1L)))) & (php::toInt(15L)))}); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
// Stmt_If [69:77]
|
|
||||||
if (bitmap) { |
|
||||||
// Stmt_If [70:74]
|
|
||||||
if (!(php::same(bit_num, 128L))) { |
|
||||||
// Stmt_Expression [71:71]
|
|
||||||
php::call(php::fwrite, {stream, php::call(php::pack, {pack_format, byte_acc})}); |
|
||||||
// Stmt_Expression [72:72]
|
|
||||||
bit_num = php::toInt(128L); |
|
||||||
// Stmt_Expression [73:73]
|
|
||||||
byte_acc = php::toInt(0L); |
|
||||||
} |
|
||||||
|
|
||||||
} else { |
|
||||||
// Stmt_Expression [76:76]
|
|
||||||
php::call(php::fwrite, {stream, "\n"}); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
// Stmt_Return [79:79]
|
|
||||||
return php::to_bool(true); |
|
||||||
} |
|
||||||
|
|
||||||
php::Bool php_treffynnon_mandelbrot_to_file(php::Var filename, php::Var w, php::Var h, php::Var binary_output) { |
|
||||||
php::Str file_open_type; |
|
||||||
php::Var stream; |
|
||||||
|
|
||||||
// Stmt_Expression [84:84]
|
|
||||||
file_open_type = "w"; |
|
||||||
// Stmt_If [85:86]
|
|
||||||
if (binary_output) { |
|
||||||
// Stmt_Expression [86:86]
|
|
||||||
file_open_type = "wb"; |
|
||||||
} |
|
||||||
|
|
||||||
// Stmt_Expression [88:88]
|
|
||||||
stream = php::call(php::fopen, {php::to_string(filename), file_open_type}); |
|
||||||
// Stmt_If [89:90]
|
|
||||||
if (php::same(false, stream)) { |
|
||||||
// Stmt_Return [90:90]
|
|
||||||
return php::to_bool(false); |
|
||||||
} |
|
||||||
|
|
||||||
// Stmt_Expression [92:92]
|
|
||||||
php_write_mandelbrot_to_stream(php::to_int(w), php::to_int(h), stream, php::to_bool(binary_output)); |
|
||||||
// Stmt_Expression [93:93]
|
|
||||||
php::call(php::fclose, {stream}); |
|
||||||
// Stmt_Return [94:94]
|
|
||||||
return php::to_bool(true); |
|
||||||
} |
|
||||||
|
|
||||||
php::Str php_treffynnon_mandelbrot_to_mem(php::Var w, php::Var h, php::Var binary_output) { |
|
||||||
php::Str file_open_type; |
|
||||||
php::Var stream; |
|
||||||
php::Var ret; |
|
||||||
|
|
||||||
// Stmt_Expression [99:99]
|
|
||||||
file_open_type = "w+"; |
|
||||||
// Stmt_If [100:101]
|
|
||||||
if (binary_output) { |
|
||||||
// Stmt_Expression [101:101]
|
|
||||||
file_open_type = "w+b"; |
|
||||||
} |
|
||||||
|
|
||||||
// Stmt_Expression [103:103]
|
|
||||||
stream = php::call(php::fopen, {"php://memory", file_open_type}); |
|
||||||
// Stmt_If [104:105]
|
|
||||||
if (php::same(false, stream)) { |
|
||||||
// Stmt_Return [105:105]
|
|
||||||
return ""; |
|
||||||
} |
|
||||||
|
|
||||||
// Stmt_Expression [107:107]
|
|
||||||
php_write_mandelbrot_to_stream(php::to_int(w), php::to_int(h), stream, php::to_bool(binary_output)); |
|
||||||
// Stmt_Expression [108:108]
|
|
||||||
php::call(php::rewind, {stream}); |
|
||||||
// Stmt_Expression [109:109]
|
|
||||||
ret = php::call(php::stream_get_contents, {stream}); |
|
||||||
// Stmt_Expression [110:110]
|
|
||||||
php::call(php::fclose, {stream}); |
|
||||||
// Stmt_Return [111:111]
|
|
||||||
return ret; |
|
||||||
} |
|
||||||
|
|
||||||
void php_main() { |
|
||||||
// Stmt_Global [116:116]
|
|
||||||
|
|
||||||
// Stmt_If [117:120]
|
|
||||||
if (php::to_bool((php::len(argv)) < (php::toInt(3L)))) { |
|
||||||
// Stmt_Echo [118:118]
|
|
||||||
php::echo("Usage: php mandelbrot.php <width> <height> [<output_file>]\n"); |
|
||||||
// Stmt_Expression [119:119]
|
|
||||||
php::exit(1L); |
|
||||||
} |
|
||||||
|
|
||||||
// Stmt_Echo [121:121]
|
|
||||||
php::echo(php_treffynnon_mandelbrot_to_mem( |
|
||||||
php::to_int(argv.offsetGet(2L)), php::to_int(argv.offsetGet(2L)), php::to_bool(false))); |
|
||||||
} |
|
||||||
@ -0,0 +1,23 @@ |
|||||||
|
--TEST-- |
||||||
|
Type Declarations |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
function foo($v1, $v2, $v3, object $v4): mixed { |
||||||
|
var_dump($v1, $v2, $v3, $v4); |
||||||
|
} |
||||||
|
|
||||||
|
function main() { |
||||||
|
foo(2026, "test", [2, 8], new stdClass()); |
||||||
|
} |
||||||
|
?> |
||||||
|
--EXPECTF-- |
||||||
|
int(2026) |
||||||
|
string(4) "test" |
||||||
|
array(2) { |
||||||
|
[0]=> |
||||||
|
int(2) |
||||||
|
[1]=> |
||||||
|
int(8) |
||||||
|
} |
||||||
|
object(stdClass)#%d (0) { |
||||||
|
} |
||||||
@ -1 +1 @@ |
|||||||
1002 |
1003 |
||||||
|
|||||||
Loading…
Reference in new issue