From 1209842bcd94084f04c887bec9d8d3867b177d54 Mon Sep 17 00:00:00 2001 From: Astrashh Date: Tue, 11 May 2021 15:48:28 +1000 Subject: [PATCH] Implement ignorable functions to parser --- .../terra/api/structures/parser/Parser.java | 15 ++++++++++++- .../parser/lang/functions/Function.java | 21 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) 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 9f4ff96db..c6434fbad 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 @@ -52,6 +52,7 @@ import java.util.Map; public class Parser { private final String data; private final Map>> functions = new HashMap<>(); + private final List ignoredFunctions = new GlueList<>(); private String id; @@ -64,6 +65,11 @@ public class Parser { return this; } + public Parser ignoreFunction(String name) { + ignoredFunctions.add(name); + return this; + } + public String getID() { return id; } @@ -339,7 +345,10 @@ public class Parser { while(tokens.hasNext()) { Token token = tokens.get(); if(token.getType().equals(Token.Type.BLOCK_END)) break; // Stop parsing at block end. - parsedItems.add(parseItem(tokens, parsedVariables, loop)); + Item parsedItem = parseItem(tokens, parsedVariables, loop); + if (parsedItem != Function.NULL) { + parsedItems.add(parsedItem); + } if(tokens.hasNext() && !token.isLoopLike()) ParserUtil.checkType(tokens.consume(), Token.Type.STATEMENT_END); } return new Block(parsedItems, first.getPosition()); @@ -398,6 +407,10 @@ public class Parser { ParserUtil.checkType(tokens.consume(), Token.Type.GROUP_END); // Remove body end if(fullStatement) ParserUtil.checkType(tokens.get(), Token.Type.STATEMENT_END); + + if(ignoredFunctions.contains(identifier.getContent())) { + return Function.NULL; + } if(functions.containsKey(identifier.getContent())) { FunctionBuilder builder = functions.get(identifier.getContent()); diff --git a/common/src/main/java/com/dfsek/terra/api/structures/parser/lang/functions/Function.java b/common/src/main/java/com/dfsek/terra/api/structures/parser/lang/functions/Function.java index aaa826d12..c22d9fae9 100644 --- a/common/src/main/java/com/dfsek/terra/api/structures/parser/lang/functions/Function.java +++ b/common/src/main/java/com/dfsek/terra/api/structures/parser/lang/functions/Function.java @@ -1,6 +1,27 @@ package com.dfsek.terra.api.structures.parser.lang.functions; +import com.dfsek.terra.api.structures.parser.lang.ImplementationArguments; import com.dfsek.terra.api.structures.parser.lang.Returnable; +import com.dfsek.terra.api.structures.parser.lang.variables.Variable; +import com.dfsek.terra.api.structures.tokenizer.Position; + +import java.util.Map; public interface Function extends Returnable { + Function NULL = new Function() { + @Override + public ReturnType returnType() { + return null; + } + + @Override + public Object apply(ImplementationArguments implementationArguments, Map> variableMap) { + return null; + } + + @Override + public Position getPosition() { + return null; + } + }; }