summaryrefslogtreecommitdiff
path: root/src/ast/nodes/ParamdefNode.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/ast/nodes/ParamdefNode.java')
-rw-r--r--src/ast/nodes/ParamdefNode.java18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/ast/nodes/ParamdefNode.java b/src/ast/nodes/ParamdefNode.java
index 481282e..5164537 100644
--- a/src/ast/nodes/ParamdefNode.java
+++ b/src/ast/nodes/ParamdefNode.java
@@ -1,16 +1,34 @@
package ast.nodes;
import ast.types.*;
+import java.util.ArrayList;
+import semanticanalysis.SemanticError;
+import semanticanalysis.SymbolTable;
/**
* Node for the `paramdef` statement of the grammar. Extends the `AtomNode`
* class.
*/
public class ParamdefNode extends AtomNode {
+
public ParamdefNode(String val) {
super(val);
}
+ @Override
+ public ArrayList<SemanticError> checkSemantics(SymbolTable ST, int _nesting) {
+ var errors = new ArrayList<SemanticError>();
+ String paramName = this.getId();
+
+ if (!ST.top_lookup(paramName)) {
+ ST.insert(paramName, this.typeCheck(), _nesting, "");
+ } else {
+ errors.add(new SemanticError("Duplicate argument '" + paramName + "' in function definition."));
+ }
+
+ return errors;
+ }
+
// FIXME: it should returns the param' type
@Override
public Type typeCheck() {