解析AST并根据语句和函数调用猜测方法是否异步

时间:2015-05-21 14:59:42

标签: php loops nested-loops abstract-syntax-tree recursive-datastructures

我正在尝试实现一个提供NodeVisitor(或其他类型的循环)的库,它给出了一组假定为async的函数(想想它们将在nodejs中链接),如mysql_query,fwrite ,fopen等...确实:

创建一个注册表(这是我已经完成的),它在每个函数/ classmethod中循环,并且:

  • 注册classmethod / function
  • 的命名空间,类,方法或函数
  • 注册此函数使用的所有函数/类方法
  • 注册使用此功能的所有函数/类方法。

然后(这就是我的问题)循环AST并将每个函数/类方法标记为:

  • 同步默认情况下,所有方法都标记为同步,当内部所有函数调用都是同步时会发生这种情况,如文本或数组操作(str_replace,array_shift等)。
  • 可能是异步如果处于此状态,可以手动切换为同步或异步,或者在一瞬间由代码本身切换。这涉及对未知类型的实例进行方法调用的函数。
  • 异步如果处于此状态,则无法恢复。这意味着函数/ classmethod包括从用户严格定义为async的函数/ classmethods调用,或者通过代码本身调用注册表中标记为async的函数。

我的问题是:什么是一个有效的方法来进行循环分配,如果同步,异步o可能与函数?问题是函数状态依赖于其他函数状态,甚至可能是循环依赖,所以如果我将函数更改为异步,则所有使用它的函数都应该更改为异步,但不仅仅是第一个父函数;所有的父母直到根计划。如果可能的话,我想避免while循环! :)

感谢您的帮助!

0 个答案:

没有答案