Skip to content

Commit 1a42f99

Browse files
author
Killian Perlin
committed
Add lowering for the safe access 'DotExpr' Lkt node
1 parent ec7bb5c commit 1a42f99

File tree

3 files changed

+12
-8
lines changed
  • lkql_jit/language/src/main/java/com/adacore/lkql_jit/langkit_translator/passes
  • testsuite/tests/interpreter

3 files changed

+12
-8
lines changed

lkql_jit/language/src/main/java/com/adacore/lkql_jit/langkit_translator/passes/LktPasses.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,10 @@
2424
import com.adacore.lkql_jit.nodes.expressions.block_expression.BlockBody;
2525
import com.adacore.lkql_jit.nodes.expressions.block_expression.BlockBodyDecl;
2626
import com.adacore.lkql_jit.nodes.expressions.block_expression.BlockExpr;
27+
import com.adacore.lkql_jit.nodes.expressions.dot.BaseDotAccess;
2728
import com.adacore.lkql_jit.nodes.expressions.dot.DotAccessNodeGen;
2829
import com.adacore.lkql_jit.nodes.expressions.dot.DotAccessWrapperNodeGen;
30+
import com.adacore.lkql_jit.nodes.expressions.dot.SafeDotAccessNodeGen;
2931
import com.adacore.lkql_jit.nodes.expressions.literals.*;
3032
import com.adacore.lkql_jit.nodes.expressions.match.Match;
3133
import com.adacore.lkql_jit.nodes.expressions.match.MatchArm;
@@ -524,14 +526,14 @@ private Expr buildExpr(Liblktlang.Expr expr) {
524526
);
525527
} else if (expr instanceof DotExpr dotExpr) {
526528
final var memberIdentifier = dotExpr.fSuffix();
527-
return DotAccessWrapperNodeGen.create(
528-
loc(dotExpr),
529-
DotAccessNodeGen.create(
530-
loc(dotExpr),
531-
new Identifier(loc(memberIdentifier), memberIdentifier.getText()),
532-
buildExpr(dotExpr.fPrefix())
533-
)
534-
);
529+
final var loc = loc(dotExpr);
530+
final var id = new Identifier(loc(memberIdentifier), memberIdentifier.getText());
531+
final var prefix = buildExpr(dotExpr.fPrefix());
532+
final BaseDotAccess dotAccess = (dotExpr.fNullCond() instanceof
533+
Liblktlang.NullCondQualifierPresent)
534+
? SafeDotAccessNodeGen.create(loc, id, prefix)
535+
: DotAccessNodeGen.create(loc, id, prefix);
536+
return DotAccessWrapperNodeGen.create(dotAccess.getSourceSection(), dotAccess);
535537
} else if (expr instanceof MatchExpr matchExpr) {
536538
Expr matchVal = buildExpr(matchExpr.fMatchExpr());
537539
var arms = Arrays.stream(matchExpr.fBranches().children())
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
driver: 'interpreter'
22
project: 'default_project/default.gpr'
3+
lkt_refactor: True
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
driver: 'interpreter'
22
project: 'default_project/default.gpr'
3+
lkt_refactor: True

0 commit comments

Comments
 (0)