Previous: Adding a new GIMPLE statement code, Up: GIMPLE
有两个函数可以用于遍历语句和序列:分别为walk_gimple_stmt
和walk_gimple_seq
。还有第三个函数用于遍历语句中的操作数:walk_gimple_op
。
该函数用于在
GSI
中遍历当前语句,并可选的使用WI
中存放的遍历状态。如果WI
为NULL
,则在遍历中不保存状态。回调函数
CALLBACK_STMT
被调用。如果CALLBACK_STMT
返回真,则意味着回调函数已经处理了语句的所有操作数,并且无需遍历它的操作数。如果
CALLBACK_STMT
为NULL
或者返回假,则CALLBACK_OP
会在语句的每个操作数上被调用,通过walk_gimple_op
。如果walk_gimple_op
对任意操作数返回了非NULL
,则剩下的操作数将不被扫描。返回值为对
walk_gimple_op
最后调用所返回的值,或者如果没有指定CALLBACK_OP
则返回NULL_TREE
。
使用该函数来遍历语句
STMT
的操作数。每个操作数通过walk_tree
来遍历,并使用WI
中可选的状态信息。
CALLBACK_OP
在STMT
的每个操作数上被调用,通过walk_tree
。walk_tree
的其它参数必须存放在WI
中。对于每个操作数OP
,walk_tree
被调用为:walk_tree (&OP
,CALLBACK_OP
,WI
,WI
-PSET
)如果
CALLBACK_OP
对于一个操作数返回非NULL
,则剩下的操作数不再被扫描。返回值为对walk_tree
最后调用所返回的值,或者如果没有指定CALLBACK_OP
则返回NULL_TREE
。