Fixes wrong order for conversion
This commit is contained in:
@ -68,12 +68,17 @@ module SSCfg = Cfg.Make(SimpleStatements)
|
||||
let rec convert_c (prevcfg: SSCfg.t) (prg: Types.c_exp) : SSCfg.t =
|
||||
let open SimpleStatements in
|
||||
match prg with
|
||||
| Skip -> prevcfg |> SSCfg.addToLastNode SimpleSkip
|
||||
| Assignment (x, a) -> prevcfg |> SSCfg.addToLastNode (SimpleAssignment (x, convert_a a))
|
||||
| Skip ->
|
||||
prevcfg |> SSCfg.addToLastNode SimpleSkip
|
||||
|
||||
| Assignment (x, a) ->
|
||||
prevcfg |> SSCfg.addToLastNode (SimpleAssignment (x, convert_a a))
|
||||
|
||||
| Sequence (c1, c2) ->
|
||||
let cfg1 = convert_c prevcfg c1 in
|
||||
let cfg2 = convert_c cfg1 c2 in
|
||||
cfg2
|
||||
|
||||
| If (b, c1, c2) ->
|
||||
let convertedb = convert_b b in
|
||||
let cfg1 = convert_c SSCfg.empty c1 in
|
||||
@ -86,6 +91,7 @@ let rec convert_c (prevcfg: SSCfg.t) (prg: Types.c_exp) : SSCfg.t =
|
||||
content = mergedcfg.content |>
|
||||
NodeMap.add_to_list entrynode (SimpleGuard convertedb) |>
|
||||
NodeMap.add_to_list exitnode (SimpleSkip) }
|
||||
|
||||
| While (b, c) ->
|
||||
let convertedb = convert_b b in
|
||||
let cfg = convert_c SSCfg.empty c in
|
||||
@ -112,9 +118,11 @@ let rec convert_c (prevcfg: SSCfg.t) (prg: Types.c_exp) : SSCfg.t =
|
||||
inputOutputVar = prevcfg.inputOutputVar;
|
||||
initial = Some entrynode;
|
||||
terminal = Some exitnode;
|
||||
content = NodeMap.add_to_list guardnode (SimpleGuard (convertedb)) cfg.content |>
|
||||
content = cfg.content |>
|
||||
NodeMap.add_to_list guardnode (SimpleGuard (convertedb)) |>
|
||||
NodeMap.add_to_list exitnode (SimpleSkip)
|
||||
} |> SSCfg.concat prevcfg
|
||||
|
||||
| For (assignment, guard, increment, body) ->
|
||||
let cfgassignment = convert_c SSCfg.empty assignment in
|
||||
let convertedguard = convert_b guard in
|
||||
@ -144,7 +152,8 @@ let rec convert_c (prevcfg: SSCfg.t) (prg: Types.c_exp) : SSCfg.t =
|
||||
inputOutputVar = prevcfg.inputOutputVar;
|
||||
initial = Some guardnode;
|
||||
terminal = Some exitnode;
|
||||
content = NodeMap.add_to_list guardnode (SimpleGuard (convertedguard)) bodyincrement.content |>
|
||||
content = bodyincrement.content |>
|
||||
NodeMap.add_to_list guardnode (SimpleGuard (convertedguard)) |>
|
||||
NodeMap.add_to_list exitnode (SimpleSkip)
|
||||
} |> SSCfg.concat prevassignment
|
||||
|
||||
|
||||
Reference in New Issue
Block a user