函数逻辑报告

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

Source Code:lib\ts_fsm.c Create Date:2022-07-27 08:08:51
Last Modify:2020-03-12 14:18:49 Copyright©Brick
首页 函数Tree
注解内核,赢得工具下载SCCTEnglish

函数名称:fsm_find

函数原型:static unsigned int fsm_find(struct ts_config *conf, struct ts_state *state)

返回类型:unsigned int

参数:

类型参数名称
struct ts_config *conf
struct ts_state *state
136  fsm等于ts_config_priv(conf)
137  cur等于NULL
138  block_idx等于0
139  block_len等于0, consumed等于offset
157  如果end_of_data()则转到:no_match
160  strict等于recur不等于TS_FSM_HEAD_IGNORE
162  startover :
163  match_start等于consumedblock_idx
165 tok_idx小于ntokens循环
166  cur等于tokens[tok_idx]
168  如果此条件成立可能性大(为编译器优化)(tok_idx < (ntokens - 1))则next等于tokens[tok_idx + 1]
170  否则next = NULL
174  :recur恒等于TS_FSM_SINGLE
175  如果end_of_data()则转到:no_match
178  如果非match_token(cur, data[block_idx])则TOKEN_MISMATCH()
180  退出
182  :recur恒等于TS_FSM_PERHAPS
183  如果end_of_data()或非match_token(cur, data[block_idx])则继续下一循环
186  退出
188  :recur恒等于TS_FSM_MULTI
189  如果end_of_data()则转到:no_match
192  如果非match_token(cur, data[block_idx])则TOKEN_MISMATCH()
195  block_idx自加
198  :recur恒等于TS_FSM_ANY
199  如果(next == NULL)则转到:found_match
202  如果end_of_data()则继续下一循环
206  如果非match_token(cur, data[block_idx])则TOKEN_MISMATCH()
208  block_idx自加
209  如果end_of_data()则转到:no_match
212  继续下一循环
218  :recur恒等于TS_FSM_HEAD_IGNORE
219  如果end_of_data()则继续下一循环
229  如果非match_token(cur, data[block_idx])则转到:no_match
232  block_idx自加
233  如果end_of_data()则转到:no_match
238  继续下一循环
241  block_idx自加
244  如果end_of_data()则转到:found_match
247  no_match :
248  返回:UINT_MAX
250  found_match :
251  offset等于consumedblock_idx
252  返回:match_start