- 实现了函数导入别名功能,解决命名冲突问题 - 添加了命名空间支持,包括嵌套命名空间解析 - 更新了函数定义实体类以支持命名空间属性 - 修改了编译器基础类中的函数解析逻辑 - 调整了扩展模板中函数注册的命名空间处理 - 优化了预处理器中的命名空间定义逻辑 - 完善了翻译器中函数包装器的命名空间支持 - 新增了函数别名查找和解析功能 - 添加了相关测试用例验证功能正确性pull/1/head
parent
ca4a34204c
commit
9118fc4e33
8 changed files with 132 additions and 41 deletions
@ -0,0 +1,38 @@ |
|||||||
|
--TEST-- |
||||||
|
string offset 001 |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
// Test positive or null string offsets |
||||||
|
|
||||||
|
function foo($x) { |
||||||
|
var_dump($x); |
||||||
|
} |
||||||
|
|
||||||
|
function main() { |
||||||
|
$str = "abc"; |
||||||
|
var_dump($str[0]); |
||||||
|
var_dump($str[1]); |
||||||
|
var_dump($str[2]); |
||||||
|
var_dump($str[3]); |
||||||
|
var_dump($str[1][0]); |
||||||
|
|
||||||
|
foo($str[0]); |
||||||
|
foo($str[1]); |
||||||
|
foo($str[2]); |
||||||
|
foo($str[3]); |
||||||
|
foo($str[1][0]); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
?> |
||||||
|
--EXPECTF-- |
||||||
|
string(1) "a" |
||||||
|
string(1) "b" |
||||||
|
string(1) "c" |
||||||
|
string(0) "" |
||||||
|
string(1) "b" |
||||||
|
string(1) "a" |
||||||
|
string(1) "b" |
||||||
|
string(1) "c" |
||||||
|
string(0) "" |
||||||
|
string(1) "b" |
||||||
@ -0,0 +1,24 @@ |
|||||||
|
--TEST-- |
||||||
|
Try finally (basic test) |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
function foo ($a) { |
||||||
|
try { |
||||||
|
throw new Exception("ex"); |
||||||
|
} finally { |
||||||
|
var_dump($a); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
function main() { |
||||||
|
foo("finally"); |
||||||
|
} |
||||||
|
?> |
||||||
|
--EXPECTF-- |
||||||
|
string(7) "finally" |
||||||
|
|
||||||
|
Fatal error: Uncaught Exception: ex %s |
||||||
|
Stack trace: |
||||||
|
#0 %stry_finally_001.php(%d): foo('finally') |
||||||
|
#1 {main} |
||||||
|
thrown in %stry_finally_001.php on line %d |
||||||
@ -0,0 +1,33 @@ |
|||||||
|
--TEST-- |
||||||
|
aliasing imported functions to resolve naming conflicts |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
|
||||||
|
namespace foo { |
||||||
|
function baz() { |
||||||
|
return 'foo.baz'; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
namespace bar { |
||||||
|
function baz() { |
||||||
|
return 'bar.baz'; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
namespace { |
||||||
|
use function foo\baz as foo_baz, |
||||||
|
bar\baz as bar_baz; |
||||||
|
|
||||||
|
function main() { |
||||||
|
var_dump(foo_baz()); |
||||||
|
var_dump(bar_baz()); |
||||||
|
echo "Done\n"; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
string(7) "foo.baz" |
||||||
|
string(7) "bar.baz" |
||||||
|
Done |
||||||
Loading…
Reference in new issue