Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions vadl/main/vadl/ast/AstDumper.java
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ public Void visit(CallIndexExpr expr) {
}
for (CallIndexExpr.SubCall subCall : expr.subCalls) {
builder.append(indentString()).append("SubCall\n");
dumpChildren(subCall.id);
dumpChildren(subCall.identifier());
for (var args : subCall.argsIndices) {
builder.append(indentString()).append("ArgsIndices\n");
dumpChildren(args.values);
Expand Down Expand Up @@ -212,15 +212,15 @@ public Void visit(EnumerationDefinition definition) {
@Override
public Void visit(LetExpr expr) {
dumpNode(expr);
dumpChildren(expr.identifiers);
dumpChildren(expr.identifiers());
dumpChildren(expr.valueExpr, expr.body);
return null;
}

@Override
public Void visit(LetStatement stmt) {
dumpNode(stmt);
dumpChildren(stmt.identifiers);
dumpChildren(stmt.identifiers());
dumpChildren(stmt.valueExpr, stmt.body);
return null;
}
Expand Down
14 changes: 10 additions & 4 deletions vadl/main/vadl/ast/BehaviorLowering.java
Original file line number Diff line number Diff line change
Expand Up @@ -1282,7 +1282,10 @@ private ExpressionNode visitSubCall(CallIndexExpr expr, ExpressionNode exprBefor
} else if (exprBeforeSubcall.type() == MicroArchitectureType.instruction()) {
// There is weired way to call functions on instructions
var builtin =
BuiltInTable.builtIns().filter(b -> b.name().equals(subCall.id.name)).findFirst().get();
BuiltInTable.builtIns()
.filter(b -> b.name().equals(subCall.identifier().name))
.findFirst()
.get();
var call = new MiaBuiltInCall(builtin, new NodeList<>(exprBeforeSubcall),
builtin.returns(List.of(MicroArchitectureType.instruction())));
call.setSourceLocation(subCall.location());
Expand Down Expand Up @@ -1321,7 +1324,7 @@ private ExpressionNode visitSubCall(CallIndexExpr expr, ExpressionNode exprBefor
// FIXME: Handle slicing and format subcall propperly
int offset = 0;
for (var subcall : expr.subCalls) {
var subcallName = subcall.id.name;
var subcallName = subcall.identifier().name;
if (subcallName.equals("next")) {
offset += instrWidthInByte;
} else {
Expand Down Expand Up @@ -1390,8 +1393,11 @@ private ExpressionNode visitSliceIndexCall(ExpressionNode exprBeforeSlice,
public ExpressionNode visitStageCall(CallIndexExpr expr, StageDefinition stageDef) {
var subcall = expr.subCalls.get(0);
var output = (StageOutput) viamLowering.fetch(
stageDef.outputs.stream().filter(o -> o.identifier.name.equals(subcall.id.name)).findFirst()
.get()).get();
stageDef.outputs.stream()
.filter(o -> o.identifier.name.equals(subcall.identifier().name))
.findFirst()
.get()
).get();
return new ReadStageOutputNode(output);
}

Expand Down
11 changes: 6 additions & 5 deletions vadl/main/vadl/ast/ConstantEvaluator.java
Original file line number Diff line number Diff line change
Expand Up @@ -202,9 +202,8 @@ private ConstantValue visitIdentifiable(Expr expr) {
// FIXME: implement tuple unpacking
if (letExpr.identifiers.size() > 1) {
throw new EvaluationError("Cannot evaluate tuple unpacking yet",
letExpr.identifiers.getFirst().loc.join(
letExpr.identifiers.getLast()
.loc));
letExpr.identifiers().getFirst().loc.join(
letExpr.identifiers().getLast().loc));
}

return eval(letExpr.valueExpr);
Expand All @@ -214,7 +213,7 @@ private ConstantValue visitIdentifiable(Expr expr) {
if (functionStack.isEmpty()) {
throw new IllegalStateException("There cannot be parameters outside of functions");
}
return requireNonNull(functionStack.peek().arguments.get(parameter.name.name));
return requireNonNull(functionStack.peek().arguments.get(parameter.identifier().name));
}

if (origin instanceof EnumerationDefinition.Entry entry) {
Expand Down Expand Up @@ -442,7 +441,9 @@ public ConstantValue visit(CallIndexExpr expr) {
if (computedTarget instanceof FunctionDefinition functionDef) {
var arguments = new HashMap<String, ConstantValue>();
for (var i = 0; i < expr.args().size(); i++) {
arguments.put(functionDef.params.get(i).name.name, eval(expr.args().get(i).values.get(0)));
arguments.put(
functionDef.params.get(i).identifier().name,
eval(expr.args().get(i).values.get(0)));
}
functionStack.push(new FunctionFrame(functionDef, arguments));
try {
Expand Down
46 changes: 25 additions & 21 deletions vadl/main/vadl/ast/Definition.java
Original file line number Diff line number Diff line change
Expand Up @@ -237,18 +237,18 @@ interface DefinitionVisitor<R> {
* type The declared type of this parameter.
*/
class Parameter extends Definition implements IdentifiableNode, TypedNode {
Identifier name;
IdentifierOrPlaceholder name;
@Child
TypeLiteral typeLiteral;

public Parameter(Identifier name, TypeLiteral typeLiteral) {
public Parameter(IdentifierOrPlaceholder name, TypeLiteral typeLiteral) {
this.name = name;
this.typeLiteral = typeLiteral;
}

@Override
public Identifier identifier() {
return name;
return (Identifier) name;
}

@Override
Expand Down Expand Up @@ -405,9 +405,13 @@ public Type type() {
}

abstract class FormatField extends Definition {
Identifier identifier;
IsId identifier;

public FormatField(Identifier identifier) {
Identifier identifier() {
return (Identifier) identifier;
}

public FormatField(IsId identifier) {
this.identifier = identifier;
}
}
Expand All @@ -430,7 +434,7 @@ class RangeFormatField extends FormatField implements IdentifiableNode {
@Nullable
List<FormatDefinition.BitRange> computedRanges;

public RangeFormatField(Identifier identifier, List<Expr> ranges,
public RangeFormatField(IsId identifier, List<Expr> ranges,
@Nullable TypeLiteral typeLiteral) {
super(identifier);
this.ranges = ranges;
Expand All @@ -439,7 +443,7 @@ public RangeFormatField(Identifier identifier, List<Expr> ranges,

@Override
public Identifier identifier() {
return identifier;
return (Identifier) identifier;
}

@Override
Expand Down Expand Up @@ -504,14 +508,14 @@ class TypedFormatField extends FormatField implements IdentifiableNode {
@Nullable
FormatDefinition.BitRange range;

public TypedFormatField(Identifier identifier, TypeLiteral typeLiteral) {
public TypedFormatField(IsId identifier, TypeLiteral typeLiteral) {
super(identifier);
this.typeLiteral = typeLiteral;
}

@Override
public Identifier identifier() {
return identifier;
return (Identifier) identifier;
}

@Override
Expand Down Expand Up @@ -577,16 +581,11 @@ class DerivedFormatField extends FormatField implements IdentifiableNode {
@Child
Expr expr;

public DerivedFormatField(Identifier identifier, Expr expr) {
public DerivedFormatField(IsId identifier, Expr expr) {
super(identifier);
this.expr = expr;
}

@Override
public Identifier identifier() {
return identifier;
}

@Override
public SourceLocation location() {
return identifier.location().join(expr.location());
Expand Down Expand Up @@ -630,6 +629,11 @@ public int hashCode() {
<R> R accept(DefinitionVisitor<R> visitor) {
return visitor.visit(this);
}

@Override
public Identifier identifier() {
return (Identifier) identifier;
}
}

/**
Expand All @@ -639,7 +643,7 @@ class EncodingFormatField extends FormatField {
@Child
Expr expr;

public EncodingFormatField(Identifier identifier, Expr expr) {
public EncodingFormatField(IsId identifier, Expr expr) {
super(identifier);
this.identifier = identifier;
this.expr = expr;
Expand All @@ -658,7 +662,7 @@ FormatField target() {
List<Node> children() {
// This has to be hardcoded here because for this format field it's a child but for some it's
// the identfiyable name.
return List.of(identifier, expr);
return List.of((Node) identifier, expr);
}

@Override
Expand Down Expand Up @@ -707,7 +711,7 @@ class PredicateFormatField extends FormatField {
@Child
Expr expr;

public PredicateFormatField(Identifier identifier, Expr expr) {
public PredicateFormatField(IsId identifier, Expr expr) {
super(identifier);
this.expr = expr;
}
Expand All @@ -725,7 +729,7 @@ FormatField target() {
List<Node> children() {
// This has to be hardcoded here because for this format field it's a child but for some it's
// the identfiyable name.
return List.of(identifier, expr);
return List.of((Node) identifier, expr);
}

@Override
Expand Down Expand Up @@ -802,12 +806,12 @@ List<FormatField> fieldsWithoutEncodingPredicate() {

boolean hasField(String name) {
return fieldsWithoutEncodingPredicate().stream()
.anyMatch(f -> f.identifier.name.equals(name));
.anyMatch(f -> f.identifier().name.equals(name));
}

FormatField getField(String name) {
return fieldsWithoutEncodingPredicate().stream()
.filter(f -> f.identifier.name.equals(name)).findFirst()
.filter(f -> f.identifier().name.equals(name)).findFirst()
.orElseThrow();
}

Expand Down
18 changes: 13 additions & 5 deletions vadl/main/vadl/ast/Expr.java
Original file line number Diff line number Diff line change
Expand Up @@ -1961,7 +1961,7 @@ public int hashCode() {
}

static final class SubCall implements WithLocation {
Identifier id;
IdentifierOrPlaceholder id;
List<Arguments> argsIndices;

/**
Expand All @@ -1985,11 +1985,15 @@ static final class SubCall implements WithLocation {
@Nullable
public Integer computedStatusIndex;

SubCall(Identifier id, List<Arguments> argsIndices) {
SubCall(IdentifierOrPlaceholder id, List<Arguments> argsIndices) {
this.id = id;
this.argsIndices = argsIndices;
}

Identifier identifier() {
return (Identifier) id;
}

@Override
public boolean equals(Object obj) {
if (obj == this) {
Expand Down Expand Up @@ -2093,27 +2097,31 @@ public int hashCode() {
}

class LetExpr extends Expr {
List<Identifier> identifiers;
List<IsId> identifiers;
@Child
Expr valueExpr;
@Child
Expr body;
SourceLocation location;

LetExpr(List<Identifier> identifiers, Expr valueExpr, Expr body, SourceLocation location) {
LetExpr(List<IsId> identifiers, Expr valueExpr, Expr body, SourceLocation location) {
this.identifiers = identifiers;
this.valueExpr = valueExpr;
this.body = body;
this.location = location;
}

List<Identifier> identifiers() {
return identifiers.stream().map(id -> (Identifier) id).toList();
}

/**
* Returns the index of one of the variables the statement defines.
*
* @return the type of the name provided.
*/
int getIndexOf(String name) {
return identifiers.stream().map(i -> i.name).toList().indexOf(name);
return identifiers().stream().map(i -> i.name).toList().indexOf(name);
}

/**
Expand Down
12 changes: 8 additions & 4 deletions vadl/main/vadl/ast/Statement.java
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText : © 2025 TU Wien <vadl@tuwien.ac.at>
// SPDX-FileCopyrightText : © 2025-2026 TU Wien <vadl@tuwien.ac.at>
// SPDX-License-Identifier: GPL-3.0-or-later
//
// This program is free software: you can redistribute it and/or modify
Expand Down Expand Up @@ -126,28 +126,32 @@ <R> R accept(StatementVisitor<R> visitor) {
* If multiple identifiers are provided, they are used to unpack a tuple.
*/
final class LetStatement extends Statement {
List<Identifier> identifiers;
List<IsId> identifiers;
@Child
Expr valueExpr;
@Child
Statement body;
SourceLocation location;

LetStatement(List<Identifier> identifiers, Expr valueExpr, Statement body,
LetStatement(List<IsId> identifiers, Expr valueExpr, Statement body,
SourceLocation location) {
this.identifiers = identifiers;
this.valueExpr = valueExpr;
this.body = body;
this.location = location;
}

List<Identifier> identifiers() {
return identifiers.stream().map(id -> (Identifier) id).toList();
}

/**
* Returns the index of one of the variables the statement defines.
*
* @return the index/offset of the name provided.
*/
int getIndexOf(String name) {
return identifiers.stream().map(i -> i.name).toList().indexOf(name);
return identifiers().stream().map(i -> i.name).toList().indexOf(name);
}

/**
Expand Down
10 changes: 5 additions & 5 deletions vadl/main/vadl/ast/SymbolTable.java
Original file line number Diff line number Diff line change
Expand Up @@ -822,7 +822,7 @@ public Void visit(LetStatement statement) {
// The identifiers of the let must be visible in it's children
var childTable = currentSymbols().createChild();
statement.symbolTable = childTable;
statement.identifiers.forEach(identifier -> {
statement.identifiers().forEach(identifier -> {
childTable.defineSymbol(identifier.name, statement);
});
withSymbols(childTable, () -> statement.children().forEach(this::travel));
Expand Down Expand Up @@ -867,7 +867,7 @@ public Void visit(LetExpr expr) {
// The identifiers of the let must be visible in it's children
var childTable = currentSymbols().createChild();
expr.symbolTable = childTable;
expr.identifiers.forEach(identifier -> {
expr.identifiers().forEach(identifier -> {
childTable.defineSymbol(identifier.name, expr);
});
withSymbols(childTable, () -> expr.children().forEach(this::travel));
Expand Down Expand Up @@ -1112,7 +1112,7 @@ public Void visit(EncodingDefinition definition) {
var suggestions = Levenshtein.suggestions(
field.name,
format.fields.stream()
.map(f -> f.identifier.name).toList());
.map(f -> f.identifier().name).toList());

definition.symbolTable()
.reportUnkownError("Field", field.name, field.location(), suggestions);
Expand Down Expand Up @@ -1207,15 +1207,15 @@ public Void visit(InstructionCallStatement statement) {
for (var namedArgument : statement.namedArguments) {
FormatField foundField = null;
for (var field : format.fieldsWithoutEncodingPredicate()) {
if (field.identifier.name.equals(namedArgument.name.name)) {
if (field.identifier().name.equals(namedArgument.name.name)) {
foundField = field;
break;
}
}
if (foundField == null) {
var suggestions = Levenshtein.suggestions(namedArgument.name.name,
format.fieldsWithoutEncodingPredicate().stream()
.map(f -> f.identifier.name).toList());
.map(f -> f.identifier().name).toList());

statement.symbolTable()
.reportUnkownError("Field", namedArgument.name.name, namedArgument.location(),
Expand Down
Loading
Loading