Skip to content

Commit

Permalink
Fix for loop for 1+ params
Browse files Browse the repository at this point in the history
  • Loading branch information
boozec committed Jun 27, 2024
1 parent eb7fb04 commit 4898724
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 8 deletions.
8 changes: 4 additions & 4 deletions src/ast/nodes/ExprListNode.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,16 @@ public class ExprListNode implements Node {

private final ArrayList<Node> exprs;

public ExprListNode(ArrayList<Node> _exprs) {
this.exprs = _exprs;
public ExprListNode(ArrayList<Node> exprs) {
this.exprs = exprs;
}

@Override
public ArrayList<SemanticError> checkSemantics(SymbolTable ST, int _nesting) {
ArrayList<SemanticError> errors = new ArrayList();

for (var param : exprs) {
errors.addAll(param.checkSemantics(ST, _nesting));
for (var expr : exprs) {
errors.addAll(expr.checkSemantics(ST, _nesting));
}

return errors;
Expand Down
11 changes: 10 additions & 1 deletion src/ast/nodes/ExprNode.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,14 @@ public ExprNode(Node atom, Node compOp, ArrayList<Node> exprs, String op, ArrayL
this.trailers = trailers;
}

public Node getExpr(int i) {
if (i >= this.exprs.size()) {
return null;
}

return this.exprs.get(i);
}

public String getId() {
if (atom != null) {
return ((AtomNode) this.atom).getId();
Expand Down Expand Up @@ -67,7 +75,8 @@ public ArrayList<SemanticError> checkSemantics(SymbolTable ST, int _nesting) {
int argNumber = trailer.getArgumentNumber();

if (paramNumber != argNumber) {
errors.add(new SemanticError(funName + "() takes " + String.valueOf(paramNumber) + " positional arguments but " + String.valueOf(argNumber) + " were given."));
errors.add(new SemanticError(funName + "() takes " + String.valueOf(paramNumber)
+ " positional arguments but " + String.valueOf(argNumber) + " were given."));
}
}
}
Expand Down
14 changes: 11 additions & 3 deletions src/ast/nodes/ForStmtNode.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,27 @@
*/
public class ForStmtNode implements Node {

private ExprListNode exprList;
private Node exprList;
private Node block;

public ForStmtNode(Node exprList, Node block) {
this.exprList = (ExprListNode) exprList;
this.exprList = exprList;
this.block = block;
}

@Override
public ArrayList<SemanticError> checkSemantics(SymbolTable ST, int _nesting) {
ArrayList<SemanticError> errors = new ArrayList<SemanticError>();

// ST.insert(expr.getId(), expr.typeCheck(s), _nesting, "");
var l = (ExprListNode) exprList;
for (int i = 0; i < l.getSize() - 1; ++i) {
var e = (ExprNode) l.getElem(i);
ST.insert(e.getId(), e.typeCheck(), _nesting, "");
}

var left = (ExprNode) l.getElem(l.getSize() - 1);
var atomLeft = (ExprNode) left.getExpr(0);
ST.insert(atomLeft.getId(), atomLeft.typeCheck(), _nesting, "");

errors.addAll(exprList.checkSemantics(ST, _nesting));
errors.addAll(block.checkSemantics(ST, _nesting));
Expand Down

0 comments on commit 4898724

Please sign in to comment.