From c98ea150bdbdda3545c6fb446036f34c1a74b750 Mon Sep 17 00:00:00 2001 From: Luca Negrini Date: Tue, 5 Dec 2023 11:55:34 +0100 Subject: [PATCH] Fixing subnodes traversal order --- .../heap/type-based-heap/report.json | 6 +- .../untyped_A.f2(A__this).json | 2 +- .../reaching-definitions/report.json | 6 +- ...ions.test3(reachingDefinitions__this).json | 2 +- .../imp-testcases/type-inference/report.json | 6 +- ...typing.test4(typing__this,_untyped_i).json | 2 +- ...typing.test5(typing__this,_untyped_i).json | 2 +- ...typing.test6(typing__this,_untyped_i).json | 2 +- .../serializableGraph/SerializableCFG.java | 5 + .../program/cfg/statement/NaryExpression.java | 17 +- .../program/cfg/statement/NaryStatement.java | 17 +- .../datastructures/graph/GraphVisitor.java | 11 + .../lisa/outputs/SerializableGraphTest.java | 228 +++++++++--------- 13 files changed, 172 insertions(+), 134 deletions(-) diff --git a/lisa/lisa-analyses/imp-testcases/heap/type-based-heap/report.json b/lisa/lisa-analyses/imp-testcases/heap/type-based-heap/report.json index 0d3cbde02..043b1edc6 100644 --- a/lisa/lisa-analyses/imp-testcases/heap/type-based-heap/report.json +++ b/lisa/lisa-analyses/imp-testcases/heap/type-based-heap/report.json @@ -3,14 +3,14 @@ "files" : [ "report.json", "untyped_A.f1(A__this).json", "untyped_A.f2(A__this).json", "untyped_A.f3(A__this).json", "untyped_A.f4(A__this).json", "untyped_A.f5(A__this).json" ], "info" : { "cfgs" : "5", - "duration" : "74ms", - "end" : "2023-09-07T11:45:43.272+02:00", + "duration" : "145ms", + "end" : "2023-12-05T11:55:15.621+01:00", "expressions" : "75", "files" : "5", "globals" : "2", "members" : "5", "programs" : "1", - "start" : "2023-09-07T11:45:43.198+02:00", + "start" : "2023-12-05T11:55:15.476+01:00", "statements" : "27", "units" : "1", "version" : "0.1b8", diff --git a/lisa/lisa-analyses/imp-testcases/heap/type-based-heap/untyped_A.f2(A__this).json b/lisa/lisa-analyses/imp-testcases/heap/type-based-heap/untyped_A.f2(A__this).json index 48307c018..31d3a02d4 100644 --- a/lisa/lisa-analyses/imp-testcases/heap/type-based-heap/untyped_A.f2(A__this).json +++ b/lisa/lisa-analyses/imp-testcases/heap/type-based-heap/untyped_A.f2(A__this).json @@ -1 +1 @@ -{"name":"untyped A::f2(A* this)","description":null,"nodes":[{"id":0,"subNodes":[1,2],"text":"o = new A(1, 2)"},{"id":1,"text":"o"},{"id":2,"subNodes":[3,4],"text":"new A(1, 2)"},{"id":3,"text":"1"},{"id":4,"text":"2"},{"id":5,"subNodes":[6,8],"text":"o::a = 1"},{"id":6,"subNodes":[7],"text":"o::a"},{"id":7,"text":"o"},{"id":8,"text":"1"},{"id":9,"subNodes":[10,12],"text":"o::b = +(o::a, 1)"},{"id":10,"subNodes":[11],"text":"o::b"},{"id":11,"text":"o"},{"id":12,"subNodes":[13,15],"text":"+(o::a, 1)"},{"id":13,"subNodes":[14],"text":"o::a"},{"id":14,"text":"o"},{"id":15,"text":"1"},{"id":16,"subNodes":[17,18],"text":"i = 0"},{"id":17,"text":"i"},{"id":18,"text":"0"},{"id":19,"subNodes":[20,21],"text":"<(i, 10)"},{"id":20,"text":"i"},{"id":21,"text":"10"},{"id":22,"subNodes":[23,24],"text":"i = +(i, 1)"},{"id":23,"text":"i"},{"id":24,"subNodes":[25,26],"text":"+(i, 1)"},{"id":25,"text":"i"},{"id":26,"text":"1"},{"id":27,"subNodes":[28,30],"text":"o::a = +(o::a, 1)"},{"id":28,"subNodes":[29],"text":"o::a"},{"id":29,"text":"o"},{"id":30,"subNodes":[31,33],"text":"+(o::a, 1)"},{"id":31,"subNodes":[32],"text":"o::a"},{"id":32,"text":"o"},{"id":33,"text":"1"},{"id":34,"text":"ret"}],"edges":[{"sourceId":0,"destId":5,"kind":"SequentialEdge"},{"sourceId":5,"destId":9,"kind":"SequentialEdge"},{"sourceId":9,"destId":16,"kind":"SequentialEdge"},{"sourceId":16,"destId":19,"kind":"SequentialEdge"},{"sourceId":19,"destId":27,"kind":"TrueEdge"},{"sourceId":19,"destId":34,"kind":"FalseEdge"},{"sourceId":22,"destId":19,"kind":"SequentialEdge"},{"sourceId":27,"destId":22,"kind":"SequentialEdge"}],"descriptions":[{"nodeId":0,"description":{"expressions":["o"],"state":{"heap":["A"],"type":{"heap[w]:A":["A"],"o":["A*"]},"value":"#TOP#"}}},{"nodeId":1,"description":{"expressions":["o"],"state":{"heap":["A"],"type":{"heap[w]:A":["A"]},"value":"#TOP#"}}},{"nodeId":2,"description":{"expressions":["ref$new A"],"state":{"heap":["A"],"type":{"heap[w]:A":["A"]},"value":"#TOP#"}}},{"nodeId":3,"description":{"expressions":["1"],"state":{"heap":[],"type":{"this":["A*"]},"value":"#TOP#"}}},{"nodeId":4,"description":{"expressions":["2"],"state":{"heap":[],"type":{"this":["A*"]},"value":"#TOP#"}}},{"nodeId":5,"description":{"expressions":["heap[w]:A"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, 1]"}}}},{"nodeId":6,"description":{"expressions":["*(o)->a"],"state":{"heap":["A"],"type":{"heap[w]:A":["A"],"o":["A*"]},"value":"#TOP#"}}},{"nodeId":7,"description":{"expressions":["o"],"state":{"heap":["A"],"type":{"heap[w]:A":["A"],"o":["A*"]},"value":"#TOP#"}}},{"nodeId":8,"description":{"expressions":["1"],"state":{"heap":["A"],"type":{"heap[w]:A":["A"],"o":["A*"]},"value":"#TOP#"}}},{"nodeId":9,"description":{"expressions":["heap[w]:A"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, 2]"}}}},{"nodeId":10,"description":{"expressions":["*(o)->b"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, 1]"}}}},{"nodeId":11,"description":{"expressions":["o"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, 1]"}}}},{"nodeId":12,"description":{"expressions":["*(o)->a + 1"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, 1]"}}}},{"nodeId":13,"description":{"expressions":["*(o)->a"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, 1]"}}}},{"nodeId":14,"description":{"expressions":["o"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, 1]"}}}},{"nodeId":15,"description":{"expressions":["1"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, 1]"}}}},{"nodeId":16,"description":{"expressions":["i"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"i":["int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, 2]","i":"[0, 0]"}}}},{"nodeId":17,"description":{"expressions":["i"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, 2]"}}}},{"nodeId":18,"description":{"expressions":["0"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, 2]"}}}},{"nodeId":19,"description":{"expressions":["i < 10"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"i":["int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, +Inf]","i":"[0, +Inf]"}}}},{"nodeId":20,"description":{"expressions":["i"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"i":["int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, +Inf]","i":"[0, 10]"}}}},{"nodeId":21,"description":{"expressions":["10"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"i":["int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, +Inf]","i":"[0, 10]"}}}},{"nodeId":22,"description":{"expressions":["i"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"i":["int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, +Inf]","i":"[1, 10]"}}}},{"nodeId":23,"description":{"expressions":["i"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"i":["int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, +Inf]","i":"[0, 9]"}}}},{"nodeId":24,"description":{"expressions":["i + 1"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"i":["int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, +Inf]","i":"[0, 9]"}}}},{"nodeId":25,"description":{"expressions":["i"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"i":["int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, +Inf]","i":"[0, 9]"}}}},{"nodeId":26,"description":{"expressions":["1"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"i":["int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, +Inf]","i":"[0, 9]"}}}},{"nodeId":27,"description":{"expressions":["heap[w]:A"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"i":["int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, +Inf]","i":"[0, 9]"}}}},{"nodeId":28,"description":{"expressions":["*(o)->a"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"i":["int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, +Inf]","i":"[0, 9]"}}}},{"nodeId":29,"description":{"expressions":["o"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"i":["int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, +Inf]","i":"[0, 9]"}}}},{"nodeId":30,"description":{"expressions":["*(o)->a + 1"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"i":["int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, +Inf]","i":"[0, 9]"}}}},{"nodeId":31,"description":{"expressions":["*(o)->a"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"i":["int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, +Inf]","i":"[0, 9]"}}}},{"nodeId":32,"description":{"expressions":["o"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"i":["int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, +Inf]","i":"[0, 9]"}}}},{"nodeId":33,"description":{"expressions":["1"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"i":["int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, +Inf]","i":"[0, 9]"}}}},{"nodeId":34,"description":{"expressions":["skip"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"i":["int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, +Inf]","i":"[10, +Inf]"}}}}]} \ No newline at end of file +{"name":"untyped A::f2(A* this)","description":null,"nodes":[{"id":0,"subNodes":[1,2],"text":"o = new A(1, 2)"},{"id":1,"text":"o"},{"id":2,"subNodes":[3,4],"text":"new A(1, 2)"},{"id":3,"text":"1"},{"id":4,"text":"2"},{"id":5,"subNodes":[6,8],"text":"o::a = 1"},{"id":6,"subNodes":[7],"text":"o::a"},{"id":7,"text":"o"},{"id":8,"text":"1"},{"id":9,"subNodes":[10,12],"text":"o::b = +(o::a, 1)"},{"id":10,"subNodes":[11],"text":"o::b"},{"id":11,"text":"o"},{"id":12,"subNodes":[13,15],"text":"+(o::a, 1)"},{"id":13,"subNodes":[14],"text":"o::a"},{"id":14,"text":"o"},{"id":15,"text":"1"},{"id":16,"subNodes":[17,18],"text":"i = 0"},{"id":17,"text":"i"},{"id":18,"text":"0"},{"id":19,"subNodes":[20,21],"text":"<(i, 10)"},{"id":20,"text":"i"},{"id":21,"text":"10"},{"id":22,"subNodes":[23,25],"text":"o::a = +(o::a, 1)"},{"id":23,"subNodes":[24],"text":"o::a"},{"id":24,"text":"o"},{"id":25,"subNodes":[26,28],"text":"+(o::a, 1)"},{"id":26,"subNodes":[27],"text":"o::a"},{"id":27,"text":"o"},{"id":28,"text":"1"},{"id":29,"subNodes":[30,31],"text":"i = +(i, 1)"},{"id":30,"text":"i"},{"id":31,"subNodes":[32,33],"text":"+(i, 1)"},{"id":32,"text":"i"},{"id":33,"text":"1"},{"id":34,"text":"ret"}],"edges":[{"sourceId":0,"destId":5,"kind":"SequentialEdge"},{"sourceId":5,"destId":9,"kind":"SequentialEdge"},{"sourceId":9,"destId":16,"kind":"SequentialEdge"},{"sourceId":16,"destId":19,"kind":"SequentialEdge"},{"sourceId":19,"destId":22,"kind":"TrueEdge"},{"sourceId":19,"destId":34,"kind":"FalseEdge"},{"sourceId":22,"destId":29,"kind":"SequentialEdge"},{"sourceId":29,"destId":19,"kind":"SequentialEdge"}],"descriptions":[{"nodeId":0,"description":{"expressions":["o"],"state":{"heap":["A"],"type":{"heap[w]:A":["A"],"o":["A*"]},"value":"#TOP#"}}},{"nodeId":1,"description":{"expressions":["o"],"state":{"heap":["A"],"type":{"heap[w]:A":["A"]},"value":"#TOP#"}}},{"nodeId":2,"description":{"expressions":["ref$new A"],"state":{"heap":["A"],"type":{"heap[w]:A":["A"]},"value":"#TOP#"}}},{"nodeId":3,"description":{"expressions":["1"],"state":{"heap":[],"type":{"this":["A*"]},"value":"#TOP#"}}},{"nodeId":4,"description":{"expressions":["2"],"state":{"heap":[],"type":{"this":["A*"]},"value":"#TOP#"}}},{"nodeId":5,"description":{"expressions":["heap[w]:A"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, 1]"}}}},{"nodeId":6,"description":{"expressions":["*(o)->a"],"state":{"heap":["A"],"type":{"heap[w]:A":["A"],"o":["A*"]},"value":"#TOP#"}}},{"nodeId":7,"description":{"expressions":["o"],"state":{"heap":["A"],"type":{"heap[w]:A":["A"],"o":["A*"]},"value":"#TOP#"}}},{"nodeId":8,"description":{"expressions":["1"],"state":{"heap":["A"],"type":{"heap[w]:A":["A"],"o":["A*"]},"value":"#TOP#"}}},{"nodeId":9,"description":{"expressions":["heap[w]:A"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, 2]"}}}},{"nodeId":10,"description":{"expressions":["*(o)->b"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, 1]"}}}},{"nodeId":11,"description":{"expressions":["o"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, 1]"}}}},{"nodeId":12,"description":{"expressions":["*(o)->a + 1"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, 1]"}}}},{"nodeId":13,"description":{"expressions":["*(o)->a"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, 1]"}}}},{"nodeId":14,"description":{"expressions":["o"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, 1]"}}}},{"nodeId":15,"description":{"expressions":["1"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, 1]"}}}},{"nodeId":16,"description":{"expressions":["i"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"i":["int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, 2]","i":"[0, 0]"}}}},{"nodeId":17,"description":{"expressions":["i"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, 2]"}}}},{"nodeId":18,"description":{"expressions":["0"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, 2]"}}}},{"nodeId":19,"description":{"expressions":["i < 10"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"i":["int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, +Inf]","i":"[0, +Inf]"}}}},{"nodeId":20,"description":{"expressions":["i"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"i":["int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, +Inf]","i":"[0, 10]"}}}},{"nodeId":21,"description":{"expressions":["10"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"i":["int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, +Inf]","i":"[0, 10]"}}}},{"nodeId":22,"description":{"expressions":["heap[w]:A"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"i":["int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, +Inf]","i":"[0, 9]"}}}},{"nodeId":23,"description":{"expressions":["*(o)->a"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"i":["int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, +Inf]","i":"[0, 9]"}}}},{"nodeId":24,"description":{"expressions":["o"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"i":["int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, +Inf]","i":"[0, 9]"}}}},{"nodeId":25,"description":{"expressions":["*(o)->a + 1"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"i":["int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, +Inf]","i":"[0, 9]"}}}},{"nodeId":26,"description":{"expressions":["*(o)->a"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"i":["int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, +Inf]","i":"[0, 9]"}}}},{"nodeId":27,"description":{"expressions":["o"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"i":["int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, +Inf]","i":"[0, 9]"}}}},{"nodeId":28,"description":{"expressions":["1"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"i":["int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, +Inf]","i":"[0, 9]"}}}},{"nodeId":29,"description":{"expressions":["i"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"i":["int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, +Inf]","i":"[1, 10]"}}}},{"nodeId":30,"description":{"expressions":["i"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"i":["int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, +Inf]","i":"[0, 9]"}}}},{"nodeId":31,"description":{"expressions":["i + 1"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"i":["int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, +Inf]","i":"[0, 9]"}}}},{"nodeId":32,"description":{"expressions":["i"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"i":["int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, +Inf]","i":"[0, 9]"}}}},{"nodeId":33,"description":{"expressions":["1"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"i":["int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, +Inf]","i":"[0, 9]"}}}},{"nodeId":34,"description":{"expressions":["skip"],"state":{"heap":["A"],"type":{"heap[w]:A":["A","int32"],"i":["int32"],"o":["A*"]},"value":{"heap[w]:A":"[1, +Inf]","i":"[10, +Inf]"}}}}]} \ No newline at end of file diff --git a/lisa/lisa-analyses/imp-testcases/reaching-definitions/report.json b/lisa/lisa-analyses/imp-testcases/reaching-definitions/report.json index 66850d597..fb0837254 100644 --- a/lisa/lisa-analyses/imp-testcases/reaching-definitions/report.json +++ b/lisa/lisa-analyses/imp-testcases/reaching-definitions/report.json @@ -3,14 +3,14 @@ "files" : [ "report.json", "untyped_reachingDefinitions.test1(reachingDefinitions__this).json", "untyped_reachingDefinitions.test2(reachingDefinitions__this).json", "untyped_reachingDefinitions.test3(reachingDefinitions__this).json" ], "info" : { "cfgs" : "3", - "duration" : "107ms", - "end" : "2023-09-07T11:45:39.702+02:00", + "duration" : "374ms", + "end" : "2023-12-05T11:52:35.370+01:00", "expressions" : "26", "files" : "3", "globals" : "0", "members" : "3", "programs" : "1", - "start" : "2023-09-07T11:45:39.595+02:00", + "start" : "2023-12-05T11:52:34.996+01:00", "statements" : "15", "units" : "1", "version" : "0.1b8", diff --git a/lisa/lisa-analyses/imp-testcases/reaching-definitions/untyped_reachingDefinitions.test3(reachingDefinitions__this).json b/lisa/lisa-analyses/imp-testcases/reaching-definitions/untyped_reachingDefinitions.test3(reachingDefinitions__this).json index d45d545d7..1abf86977 100644 --- a/lisa/lisa-analyses/imp-testcases/reaching-definitions/untyped_reachingDefinitions.test3(reachingDefinitions__this).json +++ b/lisa/lisa-analyses/imp-testcases/reaching-definitions/untyped_reachingDefinitions.test3(reachingDefinitions__this).json @@ -1 +1 @@ -{"name":"untyped reachingDefinitions::test3(reachingDefinitions* this)","description":null,"nodes":[{"id":0,"subNodes":[1,2],"text":"x = 0"},{"id":1,"text":"x"},{"id":2,"text":"0"},{"id":3,"subNodes":[4,5],"text":"i = 0"},{"id":4,"text":"i"},{"id":5,"text":"0"},{"id":6,"subNodes":[7,8],"text":"<(i, 5)"},{"id":7,"text":"i"},{"id":8,"text":"5"},{"id":9,"subNodes":[10,11],"text":"i = +(i, 1)"},{"id":10,"text":"i"},{"id":11,"subNodes":[12,13],"text":"+(i, 1)"},{"id":12,"text":"i"},{"id":13,"text":"1"},{"id":14,"subNodes":[15,16],"text":"x = \"p\""},{"id":15,"text":"x"},{"id":16,"text":"\"p\""},{"id":17,"text":"ret"}],"edges":[{"sourceId":0,"destId":3,"kind":"SequentialEdge"},{"sourceId":3,"destId":6,"kind":"SequentialEdge"},{"sourceId":6,"destId":14,"kind":"TrueEdge"},{"sourceId":6,"destId":17,"kind":"FalseEdge"},{"sourceId":9,"destId":6,"kind":"SequentialEdge"},{"sourceId":14,"destId":9,"kind":"SequentialEdge"}],"descriptions":[{"nodeId":0,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"this":["reachingDefinitions*"],"x":["int32"]},"value":[["x","x = 0"]]}}},{"nodeId":1,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"this":["reachingDefinitions*"]},"value":[]}}},{"nodeId":2,"description":{"expressions":["0"],"state":{"heap":"monolith","type":{"this":["reachingDefinitions*"]},"value":[]}}},{"nodeId":3,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":["int32"],"this":["reachingDefinitions*"],"x":["int32"]},"value":[["i","i = 0"],["x","x = 0"]]}}},{"nodeId":4,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"this":["reachingDefinitions*"],"x":["int32"]},"value":[["x","x = 0"]]}}},{"nodeId":5,"description":{"expressions":["0"],"state":{"heap":"monolith","type":{"this":["reachingDefinitions*"],"x":["int32"]},"value":[["x","x = 0"]]}}},{"nodeId":6,"description":{"expressions":["i < 5"],"state":{"heap":"monolith","type":{"i":["int32"],"this":["reachingDefinitions*"],"x":["int32","string"]},"value":[["i","i = +(i, 1)"],["i","i = 0"],["x","x = \"p\""],["x","x = 0"]]}}},{"nodeId":7,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":["int32"],"this":["reachingDefinitions*"],"x":["int32","string"]},"value":[["i","i = +(i, 1)"],["i","i = 0"],["x","x = \"p\""],["x","x = 0"]]}}},{"nodeId":8,"description":{"expressions":["5"],"state":{"heap":"monolith","type":{"i":["int32"],"this":["reachingDefinitions*"],"x":["int32","string"]},"value":[["i","i = +(i, 1)"],["i","i = 0"],["x","x = \"p\""],["x","x = 0"]]}}},{"nodeId":9,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":["int32"],"this":["reachingDefinitions*"],"x":["string"]},"value":[["i","i = +(i, 1)"],["x","x = \"p\""]]}}},{"nodeId":10,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":["int32"],"this":["reachingDefinitions*"],"x":["string"]},"value":[["i","i = +(i, 1)"],["i","i = 0"],["x","x = \"p\""]]}}},{"nodeId":11,"description":{"expressions":["i + 1"],"state":{"heap":"monolith","type":{"i":["int32"],"this":["reachingDefinitions*"],"x":["string"]},"value":[["i","i = +(i, 1)"],["i","i = 0"],["x","x = \"p\""]]}}},{"nodeId":12,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":["int32"],"this":["reachingDefinitions*"],"x":["string"]},"value":[["i","i = +(i, 1)"],["i","i = 0"],["x","x = \"p\""]]}}},{"nodeId":13,"description":{"expressions":["1"],"state":{"heap":"monolith","type":{"i":["int32"],"this":["reachingDefinitions*"],"x":["string"]},"value":[["i","i = +(i, 1)"],["i","i = 0"],["x","x = \"p\""]]}}},{"nodeId":14,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":["int32"],"this":["reachingDefinitions*"],"x":["string"]},"value":[["i","i = +(i, 1)"],["i","i = 0"],["x","x = \"p\""]]}}},{"nodeId":15,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":["int32"],"this":["reachingDefinitions*"],"x":["int32","string"]},"value":[["i","i = +(i, 1)"],["i","i = 0"],["x","x = \"p\""],["x","x = 0"]]}}},{"nodeId":16,"description":{"expressions":["\"p\""],"state":{"heap":"monolith","type":{"i":["int32"],"this":["reachingDefinitions*"],"x":["int32","string"]},"value":[["i","i = +(i, 1)"],["i","i = 0"],["x","x = \"p\""],["x","x = 0"]]}}},{"nodeId":17,"description":{"expressions":["skip"],"state":{"heap":"monolith","type":{"i":["int32"],"this":["reachingDefinitions*"],"x":["int32","string"]},"value":[["i","i = +(i, 1)"],["i","i = 0"],["x","x = \"p\""],["x","x = 0"]]}}}]} \ No newline at end of file +{"name":"untyped reachingDefinitions::test3(reachingDefinitions* this)","description":null,"nodes":[{"id":0,"subNodes":[1,2],"text":"x = 0"},{"id":1,"text":"x"},{"id":2,"text":"0"},{"id":3,"subNodes":[4,5],"text":"i = 0"},{"id":4,"text":"i"},{"id":5,"text":"0"},{"id":6,"subNodes":[7,8],"text":"<(i, 5)"},{"id":7,"text":"i"},{"id":8,"text":"5"},{"id":9,"subNodes":[10,11],"text":"x = \"p\""},{"id":10,"text":"x"},{"id":11,"text":"\"p\""},{"id":12,"subNodes":[13,14],"text":"i = +(i, 1)"},{"id":13,"text":"i"},{"id":14,"subNodes":[15,16],"text":"+(i, 1)"},{"id":15,"text":"i"},{"id":16,"text":"1"},{"id":17,"text":"ret"}],"edges":[{"sourceId":0,"destId":3,"kind":"SequentialEdge"},{"sourceId":3,"destId":6,"kind":"SequentialEdge"},{"sourceId":6,"destId":9,"kind":"TrueEdge"},{"sourceId":6,"destId":17,"kind":"FalseEdge"},{"sourceId":9,"destId":12,"kind":"SequentialEdge"},{"sourceId":12,"destId":6,"kind":"SequentialEdge"}],"descriptions":[{"nodeId":0,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"this":["reachingDefinitions*"],"x":["int32"]},"value":[["x","x = 0"]]}}},{"nodeId":1,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"this":["reachingDefinitions*"]},"value":[]}}},{"nodeId":2,"description":{"expressions":["0"],"state":{"heap":"monolith","type":{"this":["reachingDefinitions*"]},"value":[]}}},{"nodeId":3,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":["int32"],"this":["reachingDefinitions*"],"x":["int32"]},"value":[["i","i = 0"],["x","x = 0"]]}}},{"nodeId":4,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"this":["reachingDefinitions*"],"x":["int32"]},"value":[["x","x = 0"]]}}},{"nodeId":5,"description":{"expressions":["0"],"state":{"heap":"monolith","type":{"this":["reachingDefinitions*"],"x":["int32"]},"value":[["x","x = 0"]]}}},{"nodeId":6,"description":{"expressions":["i < 5"],"state":{"heap":"monolith","type":{"i":["int32"],"this":["reachingDefinitions*"],"x":["int32","string"]},"value":[["i","i = +(i, 1)"],["i","i = 0"],["x","x = \"p\""],["x","x = 0"]]}}},{"nodeId":7,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":["int32"],"this":["reachingDefinitions*"],"x":["int32","string"]},"value":[["i","i = +(i, 1)"],["i","i = 0"],["x","x = \"p\""],["x","x = 0"]]}}},{"nodeId":8,"description":{"expressions":["5"],"state":{"heap":"monolith","type":{"i":["int32"],"this":["reachingDefinitions*"],"x":["int32","string"]},"value":[["i","i = +(i, 1)"],["i","i = 0"],["x","x = \"p\""],["x","x = 0"]]}}},{"nodeId":9,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":["int32"],"this":["reachingDefinitions*"],"x":["string"]},"value":[["i","i = +(i, 1)"],["i","i = 0"],["x","x = \"p\""]]}}},{"nodeId":10,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":["int32"],"this":["reachingDefinitions*"],"x":["int32","string"]},"value":[["i","i = +(i, 1)"],["i","i = 0"],["x","x = \"p\""],["x","x = 0"]]}}},{"nodeId":11,"description":{"expressions":["\"p\""],"state":{"heap":"monolith","type":{"i":["int32"],"this":["reachingDefinitions*"],"x":["int32","string"]},"value":[["i","i = +(i, 1)"],["i","i = 0"],["x","x = \"p\""],["x","x = 0"]]}}},{"nodeId":12,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":["int32"],"this":["reachingDefinitions*"],"x":["string"]},"value":[["i","i = +(i, 1)"],["x","x = \"p\""]]}}},{"nodeId":13,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":["int32"],"this":["reachingDefinitions*"],"x":["string"]},"value":[["i","i = +(i, 1)"],["i","i = 0"],["x","x = \"p\""]]}}},{"nodeId":14,"description":{"expressions":["i + 1"],"state":{"heap":"monolith","type":{"i":["int32"],"this":["reachingDefinitions*"],"x":["string"]},"value":[["i","i = +(i, 1)"],["i","i = 0"],["x","x = \"p\""]]}}},{"nodeId":15,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":["int32"],"this":["reachingDefinitions*"],"x":["string"]},"value":[["i","i = +(i, 1)"],["i","i = 0"],["x","x = \"p\""]]}}},{"nodeId":16,"description":{"expressions":["1"],"state":{"heap":"monolith","type":{"i":["int32"],"this":["reachingDefinitions*"],"x":["string"]},"value":[["i","i = +(i, 1)"],["i","i = 0"],["x","x = \"p\""]]}}},{"nodeId":17,"description":{"expressions":["skip"],"state":{"heap":"monolith","type":{"i":["int32"],"this":["reachingDefinitions*"],"x":["int32","string"]},"value":[["i","i = +(i, 1)"],["i","i = 0"],["x","x = \"p\""],["x","x = 0"]]}}}]} \ No newline at end of file diff --git a/lisa/lisa-analyses/imp-testcases/type-inference/report.json b/lisa/lisa-analyses/imp-testcases/type-inference/report.json index ecffa1d86..d1e0c8048 100644 --- a/lisa/lisa-analyses/imp-testcases/type-inference/report.json +++ b/lisa/lisa-analyses/imp-testcases/type-inference/report.json @@ -3,14 +3,14 @@ "files" : [ "report.json", "untyped_typing.test1(typing__this).json", "untyped_typing.test2(typing__this,_untyped_i).json", "untyped_typing.test3(typing__this,_untyped_i).json", "untyped_typing.test4(typing__this,_untyped_i).json", "untyped_typing.test5(typing__this,_untyped_i).json", "untyped_typing.test6(typing__this,_untyped_i).json", "untyped_typing.test7(typing__this).json" ], "info" : { "cfgs" : "7", - "duration" : "550ms", - "end" : "2023-09-13T14:07:05.718+02:00", + "duration" : "410ms", + "end" : "2023-12-05T11:54:58.820+01:00", "expressions" : "68", "files" : "7", "globals" : "0", "members" : "7", "programs" : "1", - "start" : "2023-09-13T14:07:05.168+02:00", + "start" : "2023-12-05T11:54:58.410+01:00", "statements" : "32", "units" : "1", "version" : "0.1b8", diff --git a/lisa/lisa-analyses/imp-testcases/type-inference/untyped_typing.test4(typing__this,_untyped_i).json b/lisa/lisa-analyses/imp-testcases/type-inference/untyped_typing.test4(typing__this,_untyped_i).json index 429fd2878..6686e0e5e 100644 --- a/lisa/lisa-analyses/imp-testcases/type-inference/untyped_typing.test4(typing__this,_untyped_i).json +++ b/lisa/lisa-analyses/imp-testcases/type-inference/untyped_typing.test4(typing__this,_untyped_i).json @@ -1 +1 @@ -{"name":"untyped typing::test4(typing* this, untyped i)","description":null,"nodes":[{"id":0,"subNodes":[1,2],"text":"x = 0"},{"id":1,"text":"x"},{"id":2,"text":"0"},{"id":3,"subNodes":[4,5],"text":">(i, 5)"},{"id":4,"text":"i"},{"id":5,"text":"5"},{"id":6,"subNodes":[7,8],"text":"i = +(i, 1)"},{"id":7,"text":"i"},{"id":8,"subNodes":[9,10],"text":"+(i, 1)"},{"id":9,"text":"i"},{"id":10,"text":"1"},{"id":11,"subNodes":[12,13],"text":"x = \"s\""},{"id":12,"text":"x"},{"id":13,"text":"\"s\""},{"id":14,"subNodes":[15],"text":"return x"},{"id":15,"text":"x"}],"edges":[{"sourceId":0,"destId":3,"kind":"SequentialEdge"},{"sourceId":3,"destId":11,"kind":"TrueEdge"},{"sourceId":3,"destId":14,"kind":"FalseEdge"},{"sourceId":6,"destId":3,"kind":"SequentialEdge"},{"sourceId":11,"destId":6,"kind":"SequentialEdge"}],"descriptions":[{"nodeId":0,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32"]},"value":{"i":"[-Inf, +Inf]","x":"[0, 0]"}}}},{"nodeId":1,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"]},"value":{"i":"[-Inf, +Inf]"}}}},{"nodeId":2,"description":{"expressions":["0"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"]},"value":{"i":"[-Inf, +Inf]"}}}},{"nodeId":3,"description":{"expressions":["i > 5"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[-Inf, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":4,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[-Inf, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":5,"description":{"expressions":["5"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[-Inf, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":6,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":["float32","int32"],"this":["typing*"],"x":["string"]},"value":{"i":"[7, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":7,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":8,"description":{"expressions":["i + 1"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":9,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":10,"description":{"expressions":["1"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":11,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":12,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":13,"description":{"expressions":["\"s\""],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":14,"description":{"expressions":["ret_value@test4"],"state":{"heap":"monolith","type":{"i":"#TOP#","ret_value@test4":["int32","string"],"this":["typing*"],"x":["int32","string"]},"value":{"i":"[-Inf, 5]","ret_value@test4":"[-Inf, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":15,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[-Inf, 5]","x":"[-Inf, +Inf]"}}}}]} \ No newline at end of file +{"name":"untyped typing::test4(typing* this, untyped i)","description":null,"nodes":[{"id":0,"subNodes":[1,2],"text":"x = 0"},{"id":1,"text":"x"},{"id":2,"text":"0"},{"id":3,"subNodes":[4,5],"text":">(i, 5)"},{"id":4,"text":"i"},{"id":5,"text":"5"},{"id":6,"subNodes":[7,8],"text":"x = \"s\""},{"id":7,"text":"x"},{"id":8,"text":"\"s\""},{"id":9,"subNodes":[10,11],"text":"i = +(i, 1)"},{"id":10,"text":"i"},{"id":11,"subNodes":[12,13],"text":"+(i, 1)"},{"id":12,"text":"i"},{"id":13,"text":"1"},{"id":14,"subNodes":[15],"text":"return x"},{"id":15,"text":"x"}],"edges":[{"sourceId":0,"destId":3,"kind":"SequentialEdge"},{"sourceId":3,"destId":6,"kind":"TrueEdge"},{"sourceId":3,"destId":14,"kind":"FalseEdge"},{"sourceId":6,"destId":9,"kind":"SequentialEdge"},{"sourceId":9,"destId":3,"kind":"SequentialEdge"}],"descriptions":[{"nodeId":0,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32"]},"value":{"i":"[-Inf, +Inf]","x":"[0, 0]"}}}},{"nodeId":1,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"]},"value":{"i":"[-Inf, +Inf]"}}}},{"nodeId":2,"description":{"expressions":["0"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"]},"value":{"i":"[-Inf, +Inf]"}}}},{"nodeId":3,"description":{"expressions":["i > 5"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[-Inf, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":4,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[-Inf, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":5,"description":{"expressions":["5"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[-Inf, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":6,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":7,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":8,"description":{"expressions":["\"s\""],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":9,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":["float32","int32"],"this":["typing*"],"x":["string"]},"value":{"i":"[7, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":10,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":11,"description":{"expressions":["i + 1"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":12,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":13,"description":{"expressions":["1"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":14,"description":{"expressions":["ret_value@test4"],"state":{"heap":"monolith","type":{"i":"#TOP#","ret_value@test4":["int32","string"],"this":["typing*"],"x":["int32","string"]},"value":{"i":"[-Inf, 5]","ret_value@test4":"[-Inf, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":15,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[-Inf, 5]","x":"[-Inf, +Inf]"}}}}]} \ No newline at end of file diff --git a/lisa/lisa-analyses/imp-testcases/type-inference/untyped_typing.test5(typing__this,_untyped_i).json b/lisa/lisa-analyses/imp-testcases/type-inference/untyped_typing.test5(typing__this,_untyped_i).json index f8ddc20dc..9f5b826cd 100644 --- a/lisa/lisa-analyses/imp-testcases/type-inference/untyped_typing.test5(typing__this,_untyped_i).json +++ b/lisa/lisa-analyses/imp-testcases/type-inference/untyped_typing.test5(typing__this,_untyped_i).json @@ -1 +1 @@ -{"name":"untyped typing::test5(typing* this, untyped i)","description":null,"nodes":[{"id":0,"subNodes":[1,2],"text":"x = 0"},{"id":1,"text":"x"},{"id":2,"text":"0"},{"id":3,"subNodes":[4,5],"text":">(i, 5)"},{"id":4,"text":"i"},{"id":5,"text":"5"},{"id":6,"subNodes":[7,8],"text":"i = +(i, 1)"},{"id":7,"text":"i"},{"id":8,"subNodes":[9,10],"text":"+(i, 1)"},{"id":9,"text":"i"},{"id":10,"text":"1"},{"id":11,"subNodes":[12,15],"text":"==(%(i, 2), 0)"},{"id":12,"subNodes":[13,14],"text":"%(i, 2)"},{"id":13,"text":"i"},{"id":14,"text":"2"},{"id":15,"text":"0"},{"id":16,"subNodes":[17,18],"text":"x = \"s\""},{"id":17,"text":"x"},{"id":18,"text":"\"s\""},{"id":19,"subNodes":[20,21],"text":"x = \"p\""},{"id":20,"text":"x"},{"id":21,"text":"\"p\""},{"id":22,"subNodes":[23],"text":"return x"},{"id":23,"text":"x"}],"edges":[{"sourceId":0,"destId":3,"kind":"SequentialEdge"},{"sourceId":3,"destId":11,"kind":"TrueEdge"},{"sourceId":3,"destId":22,"kind":"FalseEdge"},{"sourceId":6,"destId":3,"kind":"SequentialEdge"},{"sourceId":11,"destId":16,"kind":"TrueEdge"},{"sourceId":11,"destId":19,"kind":"FalseEdge"},{"sourceId":16,"destId":6,"kind":"SequentialEdge"},{"sourceId":19,"destId":6,"kind":"SequentialEdge"}],"descriptions":[{"nodeId":0,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32"]},"value":{"i":"[-Inf, +Inf]","x":"[0, 0]"}}}},{"nodeId":1,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"]},"value":{"i":"[-Inf, +Inf]"}}}},{"nodeId":2,"description":{"expressions":["0"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"]},"value":{"i":"[-Inf, +Inf]"}}}},{"nodeId":3,"description":{"expressions":["i > 5"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[-Inf, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":4,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[-Inf, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":5,"description":{"expressions":["5"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[-Inf, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":6,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":["float32","int32"],"this":["typing*"],"x":["string"]},"value":{"i":"[7, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":7,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":8,"description":{"expressions":["i + 1"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":9,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":10,"description":{"expressions":["1"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":11,"description":{"expressions":["i % 2 == 0"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":12,"description":{"expressions":["i % 2"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":13,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":14,"description":{"expressions":["2"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":15,"description":{"expressions":["0"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":16,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":17,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":18,"description":{"expressions":["\"s\""],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":19,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":20,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":21,"description":{"expressions":["\"p\""],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":22,"description":{"expressions":["ret_value@test5"],"state":{"heap":"monolith","type":{"i":"#TOP#","ret_value@test5":["int32","string"],"this":["typing*"],"x":["int32","string"]},"value":{"i":"[-Inf, 5]","ret_value@test5":"[-Inf, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":23,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[-Inf, 5]","x":"[-Inf, +Inf]"}}}}]} \ No newline at end of file +{"name":"untyped typing::test5(typing* this, untyped i)","description":null,"nodes":[{"id":0,"subNodes":[1,2],"text":"x = 0"},{"id":1,"text":"x"},{"id":2,"text":"0"},{"id":3,"subNodes":[4,5],"text":">(i, 5)"},{"id":4,"text":"i"},{"id":5,"text":"5"},{"id":6,"subNodes":[7,10],"text":"==(%(i, 2), 0)"},{"id":7,"subNodes":[8,9],"text":"%(i, 2)"},{"id":8,"text":"i"},{"id":9,"text":"2"},{"id":10,"text":"0"},{"id":11,"subNodes":[12,13],"text":"x = \"s\""},{"id":12,"text":"x"},{"id":13,"text":"\"s\""},{"id":14,"subNodes":[15,16],"text":"x = \"p\""},{"id":15,"text":"x"},{"id":16,"text":"\"p\""},{"id":17,"subNodes":[18,19],"text":"i = +(i, 1)"},{"id":18,"text":"i"},{"id":19,"subNodes":[20,21],"text":"+(i, 1)"},{"id":20,"text":"i"},{"id":21,"text":"1"},{"id":22,"subNodes":[23],"text":"return x"},{"id":23,"text":"x"}],"edges":[{"sourceId":0,"destId":3,"kind":"SequentialEdge"},{"sourceId":3,"destId":6,"kind":"TrueEdge"},{"sourceId":3,"destId":22,"kind":"FalseEdge"},{"sourceId":6,"destId":11,"kind":"TrueEdge"},{"sourceId":6,"destId":14,"kind":"FalseEdge"},{"sourceId":11,"destId":17,"kind":"SequentialEdge"},{"sourceId":14,"destId":17,"kind":"SequentialEdge"},{"sourceId":17,"destId":3,"kind":"SequentialEdge"}],"descriptions":[{"nodeId":0,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32"]},"value":{"i":"[-Inf, +Inf]","x":"[0, 0]"}}}},{"nodeId":1,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"]},"value":{"i":"[-Inf, +Inf]"}}}},{"nodeId":2,"description":{"expressions":["0"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"]},"value":{"i":"[-Inf, +Inf]"}}}},{"nodeId":3,"description":{"expressions":["i > 5"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[-Inf, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":4,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[-Inf, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":5,"description":{"expressions":["5"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[-Inf, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":6,"description":{"expressions":["i % 2 == 0"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":7,"description":{"expressions":["i % 2"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":8,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":9,"description":{"expressions":["2"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":10,"description":{"expressions":["0"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":11,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":12,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":13,"description":{"expressions":["\"s\""],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":14,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":15,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":16,"description":{"expressions":["\"p\""],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":17,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":["float32","int32"],"this":["typing*"],"x":["string"]},"value":{"i":"[7, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":18,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":19,"description":{"expressions":["i + 1"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":20,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":21,"description":{"expressions":["1"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":22,"description":{"expressions":["ret_value@test5"],"state":{"heap":"monolith","type":{"i":"#TOP#","ret_value@test5":["int32","string"],"this":["typing*"],"x":["int32","string"]},"value":{"i":"[-Inf, 5]","ret_value@test5":"[-Inf, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":23,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[-Inf, 5]","x":"[-Inf, +Inf]"}}}}]} \ No newline at end of file diff --git a/lisa/lisa-analyses/imp-testcases/type-inference/untyped_typing.test6(typing__this,_untyped_i).json b/lisa/lisa-analyses/imp-testcases/type-inference/untyped_typing.test6(typing__this,_untyped_i).json index a015fcbfe..f6bd5ab10 100644 --- a/lisa/lisa-analyses/imp-testcases/type-inference/untyped_typing.test6(typing__this,_untyped_i).json +++ b/lisa/lisa-analyses/imp-testcases/type-inference/untyped_typing.test6(typing__this,_untyped_i).json @@ -1 +1 @@ -{"name":"untyped typing::test6(typing* this, untyped i)","description":null,"nodes":[{"id":0,"subNodes":[1,2],"text":"x = 0"},{"id":1,"text":"x"},{"id":2,"text":"0"},{"id":3,"subNodes":[4,7],"text":"==(%(i, 2), 0)"},{"id":4,"subNodes":[5,6],"text":"%(i, 2)"},{"id":5,"text":"i"},{"id":6,"text":"2"},{"id":7,"text":"0"},{"id":8,"subNodes":[9,10],"text":">(i, 5)"},{"id":9,"text":"i"},{"id":10,"text":"5"},{"id":11,"subNodes":[12,13],"text":"i = +(i, 1)"},{"id":12,"text":"i"},{"id":13,"subNodes":[14,15],"text":"+(i, 1)"},{"id":14,"text":"i"},{"id":15,"text":"1"},{"id":16,"subNodes":[17,18],"text":"x = \"p\""},{"id":17,"text":"x"},{"id":18,"text":"\"p\""},{"id":19,"subNodes":[20],"text":"return x"},{"id":20,"text":"x"}],"edges":[{"sourceId":0,"destId":3,"kind":"SequentialEdge"},{"sourceId":3,"destId":8,"kind":"TrueEdge"},{"sourceId":3,"destId":19,"kind":"FalseEdge"},{"sourceId":8,"destId":16,"kind":"TrueEdge"},{"sourceId":8,"destId":19,"kind":"FalseEdge"},{"sourceId":11,"destId":8,"kind":"SequentialEdge"},{"sourceId":16,"destId":11,"kind":"SequentialEdge"}],"descriptions":[{"nodeId":0,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32"]},"value":{"i":"[-Inf, +Inf]","x":"[0, 0]"}}}},{"nodeId":1,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"]},"value":{"i":"[-Inf, +Inf]"}}}},{"nodeId":2,"description":{"expressions":["0"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"]},"value":{"i":"[-Inf, +Inf]"}}}},{"nodeId":3,"description":{"expressions":["i % 2 == 0"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32"]},"value":{"i":"[-Inf, +Inf]","x":"[0, 0]"}}}},{"nodeId":4,"description":{"expressions":["i % 2"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32"]},"value":{"i":"[-Inf, +Inf]","x":"[0, 0]"}}}},{"nodeId":5,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32"]},"value":{"i":"[-Inf, +Inf]","x":"[0, 0]"}}}},{"nodeId":6,"description":{"expressions":["2"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32"]},"value":{"i":"[-Inf, +Inf]","x":"[0, 0]"}}}},{"nodeId":7,"description":{"expressions":["0"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32"]},"value":{"i":"[-Inf, +Inf]","x":"[0, 0]"}}}},{"nodeId":8,"description":{"expressions":["i > 5"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[-Inf, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":9,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[-Inf, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":10,"description":{"expressions":["5"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[-Inf, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":11,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":["float32","int32"],"this":["typing*"],"x":["string"]},"value":{"i":"[7, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":12,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":13,"description":{"expressions":["i + 1"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":14,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":15,"description":{"expressions":["1"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":16,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":17,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":18,"description":{"expressions":["\"p\""],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":19,"description":{"expressions":["ret_value@test6"],"state":{"heap":"monolith","type":{"i":"#TOP#","ret_value@test6":["int32","string"],"this":["typing*"],"x":["int32","string"]},"value":{"i":"[-Inf, +Inf]","ret_value@test6":"[-Inf, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":20,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[-Inf, +Inf]","x":"[-Inf, +Inf]"}}}}]} \ No newline at end of file +{"name":"untyped typing::test6(typing* this, untyped i)","description":null,"nodes":[{"id":0,"subNodes":[1,2],"text":"x = 0"},{"id":1,"text":"x"},{"id":2,"text":"0"},{"id":3,"subNodes":[4,7],"text":"==(%(i, 2), 0)"},{"id":4,"subNodes":[5,6],"text":"%(i, 2)"},{"id":5,"text":"i"},{"id":6,"text":"2"},{"id":7,"text":"0"},{"id":8,"subNodes":[9,10],"text":">(i, 5)"},{"id":9,"text":"i"},{"id":10,"text":"5"},{"id":11,"subNodes":[12,13],"text":"x = \"p\""},{"id":12,"text":"x"},{"id":13,"text":"\"p\""},{"id":14,"subNodes":[15,16],"text":"i = +(i, 1)"},{"id":15,"text":"i"},{"id":16,"subNodes":[17,18],"text":"+(i, 1)"},{"id":17,"text":"i"},{"id":18,"text":"1"},{"id":19,"subNodes":[20],"text":"return x"},{"id":20,"text":"x"}],"edges":[{"sourceId":0,"destId":3,"kind":"SequentialEdge"},{"sourceId":3,"destId":8,"kind":"TrueEdge"},{"sourceId":3,"destId":19,"kind":"FalseEdge"},{"sourceId":8,"destId":11,"kind":"TrueEdge"},{"sourceId":8,"destId":19,"kind":"FalseEdge"},{"sourceId":11,"destId":14,"kind":"SequentialEdge"},{"sourceId":14,"destId":8,"kind":"SequentialEdge"}],"descriptions":[{"nodeId":0,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32"]},"value":{"i":"[-Inf, +Inf]","x":"[0, 0]"}}}},{"nodeId":1,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"]},"value":{"i":"[-Inf, +Inf]"}}}},{"nodeId":2,"description":{"expressions":["0"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"]},"value":{"i":"[-Inf, +Inf]"}}}},{"nodeId":3,"description":{"expressions":["i % 2 == 0"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32"]},"value":{"i":"[-Inf, +Inf]","x":"[0, 0]"}}}},{"nodeId":4,"description":{"expressions":["i % 2"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32"]},"value":{"i":"[-Inf, +Inf]","x":"[0, 0]"}}}},{"nodeId":5,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32"]},"value":{"i":"[-Inf, +Inf]","x":"[0, 0]"}}}},{"nodeId":6,"description":{"expressions":["2"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32"]},"value":{"i":"[-Inf, +Inf]","x":"[0, 0]"}}}},{"nodeId":7,"description":{"expressions":["0"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32"]},"value":{"i":"[-Inf, +Inf]","x":"[0, 0]"}}}},{"nodeId":8,"description":{"expressions":["i > 5"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[-Inf, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":9,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[-Inf, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":10,"description":{"expressions":["5"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[-Inf, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":11,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":12,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":13,"description":{"expressions":["\"p\""],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":14,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":["float32","int32"],"this":["typing*"],"x":["string"]},"value":{"i":"[7, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":15,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":16,"description":{"expressions":["i + 1"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":17,"description":{"expressions":["i"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":18,"description":{"expressions":["1"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["string"]},"value":{"i":"[6, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":19,"description":{"expressions":["ret_value@test6"],"state":{"heap":"monolith","type":{"i":"#TOP#","ret_value@test6":["int32","string"],"this":["typing*"],"x":["int32","string"]},"value":{"i":"[-Inf, +Inf]","ret_value@test6":"[-Inf, +Inf]","x":"[-Inf, +Inf]"}}}},{"nodeId":20,"description":{"expressions":["x"],"state":{"heap":"monolith","type":{"i":"#TOP#","this":["typing*"],"x":["int32","string"]},"value":{"i":"[-Inf, +Inf]","x":"[-Inf, +Inf]"}}}}]} \ No newline at end of file diff --git a/lisa/lisa-sdk/src/main/java/it/unive/lisa/outputs/serializableGraph/SerializableCFG.java b/lisa/lisa-sdk/src/main/java/it/unive/lisa/outputs/serializableGraph/SerializableCFG.java index e2080024d..bbd89c0b6 100644 --- a/lisa/lisa-sdk/src/main/java/it/unive/lisa/outputs/serializableGraph/SerializableCFG.java +++ b/lisa/lisa-sdk/src/main/java/it/unive/lisa/outputs/serializableGraph/SerializableCFG.java @@ -119,6 +119,11 @@ private static class OffsetGenerator private int offset = 0; private Map>> result = new IdentityHashMap<>(); + @Override + public boolean visitSubNodesFirst() { + return false; + } + @Override public boolean visit( Void tool, diff --git a/lisa/lisa-sdk/src/main/java/it/unive/lisa/program/cfg/statement/NaryExpression.java b/lisa/lisa-sdk/src/main/java/it/unive/lisa/program/cfg/statement/NaryExpression.java index ee7a1ba7d..3c010d3f5 100644 --- a/lisa/lisa-sdk/src/main/java/it/unive/lisa/program/cfg/statement/NaryExpression.java +++ b/lisa/lisa-sdk/src/main/java/it/unive/lisa/program/cfg/statement/NaryExpression.java @@ -200,10 +200,21 @@ public Statement getStatementEvaluatedAfter( public final boolean accept( GraphVisitor visitor, V tool) { - for (Expression sub : subExpressions) - if (!sub.accept(visitor, tool)) + if (visitor.visitSubNodesFirst()) { + for (Expression sub : subExpressions) + if (!sub.accept(visitor, tool)) + return false; + return visitor.visit(tool, getCFG(), this); + } else { + if (!visitor.visit(tool, getCFG(), this)) return false; - return visitor.visit(tool, getCFG(), this); + + for (Expression sub : subExpressions) + if (!sub.accept(visitor, tool)) + return false; + + return true; + } } @Override diff --git a/lisa/lisa-sdk/src/main/java/it/unive/lisa/program/cfg/statement/NaryStatement.java b/lisa/lisa-sdk/src/main/java/it/unive/lisa/program/cfg/statement/NaryStatement.java index 227beebb9..f0e94fb22 100644 --- a/lisa/lisa-sdk/src/main/java/it/unive/lisa/program/cfg/statement/NaryStatement.java +++ b/lisa/lisa-sdk/src/main/java/it/unive/lisa/program/cfg/statement/NaryStatement.java @@ -119,10 +119,21 @@ public EvaluationOrder getOrder() { public final boolean accept( GraphVisitor visitor, V tool) { - for (Expression sub : subExpressions) - if (!sub.accept(visitor, tool)) + if (visitor.visitSubNodesFirst()) { + for (Expression sub : subExpressions) + if (!sub.accept(visitor, tool)) + return false; + return visitor.visit(tool, getCFG(), this); + } else { + if (!visitor.visit(tool, getCFG(), this)) return false; - return visitor.visit(tool, getCFG(), this); + + for (Expression sub : subExpressions) + if (!sub.accept(visitor, tool)) + return false; + + return true; + } } @Override diff --git a/lisa/lisa-sdk/src/main/java/it/unive/lisa/util/datastructures/graph/GraphVisitor.java b/lisa/lisa-sdk/src/main/java/it/unive/lisa/util/datastructures/graph/GraphVisitor.java index a9c5ee762..8a52f12b7 100644 --- a/lisa/lisa-sdk/src/main/java/it/unive/lisa/util/datastructures/graph/GraphVisitor.java +++ b/lisa/lisa-sdk/src/main/java/it/unive/lisa/util/datastructures/graph/GraphVisitor.java @@ -75,4 +75,15 @@ default boolean visit( E edge) { return true; } + + /** + * Yields whether or not, when visiting a compound node through + * {@link #visit(Object, Graph, Node)}, its sub-nodes should be visited + * before the node itself. + * + * @return {@code true} if that condition holds + */ + default boolean visitSubNodesFirst() { + return true; + } } diff --git a/lisa/lisa-sdk/src/test/java/it/unive/lisa/outputs/SerializableGraphTest.java b/lisa/lisa-sdk/src/test/java/it/unive/lisa/outputs/SerializableGraphTest.java index 8949cf43d..b55f1d37c 100644 --- a/lisa/lisa-sdk/src/test/java/it/unive/lisa/outputs/SerializableGraphTest.java +++ b/lisa/lisa-sdk/src/test/java/it/unive/lisa/outputs/SerializableGraphTest.java @@ -87,22 +87,22 @@ public void testSimpleIf() { SortedSet nodes = new TreeSet<>(); SortedSet edges = new TreeSet<>(); - addNode(nodes, c1, 0); - addNode(nodes, c2, 1); - addNode(nodes, condition, 2, 0, 1); - addNode(nodes, lvar, 3); - addNode(nodes, c3, 4); - addNode(nodes, a1, 5, 3, 4); - addNode(nodes, rvar, 6); - addNode(nodes, c4, 7); - addNode(nodes, a2, 8, 6, 7); - addNode(nodes, xvar, 9); - addNode(nodes, ret, 10, 9); + addNode(nodes, c1, 1); + addNode(nodes, c2, 2); + addNode(nodes, condition, 0, 1, 2); + addNode(nodes, lvar, 4); + addNode(nodes, c3, 5); + addNode(nodes, a1, 3, 4, 5); + addNode(nodes, rvar, 7); + addNode(nodes, c4, 8); + addNode(nodes, a2, 6, 7, 8); + addNode(nodes, xvar, 10); + addNode(nodes, ret, 9, 10); - addEdge(edges, e1, 2, 5); - addEdge(edges, e2, 2, 8); - addEdge(edges, e3, 5, 10); - addEdge(edges, e4, 8, 10); + addEdge(edges, e1, 0, 3); + addEdge(edges, e2, 0, 6); + addEdge(edges, e3, 3, 9); + addEdge(edges, e4, 6, 9); SerializableGraph expected = new SerializableGraph( cfg.getDescriptor().getFullSignatureWithParNames(), @@ -130,13 +130,13 @@ public void testEmptyIf() { SerializableGraph graph = SerializableCFG.fromCFG(cfg); SortedSet nodes = new TreeSet<>(); SortedSet edges = new TreeSet<>(); - addNode(nodes, c1, 0); - addNode(nodes, c2, 1); - addNode(nodes, condition, 2, 0, 1); - addNode(nodes, xvar, 3); - addNode(nodes, ret, 4, 3); - addEdge(edges, e1, 2, 4); - addEdge(edges, e2, 2, 4); + addNode(nodes, c1, 1); + addNode(nodes, c2, 2); + addNode(nodes, condition, 0, 1, 2); + addNode(nodes, xvar, 4); + addNode(nodes, ret, 3, 4); + addEdge(edges, e1, 0, 3); + addEdge(edges, e2, 0, 3); SerializableGraph expected = new SerializableGraph( cfg.getDescriptor().getFullSignatureWithParNames(), null, @@ -175,21 +175,21 @@ public void testIfWithEmptyBranch() { SerializableGraph graph = SerializableCFG.fromCFG(cfg); SortedSet nodes = new TreeSet<>(); SortedSet edges = new TreeSet<>(); - addNode(nodes, c1, 0); - addNode(nodes, c2, 1); - addNode(nodes, condition, 2, 0, 1); - addNode(nodes, lvar, 3); - addNode(nodes, c3, 4); - addNode(nodes, a1, 5, 3, 4); - addNode(nodes, rvar, 6); - addNode(nodes, c4, 7); - addNode(nodes, a2, 8, 6, 7); - addNode(nodes, xvar, 9); - addNode(nodes, ret, 10, 9); - addEdge(edges, e1, 2, 5); - addEdge(edges, e2, 2, 10); - addEdge(edges, e3, 5, 8); - addEdge(edges, e4, 8, 10); + addNode(nodes, c1, 1); + addNode(nodes, c2, 2); + addNode(nodes, condition, 0, 1, 2); + addNode(nodes, lvar, 4); + addNode(nodes, c3, 5); + addNode(nodes, a1, 3, 4, 5); + addNode(nodes, rvar, 7); + addNode(nodes, c4, 8); + addNode(nodes, a2, 6, 7, 8); + addNode(nodes, xvar, 10); + addNode(nodes, ret, 9, 10); + addEdge(edges, e1, 0, 3); + addEdge(edges, e2, 0, 9); + addEdge(edges, e3, 3, 6); + addEdge(edges, e4, 6, 9); SerializableGraph expected = new SerializableGraph( cfg.getDescriptor().getFullSignatureWithParNames(), null, @@ -234,25 +234,25 @@ public void testAsymmetricIf() { SerializableGraph graph = SerializableCFG.fromCFG(cfg); SortedSet nodes = new TreeSet<>(); SortedSet edges = new TreeSet<>(); - addNode(nodes, c1, 0); - addNode(nodes, c2, 1); - addNode(nodes, condition, 2, 0, 1); - addNode(nodes, lvar, 3); - addNode(nodes, c3, 4); - addNode(nodes, a1, 5, 3, 4); - addNode(nodes, rvar, 6); - addNode(nodes, c4, 7); - addNode(nodes, a2, 8, 6, 7); - addNode(nodes, xvar, 9); - addNode(nodes, c5, 10); - addNode(nodes, a3, 11, 9, 10); - addNode(nodes, yvar, 12); - addNode(nodes, ret, 13, 12); - addEdge(edges, e1, 2, 5); - addEdge(edges, e2, 2, 8); - addEdge(edges, e3, 5, 11); - addEdge(edges, e4, 8, 13); - addEdge(edges, e5, 11, 13); + addNode(nodes, c1, 1); + addNode(nodes, c2, 2); + addNode(nodes, condition, 0, 1, 2); + addNode(nodes, lvar, 4); + addNode(nodes, c3, 5); + addNode(nodes, a1, 3, 4, 5); + addNode(nodes, rvar, 7); + addNode(nodes, c4, 8); + addNode(nodes, a2, 6, 7, 8); + addNode(nodes, xvar, 10); + addNode(nodes, c5, 11); + addNode(nodes, a3, 9, 10, 11); + addNode(nodes, yvar, 13); + addNode(nodes, ret, 12, 13); + addEdge(edges, e1, 0, 3); + addEdge(edges, e2, 0, 6); + addEdge(edges, e3, 3, 9); + addEdge(edges, e4, 6, 12); + addEdge(edges, e5, 9, 12); SerializableGraph expected = new SerializableGraph( cfg.getDescriptor().getFullSignatureWithParNames(), null, @@ -291,21 +291,21 @@ public void testSimpleLoop() { SerializableGraph graph = SerializableCFG.fromCFG(cfg); SortedSet nodes = new TreeSet<>(); SortedSet edges = new TreeSet<>(); - addNode(nodes, c1, 0); - addNode(nodes, c2, 1); - addNode(nodes, condition, 2, 0, 1); - addNode(nodes, lvar, 3); - addNode(nodes, c3, 4); - addNode(nodes, a1, 5, 3, 4); - addNode(nodes, rvar, 6); - addNode(nodes, c4, 7); - addNode(nodes, a2, 8, 6, 7); - addNode(nodes, xvar, 9); - addNode(nodes, ret, 10, 9); - addEdge(edges, e1, 2, 5); - addEdge(edges, e2, 2, 8); - addEdge(edges, e3, 5, 2); - addEdge(edges, e4, 8, 10); + addNode(nodes, c1, 1); + addNode(nodes, c2, 2); + addNode(nodes, condition, 0, 1, 2); + addNode(nodes, lvar, 4); + addNode(nodes, c3, 5); + addNode(nodes, a1, 3, 4, 5); + addNode(nodes, rvar, 7); + addNode(nodes, c4, 8); + addNode(nodes, a2, 6, 7, 8); + addNode(nodes, xvar, 10); + addNode(nodes, ret, 9, 10); + addEdge(edges, e1, 0, 3); + addEdge(edges, e2, 0, 6); + addEdge(edges, e3, 3, 0); + addEdge(edges, e4, 6, 9); SerializableGraph expected = new SerializableGraph( cfg.getDescriptor().getFullSignatureWithParNames(), null, @@ -338,17 +338,17 @@ public void testEmptyLoop() { SerializableGraph graph = SerializableCFG.fromCFG(cfg); SortedSet nodes = new TreeSet<>(); SortedSet edges = new TreeSet<>(); - addNode(nodes, c1, 0); - addNode(nodes, c2, 1); - addNode(nodes, condition, 2, 0, 1); - addNode(nodes, rvar, 3); - addNode(nodes, c4, 4); - addNode(nodes, a2, 5, 3, 4); - addNode(nodes, xvar, 6); - addNode(nodes, ret, 7, 6); - addEdge(edges, e1, 2, 2); - addEdge(edges, e2, 2, 5); - addEdge(edges, e4, 5, 7); + addNode(nodes, c1, 1); + addNode(nodes, c2, 2); + addNode(nodes, condition, 0, 1, 2); + addNode(nodes, rvar, 4); + addNode(nodes, c4, 5); + addNode(nodes, a2, 3, 4, 5); + addNode(nodes, xvar, 7); + addNode(nodes, ret, 6, 7); + addEdge(edges, e1, 0, 0); + addEdge(edges, e2, 0, 3); + addEdge(edges, e4, 3, 6); SerializableGraph expected = new SerializableGraph( cfg.getDescriptor().getFullSignatureWithParNames(), null, @@ -413,38 +413,38 @@ public void testNestedConditionals() { SerializableGraph graph = SerializableCFG.fromCFG(cfg); SortedSet nodes = new TreeSet<>(); SortedSet edges = new TreeSet<>(); - addNode(nodes, c1, 0); - addNode(nodes, c2, 1); - addNode(nodes, loop_condition, 2, 0, 1); - addNode(nodes, loop_a1var, 3); - addNode(nodes, c3, 4); - addNode(nodes, loop_a1, 5, 3, 4); - addNode(nodes, loop_a2var, 6); - addNode(nodes, c4, 7); - addNode(nodes, loop_a2, 8, 6, 7); - addNode(nodes, c5, 9); - addNode(nodes, c6, 10); - addNode(nodes, if_condition, 11, 9, 10); - addNode(nodes, if_a1var, 12); - addNode(nodes, c7, 13); - addNode(nodes, if_a1, 14, 12, 13); - addNode(nodes, if_a2var, 15); - addNode(nodes, c8, 16); - addNode(nodes, if_a2, 17, 15, 16); - addNode(nodes, if_a3var, 18); - addNode(nodes, c9, 19); - addNode(nodes, if_a3, 20, 18, 19); - addNode(nodes, xvar, 21); - addNode(nodes, ret, 22, 21); - addEdge(edges, e1, 2, 5); - addEdge(edges, e2, 5, 11); - addEdge(edges, e3, 11, 14); - addEdge(edges, e4, 14, 20); - addEdge(edges, e5, 20, 8); - addEdge(edges, e6, 11, 17); - addEdge(edges, e7, 17, 8); - addEdge(edges, e8, 8, 2); - addEdge(edges, e9, 2, 22); + addNode(nodes, c1, 1); + addNode(nodes, c2, 2); + addNode(nodes, loop_condition, 0, 1, 2); + addNode(nodes, loop_a1var, 4); + addNode(nodes, c3, 5); + addNode(nodes, loop_a1, 3, 4, 5); + addNode(nodes, loop_a2var, 7); + addNode(nodes, c4, 8); + addNode(nodes, loop_a2, 6, 7, 8); + addNode(nodes, c5, 10); + addNode(nodes, c6, 11); + addNode(nodes, if_condition, 9, 10, 11); + addNode(nodes, if_a1var, 13); + addNode(nodes, c7, 14); + addNode(nodes, if_a1, 12, 13, 14); + addNode(nodes, if_a2var, 16); + addNode(nodes, c8, 17); + addNode(nodes, if_a2, 15, 16, 17); + addNode(nodes, if_a3var, 19); + addNode(nodes, c9, 20); + addNode(nodes, if_a3, 18, 19, 20); + addNode(nodes, xvar, 22); + addNode(nodes, ret, 21, 22); + addEdge(edges, e1, 0, 3); + addEdge(edges, e2, 3, 9); + addEdge(edges, e3, 9, 12); + addEdge(edges, e4, 12, 18); + addEdge(edges, e5, 18, 6); + addEdge(edges, e6, 9, 15); + addEdge(edges, e7, 15, 6); + addEdge(edges, e8, 6, 0); + addEdge(edges, e9, 0, 21); SerializableGraph expected = new SerializableGraph( cfg.getDescriptor().getFullSignatureWithParNames(), null,