Skip to content

Commit 5d2829b

Browse files
feat: Add support for for loops. (#8)
The variable bound the the loop 'just works', but we need some extra fixes to make sure we don't emit needless refs/defs for temporaries.
1 parent fe4df60 commit 5d2829b

File tree

4 files changed

+44
-3
lines changed

4 files changed

+44
-3
lines changed

scip_indexer/SCIPIndexer.cc

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,12 @@ static bool isTemporary(const core::GlobalState &gs, const core::LocalVariable &
107107
if (var.isSyntheticTemporary()) {
108108
return true;
109109
}
110-
return var._name == Names::finalReturn() || var._name == Names::blockPreCallTemp() ||
111-
var._name == Names::blockTemp() || var._name == Names::blockPassTemp() || var._name == Names::forTemp();
110+
auto n = var._name;
111+
return n == Names::blockPreCallTemp() || n == Names::blockTemp() || n == Names::blockPassTemp() ||
112+
n == Names::forTemp() || n == Names::blkArg() || n == Names::blockCall() ||
113+
// Insert checks because sometimes temporaries are initialized with a 0 unique value. 😬
114+
n == Names::finalReturn() || n == NameRef::noName() || n == Names::blockCall() || n == Names::selfLocal() ||
115+
n == Names::unconditional();
112116
}
113117

114118
struct LocalOccurrence {

test/scip/scip_test.bzl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ def scip_test(path):
4747
data = data,
4848
size = "small",
4949
)
50-
update_test_name = "update_".format(test_name)
50+
update_test_name = "update_{}".format(test_name)
5151
native.sh_test(
5252
name = update_test_name,
5353
srcs = ["scip_test_runner.sh"],

test/scip/testdata/for.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# typed: true
2+
3+
def for_loop()
4+
y = 0
5+
for x in [1, 2, 3]
6+
y += x
7+
for x in [3, 4, 5]
8+
y += x
9+
end
10+
end
11+
y
12+
end

test/scip/testdata/for.snapshot.rb

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# typed: true
2+
3+
def for_loop()
4+
#^^^^^^^^^^^^^^ definition scip-ruby gem TODO TODO for_loop().
5+
#^^^^^^^^^^^ definition scip-ruby gem TODO TODO <static-init>().
6+
y = 0
7+
# ^ definition local 1~#1120785331
8+
for x in [1, 2, 3]
9+
# ^ definition local 2~#1120785331
10+
y += x
11+
# ^ reference local 1~#1120785331
12+
# ^ reference (write) local 1~#1120785331
13+
# ^ reference local 2~#1120785331
14+
for x in [3, 4, 5]
15+
# ^ definition local 3~#1120785331
16+
y += x
17+
# ^ reference local 1~#1120785331
18+
# ^ reference (write) local 1~#1120785331
19+
# ^^^^^^ reference local 1~#1120785331
20+
# ^ reference local 3~#1120785331
21+
end
22+
end
23+
y
24+
# ^ reference local 1~#1120785331
25+
end

0 commit comments

Comments
 (0)