#001 //
#002 void walk(Tree tp, int tlab, int flab)
#003 {
#004 //
创建
DAG
森林
.
#005 listnodes(tp, tlab, flab);
#006
#007 //
如果
DAG
森林生成
.
#008 if (forest)
#009 {
#010 Node list = forest->link;
#011 forest->link = NULL;
#012
#013 //
把多次引用的
DAG
节点
,
修改为对临时变量的引用
.
#014 if (!IR->wants_dag && errcnt == 0)
#015 {
#016 list = undag(list);
#017 }
#018
#019 //
创建代码块保存
DAG
的列表
.
#020 AppendCode(code::Gen)->u.forest = list;
#021 forest = NULL;
#022 }
#023
#024 reset();
#025 deallocate(STMT);
#026 }