Skip to content

Commit 07c4a1e

Browse files
committed
Hack Array length property
1 parent 92cdad6 commit 07c4a1e

8 files changed

Lines changed: 73 additions & 36 deletions

File tree

.idea/workspace.xml

Lines changed: 30 additions & 30 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/main/java/ko/carbonel/compiler/intermediate/tinyRust/ast/expression/ChainedExpressionEntry.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ public void setChain(AttributeAccessEntry chain) {
3131
@Override
3232
public TypeEntry getType(Scope scope, boolean isImmediateChainedScope) {
3333
TypeEntry type = base.getType(scope, false);
34+
// FIXME: This is a hack to get the length of an array
35+
if (type.isArray && chain instanceof FieldAccessEntry fieldAccess && fieldAccess.fieldName.lexeme().equals("length")) {
36+
return TypeEntry.I32;
37+
}
3438
Scope myScope = new ChainedScope(type, scope);
3539
return chain.getType(myScope, true);
3640
}

src/test/java/ko/carbonel/compiler/generated/AttrTinyRustParserTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,11 @@ public static Stream<Arguments> readFilesTs() {
7272
}
7373

7474
public static Stream<Arguments> readFilesAst() {
75-
return Stream.of(Arguments.of("34.rs"));
76-
// return Arrays.stream(Objects.requireNonNull(new File(AST_TEST_ROOT).listFiles()))
77-
// .filter(it -> it.getName().endsWith(RS))
78-
// .filter(it -> Integer.parseInt(it.getName().substring(0, it.getName().length() - RS.length())) > -1)
79-
// .map(it -> Arguments.of(it.getName()));
75+
// return Stream.of(Arguments.of("35.rs"));
76+
return Arrays.stream(Objects.requireNonNull(new File(AST_TEST_ROOT).listFiles()))
77+
.filter(it -> it.getName().endsWith(RS))
78+
.filter(it -> Integer.parseInt(it.getName().substring(0, it.getName().length() - RS.length())) > -1)
79+
.map(it -> Arguments.of(it.getName()));
8080
}
8181

8282
private static String extractDirective(String fileContents, String header) {

src/test/resources/ast/34.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
/*OK
22
*/
33
fn main(){
4-
((new I32[5+3]).length);
4+
I32: a;
5+
a = (new I32[5+3]).length;
56
}

src/test/resources/ast/34.rs.full

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
/*OK
2+
*/
3+
fn main(){
4+
I32: a;
5+
a = new I32[(5+3)].length;
6+
}

src/test/resources/ast/35.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
/*OK
2+
*/
3+
fn main(){
4+
Array I32: a;
5+
I32: b;
6+
b = a.length;
7+
b = a[0];
8+
b = a[-1];
9+
}

src/test/resources/ast/35.rs.full

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
/*OK
2+
*/
3+
fn main(){
4+
Array I32: a;
5+
I32: b;
6+
b = a.length;
7+
b = a[0];
8+
b = a[-1];
9+
}

src/test/resources/ast/36.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/*ERROR
2+
IncompatibleTypesError
3+
*/
4+
fn main(){
5+
Array I32: a;
6+
Str: b;
7+
b = a.length;
8+
}

0 commit comments

Comments
 (0)