【发布时间】:2015-08-30 00:45:37
【问题描述】:
我在编译期间使用 API 来重建 scala AST。
我想更改一个“应用”AST,例如
a(1)
进入“分配并返回”块
{
val newvalue = a(1)
newvalue
}
这是我在 AST 中生成新值的代码:
val newVal : Tree = gen.mkPatDef(Typed(Ident(newTermName("newvalue")), returnType), a)(new FreshNameCreator("newvalue"))(0)
val newSymbol = newVal.symbol.newValue(newTermName("newvalue"), a.pos, 0)
newVal.setSymbol(newSymbol)
newVal.setType(a.tpe)
newVal.symbol.setName(newTermName("newvalue"))
newVal.symbol.setInfo(a.tpe)
在代码中,“a”是 Apply AST
我在scala编译器阶段“packageobjects”之后进行了这个更改,AST树的转换可以完成,但之后总是卡住。我想问题在于“newvalue”的符号,因为如果我使用现有值的现有符号而不是自己创建一个新符号,它就可以工作。
谢谢。
【问题讨论】:
-
请重新编辑您的问题。
-
@luoluo 感谢您查看我的问题。你能检查一下我现在说清楚了吗?基本上,在一个scala程序的AST树中,当我发现一个函数A调用另一个函数B作为它的返回值时,我想先把B的调用赋值给一个新值,然后用这个新值作为返回值A. 你能告诉我怎么做吗?
标签: scala abstract-syntax-tree