From 2ab4ed871c70b99b13943f5318e361dc501effb5 Mon Sep 17 00:00:00 2001 From: dfsek Date: Tue, 22 Dec 2020 02:20:46 -0700 Subject: [PATCH] check if var/function is already defined in scope. --- .../dfsek/terra/api/structures/parser/Parser.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/common/src/main/java/com/dfsek/terra/api/structures/parser/Parser.java b/common/src/main/java/com/dfsek/terra/api/structures/parser/Parser.java index 069c6d5e1..bd7df451f 100644 --- a/common/src/main/java/com/dfsek/terra/api/structures/parser/Parser.java +++ b/common/src/main/java/com/dfsek/terra/api/structures/parser/Parser.java @@ -255,9 +255,6 @@ public class Parser { if(tokens.isEmpty()) break; ParserUtil.checkType(tokens.remove(0), Token.Type.STATEMENT_END, Token.Type.BLOCK_END); break; - case BLOCK_END: - tokens.remove(0); // Remove block end. - break main; case NUMBER_VARIABLE: case BOOLEAN_VARIABLE: case STRING_VARIABLE: @@ -269,11 +266,18 @@ public class Parser { else temp = parseVariableDeclaration(tokens, Returnable.ReturnType.BOOLEAN); Token name = tokens.get(1); - ParserUtil.checkType(name, Token.Type.IDENTIFIER); + ParserUtil.checkType(name, Token.Type.IDENTIFIER); // Name must be an identifier. + + if(functions.containsKey(name.getContent()) || parsedVariables.containsKey(name.getContent())) + throw new ParseException(name.getContent() + " is already defined in this scope: " + name.getPosition()); parsedVariables.put(name.getContent(), temp); parsedItems.add(parseAssignment(temp, tokens, parsedVariables)); ParserUtil.checkType(tokens.remove(0), Token.Type.STATEMENT_END); + break; + case BLOCK_END: + tokens.remove(0); // Remove block end. + break main; } } return new Block(parsedItems, first.getPosition());