diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/Parser.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/Parser.java index 2b344343a..65a169c7c 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/Parser.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/Parser.java @@ -16,10 +16,10 @@ import java.util.Map; import com.dfsek.terra.addons.terrascript.parser.exceptions.ParseException; import com.dfsek.terra.addons.terrascript.parser.lang.Block; import com.dfsek.terra.addons.terrascript.parser.lang.Executable; -import com.dfsek.terra.addons.terrascript.parser.lang.Item; +import com.dfsek.terra.addons.terrascript.parser.lang.Statement; import com.dfsek.terra.addons.terrascript.parser.lang.Keyword; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable.ReturnType; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression.ReturnType; import com.dfsek.terra.addons.terrascript.parser.lang.Scope.ScopeBuilder; import com.dfsek.terra.addons.terrascript.parser.lang.constants.BooleanConstant; import com.dfsek.terra.addons.terrascript.parser.lang.constants.ConstantExpression; @@ -58,7 +58,7 @@ import com.dfsek.terra.addons.terrascript.parser.lang.variables.assign.VariableA import com.dfsek.terra.addons.terrascript.parser.lang.variables.reference.BoolVariableReferenceNode; import com.dfsek.terra.addons.terrascript.parser.lang.variables.reference.NumVariableReferenceNode; import com.dfsek.terra.addons.terrascript.parser.lang.variables.reference.StrVariableReferenceNode; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; import com.dfsek.terra.addons.terrascript.tokenizer.Token; import com.dfsek.terra.addons.terrascript.tokenizer.Tokenizer; import com.dfsek.terra.api.util.generic.pair.Pair; @@ -66,12 +66,12 @@ import com.dfsek.terra.api.util.generic.pair.Pair; @SuppressWarnings("unchecked") public class Parser { - private final String data; + private final String source; private final Map>> functions = new HashMap<>(); private final List ignoredFunctions = new ArrayList<>(); - public Parser(String data) { - this.data = data; + public Parser(String source) { + this.source = source; } public Parser registerFunction(String name, FunctionBuilder> functionBuilder) { @@ -93,7 +93,7 @@ public class Parser { */ public Executable parse() { ScopeBuilder scopeBuilder = new ScopeBuilder(); - return new Executable(parseBlock(new Tokenizer(data), false, scopeBuilder), scopeBuilder); + return new Executable(parseBlock(new Tokenizer(source), false, scopeBuilder), scopeBuilder); } private Keyword parseLoopLike(Tokenizer tokens, boolean loop, ScopeBuilder scopeBuilder) throws ParseException { @@ -112,102 +112,102 @@ public class Parser { }; } - private WhileKeyword parseWhileLoop(Tokenizer tokens, Position start, ScopeBuilder scopeBuilder) { - Returnable first = parseExpression(tokens, true, scopeBuilder); - ParserUtil.checkReturnType(first, Returnable.ReturnType.BOOLEAN); + private WhileKeyword parseWhileLoop(Tokenizer tokens, SourcePosition start, ScopeBuilder scopeBuilder) { + Expression first = parseExpression(tokens, true, scopeBuilder); + ParserUtil.checkReturnType(first, Expression.ReturnType.BOOLEAN); ParserUtil.checkType(tokens.consume(), Token.Type.GROUP_END); - return new WhileKeyword(parseStatementBlock(tokens, true, scopeBuilder), (Returnable) first, start); // While loop + return new WhileKeyword(parseStatementBlock(tokens, true, scopeBuilder), (Expression) first, start); // While loop } - private IfKeyword parseIfStatement(Tokenizer tokens, Position start, boolean loop, ScopeBuilder scopeBuilder) { - Returnable condition = parseExpression(tokens, true, scopeBuilder); - ParserUtil.checkReturnType(condition, Returnable.ReturnType.BOOLEAN); + private IfKeyword parseIfStatement(Tokenizer tokens, SourcePosition start, boolean loop, ScopeBuilder scopeBuilder) { + Expression condition = parseExpression(tokens, true, scopeBuilder); + ParserUtil.checkReturnType(condition, Expression.ReturnType.BOOLEAN); ParserUtil.checkType(tokens.consume(), Token.Type.GROUP_END); Block elseBlock = null; Block statement = parseStatementBlock(tokens, loop, scopeBuilder); - List, Block>> elseIf = new ArrayList<>(); + List, Block>> elseIf = new ArrayList<>(); - while(tokens.hasNext() && tokens.get().getType().equals(Token.Type.ELSE)) { + while(tokens.hasNext() && tokens.current().getType().equals(Token.Type.ELSE)) { tokens.consume(); // Consume else. - if(tokens.get().getType().equals(Token.Type.IF_STATEMENT)) { + if(tokens.current().getType().equals(Token.Type.IF_STATEMENT)) { tokens.consume(); // Consume if. - Returnable elseCondition = parseExpression(tokens, true, scopeBuilder); - ParserUtil.checkReturnType(elseCondition, Returnable.ReturnType.BOOLEAN); - elseIf.add(Pair.of((Returnable) elseCondition, parseStatementBlock(tokens, loop, scopeBuilder))); + Expression elseCondition = parseExpression(tokens, true, scopeBuilder); + ParserUtil.checkReturnType(elseCondition, Expression.ReturnType.BOOLEAN); + elseIf.add(Pair.of((Expression) elseCondition, parseStatementBlock(tokens, loop, scopeBuilder))); } else { elseBlock = parseStatementBlock(tokens, loop, scopeBuilder); break; // Else must be last. } } - return new IfKeyword(statement, (Returnable) condition, elseIf, elseBlock, start); // If statement + return new IfKeyword(statement, (Expression) condition, elseIf, elseBlock, start); // If statement } private Block parseStatementBlock(Tokenizer tokens, boolean loop, ScopeBuilder scopeBuilder) { - if(tokens.get().getType().equals(Token.Type.BLOCK_BEGIN)) { + if(tokens.current().getType().equals(Token.Type.BLOCK_BEGIN)) { ParserUtil.checkType(tokens.consume(), Token.Type.BLOCK_BEGIN); Block block = parseBlock(tokens, loop, scopeBuilder); ParserUtil.checkType(tokens.consume(), Token.Type.BLOCK_END); return block; } else { - Position position = tokens.get().getPosition(); - Block block = new Block(Collections.singletonList(parseItem(tokens, loop, scopeBuilder)), position); + SourcePosition position = tokens.current().getPosition(); + Block block = new Block(Collections.singletonList(parseStatement(tokens, loop, scopeBuilder)), position); ParserUtil.checkType(tokens.consume(), Token.Type.STATEMENT_END); return block; } } - private ForKeyword parseForLoop(Tokenizer tokens, Position start, ScopeBuilder scopeBuilder) { + private ForKeyword parseForLoop(Tokenizer tokens, SourcePosition start, ScopeBuilder scopeBuilder) { scopeBuilder = scopeBuilder.sub(); // new scope - Token f = tokens.get(); + Token f = tokens.current(); ParserUtil.checkType(f, Token.Type.NUMBER_VARIABLE, Token.Type.STRING_VARIABLE, Token.Type.BOOLEAN_VARIABLE, Token.Type.IDENTIFIER); - Item initializer; + Statement initializer; if(f.isVariableDeclaration()) { VariableAssignmentNode forVar = parseVariableDeclaration(tokens, scopeBuilder); - Token name = tokens.get(); + Token name = tokens.current(); if(functions.containsKey(name.getContent()) || scopeBuilder.contains(name.getContent())) throw new ParseException(name.getContent() + " is already defined in this scope", name.getPosition()); initializer = forVar; } else initializer = parseExpression(tokens, true, scopeBuilder); ParserUtil.checkType(tokens.consume(), Token.Type.STATEMENT_END); - Returnable conditional = parseExpression(tokens, true, scopeBuilder); - ParserUtil.checkReturnType(conditional, Returnable.ReturnType.BOOLEAN); + Expression conditional = parseExpression(tokens, true, scopeBuilder); + ParserUtil.checkReturnType(conditional, Expression.ReturnType.BOOLEAN); ParserUtil.checkType(tokens.consume(), Token.Type.STATEMENT_END); - Item incrementer; - Token token = tokens.get(); + Statement incrementer; + Token token = tokens.current(); if(scopeBuilder.contains(token.getContent())) { // Assume variable assignment incrementer = parseAssignment(tokens, scopeBuilder); } else incrementer = parseFunction(tokens, true, scopeBuilder); ParserUtil.checkType(tokens.consume(), Token.Type.GROUP_END); - return new ForKeyword(parseStatementBlock(tokens, true, scopeBuilder), initializer, (Returnable) conditional, incrementer, + return new ForKeyword(parseStatementBlock(tokens, true, scopeBuilder), initializer, (Expression) conditional, incrementer, start); } - private Returnable parseExpression(Tokenizer tokens, boolean full, ScopeBuilder scopeBuilder) { + private Expression parseExpression(Tokenizer tokens, boolean full, ScopeBuilder scopeBuilder) { boolean booleanInverted = false; // Check for boolean not operator boolean negate = false; - if(tokens.get().getType().equals(Token.Type.BOOLEAN_NOT)) { + if(tokens.current().getType().equals(Token.Type.BOOLEAN_NOT)) { booleanInverted = true; tokens.consume(); - } else if(tokens.get().getType().equals(Token.Type.SUBTRACTION_OPERATOR)) { + } else if(tokens.current().getType().equals(Token.Type.SUBTRACTION_OPERATOR)) { negate = true; tokens.consume(); } - Token id = tokens.get(); + Token id = tokens.current(); ParserUtil.checkType(id, Token.Type.IDENTIFIER, Token.Type.BOOLEAN, Token.Type.STRING, Token.Type.NUMBER, Token.Type.GROUP_BEGIN); - Returnable expression; + Expression expression; if(id.isConstant()) { expression = parseConstantExpression(tokens); } else if(id.getType().equals(Token.Type.GROUP_BEGIN)) { // Parse grouped expression @@ -230,14 +230,14 @@ public class Parser { } if(booleanInverted) { // Invert operation if boolean not detected - ParserUtil.checkReturnType(expression, Returnable.ReturnType.BOOLEAN); - expression = new BooleanNotOperation((Returnable) expression, expression.getPosition()); + ParserUtil.checkReturnType(expression, Expression.ReturnType.BOOLEAN); + expression = new BooleanNotOperation((Expression) expression, expression.getPosition()); } else if(negate) { - ParserUtil.checkReturnType(expression, Returnable.ReturnType.NUMBER); - expression = new NegationOperation((Returnable) expression, expression.getPosition()); + ParserUtil.checkReturnType(expression, Expression.ReturnType.NUMBER); + expression = new NegationOperation((Expression) expression, expression.getPosition()); } - if(full && tokens.get().isBinaryOperator()) { // Parse binary operations + if(full && tokens.current().isBinaryOperator()) { // Parse binary operations return parseBinaryOperation(expression, tokens, scopeBuilder); } return expression; @@ -245,7 +245,7 @@ public class Parser { private ConstantExpression parseConstantExpression(Tokenizer tokens) { Token constantToken = tokens.consume(); - Position position = constantToken.getPosition(); + SourcePosition position = constantToken.getPosition(); switch(constantToken.getType()) { case NUMBER: String content = constantToken.getContent(); @@ -260,21 +260,21 @@ public class Parser { } } - private Returnable parseGroup(Tokenizer tokens, ScopeBuilder scopeBuilder) { + private Expression parseGroup(Tokenizer tokens, ScopeBuilder scopeBuilder) { ParserUtil.checkType(tokens.consume(), Token.Type.GROUP_BEGIN); - Returnable expression = parseExpression(tokens, true, scopeBuilder); // Parse inside of group as a separate expression + Expression expression = parseExpression(tokens, true, scopeBuilder); // Parse inside of group as a separate expression ParserUtil.checkType(tokens.consume(), Token.Type.GROUP_END); return expression; } - private BinaryOperation parseBinaryOperation(Returnable left, Tokenizer tokens, + private BinaryOperation parseBinaryOperation(Expression left, Tokenizer tokens, ScopeBuilder scopeBuilder) { Token binaryOperator = tokens.consume(); ParserUtil.checkBinaryOperator(binaryOperator); - Returnable right = parseExpression(tokens, false, scopeBuilder); + Expression right = parseExpression(tokens, false, scopeBuilder); - Token other = tokens.get(); + Token other = tokens.current(); if(ParserUtil.hasPrecedence(binaryOperator.getType(), other.getType())) { return assemble(left, parseBinaryOperation(right, tokens, scopeBuilder), binaryOperator); } else if(other.isBinaryOperator()) { @@ -283,41 +283,41 @@ public class Parser { return assemble(left, right, binaryOperator); } - private BinaryOperation assemble(Returnable left, Returnable right, Token binaryOperator) { + private BinaryOperation assemble(Expression left, Expression right, Token binaryOperator) { if(binaryOperator.isStrictNumericOperator()) ParserUtil.checkArithmeticOperation(left, right, binaryOperator); // Numeric type checking if(binaryOperator.isStrictBooleanOperator()) ParserUtil.checkBooleanOperation(left, right, binaryOperator); // Boolean type checking switch(binaryOperator.getType()) { case ADDITION_OPERATOR: - if(left.returnType().equals(Returnable.ReturnType.NUMBER) && right.returnType().equals(Returnable.ReturnType.NUMBER)) { - return new NumberAdditionOperation((Returnable) left, (Returnable) right, binaryOperator.getPosition()); + if(left.returnType().equals(Expression.ReturnType.NUMBER) && right.returnType().equals(Expression.ReturnType.NUMBER)) { + return new NumberAdditionOperation((Expression) left, (Expression) right, binaryOperator.getPosition()); } - return new ConcatenationOperation((Returnable) left, (Returnable) right, binaryOperator.getPosition()); + return new ConcatenationOperation((Expression) left, (Expression) right, binaryOperator.getPosition()); case SUBTRACTION_OPERATOR: - return new SubtractionOperation((Returnable) left, (Returnable) right, binaryOperator.getPosition()); + return new SubtractionOperation((Expression) left, (Expression) right, binaryOperator.getPosition()); case MULTIPLICATION_OPERATOR: - return new MultiplicationOperation((Returnable) left, (Returnable) right, binaryOperator.getPosition()); + return new MultiplicationOperation((Expression) left, (Expression) right, binaryOperator.getPosition()); case DIVISION_OPERATOR: - return new DivisionOperation((Returnable) left, (Returnable) right, binaryOperator.getPosition()); + return new DivisionOperation((Expression) left, (Expression) right, binaryOperator.getPosition()); case EQUALS_OPERATOR: - return new EqualsStatement((Returnable) left, (Returnable) right, binaryOperator.getPosition()); + return new EqualsStatement((Expression) left, (Expression) right, binaryOperator.getPosition()); case NOT_EQUALS_OPERATOR: - return new NotEqualsStatement((Returnable) left, (Returnable) right, binaryOperator.getPosition()); + return new NotEqualsStatement((Expression) left, (Expression) right, binaryOperator.getPosition()); case GREATER_THAN_OPERATOR: - return new GreaterThanStatement((Returnable) left, (Returnable) right, binaryOperator.getPosition()); + return new GreaterThanStatement((Expression) left, (Expression) right, binaryOperator.getPosition()); case LESS_THAN_OPERATOR: - return new LessThanStatement((Returnable) left, (Returnable) right, binaryOperator.getPosition()); + return new LessThanStatement((Expression) left, (Expression) right, binaryOperator.getPosition()); case GREATER_THAN_OR_EQUALS_OPERATOR: - return new GreaterOrEqualsThanStatement((Returnable) left, (Returnable) right, + return new GreaterOrEqualsThanStatement((Expression) left, (Expression) right, binaryOperator.getPosition()); case LESS_THAN_OR_EQUALS_OPERATOR: - return new LessThanOrEqualsStatement((Returnable) left, (Returnable) right, binaryOperator.getPosition()); + return new LessThanOrEqualsStatement((Expression) left, (Expression) right, binaryOperator.getPosition()); case BOOLEAN_AND: - return new BooleanAndOperation((Returnable) left, (Returnable) right, binaryOperator.getPosition()); + return new BooleanAndOperation((Expression) left, (Expression) right, binaryOperator.getPosition()); case BOOLEAN_OR: - return new BooleanOrOperation((Returnable) left, (Returnable) right, binaryOperator.getPosition()); + return new BooleanOrOperation((Expression) left, (Expression) right, binaryOperator.getPosition()); case MODULO_OPERATOR: - return new ModuloOperation((Returnable) left, (Returnable) right, binaryOperator.getPosition()); + return new ModuloOperation((Expression) left, (Expression) right, binaryOperator.getPosition()); default: throw new UnsupportedOperationException("Unsupported binary operator: " + binaryOperator.getType()); } @@ -327,7 +327,7 @@ public class Parser { Token type = tokens.consume(); ParserUtil.checkType(type, Token.Type.STRING_VARIABLE, Token.Type.BOOLEAN_VARIABLE, Token.Type.NUMBER_VARIABLE); - Returnable.ReturnType returnType = ParserUtil.getVariableReturnType(type); + Expression.ReturnType returnType = ParserUtil.getVariableReturnType(type); ParserUtil.checkVarType(type, returnType); // Check for type mismatch Token identifier = tokens.consume(); @@ -336,40 +336,40 @@ public class Parser { throw new ParseException(identifier.getContent() + " is already defined in this scope", identifier.getPosition()); ParserUtil.checkType(tokens.consume(), Token.Type.ASSIGNMENT); - Returnable value = parseExpression(tokens, true, scopeBuilder); + Expression value = parseExpression(tokens, true, scopeBuilder); ParserUtil.checkReturnType(value, returnType); String id = identifier.getContent(); return switch(value.returnType()) { - case NUMBER -> new NumAssignmentNode((Returnable) value, identifier.getPosition(), scopeBuilder.num(id)); - case STRING -> new StrAssignmentNode((Returnable) value, identifier.getPosition(), scopeBuilder.str(id)); - case BOOLEAN -> new BoolAssignmentNode((Returnable) value, identifier.getPosition(), scopeBuilder.bool(id)); + case NUMBER -> new NumAssignmentNode((Expression) value, identifier.getPosition(), scopeBuilder.num(id)); + case STRING -> new StrAssignmentNode((Expression) value, identifier.getPosition(), scopeBuilder.str(id)); + case BOOLEAN -> new BoolAssignmentNode((Expression) value, identifier.getPosition(), scopeBuilder.bool(id)); default -> throw new ParseException("Illegal type for variable declaration: " + type, value.getPosition()); }; } private Block parseBlock(Tokenizer tokens, boolean loop, ScopeBuilder scopeBuilder) { - List> parsedItems = new ArrayList<>(); + List> statements = new ArrayList<>(); scopeBuilder = scopeBuilder.sub(); - Token first = tokens.get(); + Token first = tokens.current(); while(tokens.hasNext()) { - Token token = tokens.get(); + Token token = tokens.current(); if(token.getType().equals(Token.Type.BLOCK_END)) break; // Stop parsing at block end. - Item parsedItem = parseItem(tokens, loop, scopeBuilder); - if(parsedItem != Function.NULL) { - parsedItems.add(parsedItem); + Statement statement = parseStatement(tokens, loop, scopeBuilder); + if(statement != Function.NULL) { + statements.add(statement); } if(tokens.hasNext() && !token.isLoopLike()) ParserUtil.checkType(tokens.consume(), Token.Type.STATEMENT_END); } - return new Block(parsedItems, first.getPosition()); + return new Block(statements, first.getPosition()); } - private Item parseItem(Tokenizer tokens, boolean loop, ScopeBuilder scopeBuilder) { - Token token = tokens.get(); + private Statement parseStatement(Tokenizer tokens, boolean loop, ScopeBuilder scopeBuilder) { + Token token = tokens.current(); if(loop) ParserUtil.checkType(token, Token.Type.IDENTIFIER, Token.Type.IF_STATEMENT, Token.Type.WHILE_LOOP, Token.Type.FOR_LOOP, Token.Type.NUMBER_VARIABLE, Token.Type.STRING_VARIABLE, Token.Type.BOOLEAN_VARIABLE, Token.Type.RETURN, Token.Type.BREAK, Token.Type.CONTINUE, Token.Type.FAIL); @@ -384,9 +384,7 @@ public class Parser { return parseAssignment(tokens, scopeBuilder); } else return parseFunction(tokens, true, scopeBuilder); } else if(token.isVariableDeclaration()) { - return parseVariableDeclaration(tokens, scopeBuilder); - } else if(token.getType().equals(Token.Type.RETURN)) return new ReturnKeyword(tokens.consume().getPosition()); else if(token.getType().equals(Token.Type.BREAK)) return new BreakKeyword(tokens.consume().getPosition()); else if(token.getType().equals(Token.Type.CONTINUE)) return new ContinueKeyword(tokens.consume().getPosition()); @@ -401,7 +399,7 @@ public class Parser { ParserUtil.checkType(tokens.consume(), Token.Type.ASSIGNMENT); - Returnable value = parseExpression(tokens, true, scopeBuilder); + Expression value = parseExpression(tokens, true, scopeBuilder); String id = identifier.getContent(); @@ -410,9 +408,9 @@ public class Parser { ReturnType type = value.returnType(); return switch(type) { - case NUMBER -> new NumAssignmentNode((Returnable) value, identifier.getPosition(), scopeBuilder.getIndex(id)); - case STRING -> new StrAssignmentNode((Returnable) value, identifier.getPosition(), scopeBuilder.getIndex(id)); - case BOOLEAN -> new BoolAssignmentNode((Returnable) value, identifier.getPosition(), scopeBuilder.getIndex(id)); + case NUMBER -> new NumAssignmentNode((Expression) value, identifier.getPosition(), scopeBuilder.getIndex(id)); + case STRING -> new StrAssignmentNode((Expression) value, identifier.getPosition(), scopeBuilder.getIndex(id)); + case BOOLEAN -> new BoolAssignmentNode((Expression) value, identifier.getPosition(), scopeBuilder.getIndex(id)); default -> throw new ParseException("Illegal type for variable assignment: " + type, value.getPosition()); }; } @@ -427,11 +425,11 @@ public class Parser { ParserUtil.checkType(tokens.consume(), Token.Type.GROUP_BEGIN); // Second is body begin - List> args = getArgs(tokens, scopeBuilder); // Extract arguments, consume the rest. + List> args = getArgs(tokens, scopeBuilder); // Extract arguments, consume the rest. ParserUtil.checkType(tokens.consume(), Token.Type.GROUP_END); // Remove body end - if(fullStatement) ParserUtil.checkType(tokens.get(), Token.Type.STATEMENT_END); + if(fullStatement) ParserUtil.checkType(tokens.current(), Token.Type.STATEMENT_END); if(ignoredFunctions.contains(identifier.getContent())) { return Function.NULL; @@ -444,7 +442,7 @@ public class Parser { throw new ParseException("Expected " + builder.argNumber() + " arguments, found " + args.size(), identifier.getPosition()); for(int i = 0; i < args.size(); i++) { - Returnable argument = args.get(i); + Expression argument = args.get(i); if(builder.getArgument(i) == null) throw new ParseException("Unexpected argument at position " + i + " in function " + identifier.getContent(), identifier.getPosition()); @@ -455,13 +453,13 @@ public class Parser { throw new UnsupportedOperationException("Unsupported function: " + identifier.getContent()); } - private List> getArgs(Tokenizer tokens, ScopeBuilder scopeBuilder) { - List> args = new ArrayList<>(); + private List> getArgs(Tokenizer tokens, ScopeBuilder scopeBuilder) { + List> args = new ArrayList<>(); - while(!tokens.get().getType().equals(Token.Type.GROUP_END)) { + while(!tokens.current().getType().equals(Token.Type.GROUP_END)) { args.add(parseExpression(tokens, true, scopeBuilder)); - ParserUtil.checkType(tokens.get(), Token.Type.SEPARATOR, Token.Type.GROUP_END); - if(tokens.get().getType().equals(Token.Type.SEPARATOR)) tokens.consume(); + ParserUtil.checkType(tokens.current(), Token.Type.SEPARATOR, Token.Type.GROUP_END); + if(tokens.current().getType().equals(Token.Type.SEPARATOR)) tokens.consume(); } return args; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/ParserUtil.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/ParserUtil.java index 6a7f0c7bf..54513ede4 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/ParserUtil.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/ParserUtil.java @@ -13,7 +13,7 @@ import java.util.List; import java.util.Map; import com.dfsek.terra.addons.terrascript.parser.exceptions.ParseException; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.tokenizer.Token; @@ -56,31 +56,31 @@ public class ParserUtil { throw new ParseException("Expected " + Arrays.toString(expected) + " but found " + token.getType(), token.getPosition()); } - public static void checkReturnType(Returnable returnable, Returnable.ReturnType... types) { - for(Returnable.ReturnType type : types) if(returnable.returnType().equals(type)) return; + public static void checkReturnType(Expression returnable, Expression.ReturnType... types) { + for(Expression.ReturnType type : types) if(returnable.returnType().equals(type)) return; throw new ParseException("Expected " + Arrays.toString(types) + " but found " + returnable.returnType(), returnable.getPosition()); } - public static void checkArithmeticOperation(Returnable left, Returnable right, Token operation) { - if(!left.returnType().equals(Returnable.ReturnType.NUMBER) || !right.returnType().equals(Returnable.ReturnType.NUMBER)) { + public static void checkArithmeticOperation(Expression left, Expression right, Token operation) { + if(!left.returnType().equals(Expression.ReturnType.NUMBER) || !right.returnType().equals(Expression.ReturnType.NUMBER)) { throw new ParseException( "Operation " + operation.getType() + " not supported between " + left.returnType() + " and " + right.returnType(), operation.getPosition()); } } - public static void checkBooleanOperation(Returnable left, Returnable right, Token operation) { - if(!left.returnType().equals(Returnable.ReturnType.BOOLEAN) || !right.returnType().equals(Returnable.ReturnType.BOOLEAN)) { + public static void checkBooleanOperation(Expression left, Expression right, Token operation) { + if(!left.returnType().equals(Expression.ReturnType.BOOLEAN) || !right.returnType().equals(Expression.ReturnType.BOOLEAN)) { throw new ParseException( "Operation " + operation.getType() + " not supported between " + left.returnType() + " and " + right.returnType(), operation.getPosition()); } } - public static void checkVarType(Token token, Returnable.ReturnType returnType) { - if(returnType.equals(Returnable.ReturnType.STRING) && token.getType().equals(Token.Type.STRING_VARIABLE)) return; - if(returnType.equals(Returnable.ReturnType.NUMBER) && token.getType().equals(Token.Type.NUMBER_VARIABLE)) return; - if(returnType.equals(Returnable.ReturnType.BOOLEAN) && token.getType().equals(Token.Type.BOOLEAN_VARIABLE)) return; + public static void checkVarType(Token token, Expression.ReturnType returnType) { + if(returnType.equals(Expression.ReturnType.STRING) && token.getType().equals(Token.Type.STRING_VARIABLE)) return; + if(returnType.equals(Expression.ReturnType.NUMBER) && token.getType().equals(Token.Type.NUMBER_VARIABLE)) return; + if(returnType.equals(Expression.ReturnType.BOOLEAN) && token.getType().equals(Token.Type.BOOLEAN_VARIABLE)) return; throw new ParseException("Type mismatch, cannot convert from " + returnType + " to " + token.getType(), token.getPosition()); } @@ -96,11 +96,11 @@ public class ParserUtil { throw new ParseException("Expected binary operator, found " + token.getType(), token.getPosition()); } - public static Returnable.ReturnType getVariableReturnType(Token varToken) { + public static Expression.ReturnType getVariableReturnType(Token varToken) { return switch(varToken.getType()) { - case NUMBER_VARIABLE -> Returnable.ReturnType.NUMBER; - case STRING_VARIABLE -> Returnable.ReturnType.STRING; - case BOOLEAN_VARIABLE -> Returnable.ReturnType.BOOLEAN; + case NUMBER_VARIABLE -> Expression.ReturnType.NUMBER; + case STRING_VARIABLE -> Expression.ReturnType.STRING; + case BOOLEAN_VARIABLE -> Expression.ReturnType.BOOLEAN; default -> throw new ParseException("Unexpected token " + varToken.getType() + "; expected variable declaration", varToken.getPosition()); }; diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/exceptions/ParseException.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/exceptions/ParseException.java index 59fdb01ae..e1a7d9902 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/exceptions/ParseException.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/exceptions/ParseException.java @@ -9,20 +9,20 @@ package com.dfsek.terra.addons.terrascript.parser.exceptions; import java.io.Serial; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class ParseException extends RuntimeException { @Serial private static final long serialVersionUID = 6744390543046766386L; - private final Position position; + private final SourcePosition position; - public ParseException(String message, Position position) { + public ParseException(String message, SourcePosition position) { super(message); this.position = position; } - public ParseException(String message, Position position, Throwable cause) { + public ParseException(String message, SourcePosition position, Throwable cause) { super(message, cause); this.position = position; } @@ -32,7 +32,7 @@ public class ParseException extends RuntimeException { return super.getMessage() + ": " + position; } - public Position getPosition() { + public SourcePosition getPosition() { return position; } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Block.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Block.java index 65a8dbf7e..8e9e7831c 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Block.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Block.java @@ -9,22 +9,23 @@ package com.dfsek.terra.addons.terrascript.parser.lang; import java.util.List; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.parser.lang.Block.ReturnInfo; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; -public class Block implements Item> { - private final List> items; - private final Position position; +public class Block implements Statement> { + private final List> items; + private final SourcePosition position; - public Block(List> items, Position position) { + public Block(List> items, SourcePosition position) { this.items = items; this.position = position; } @Override - public ReturnInfo apply(ImplementationArguments implementationArguments, Scope scope) { - for(Item item : items) { - Object result = item.apply(implementationArguments, scope); + public ReturnInfo invoke(ImplementationArguments implementationArguments, Scope scope) { + for(Statement item : items) { + Object result = item.invoke(implementationArguments, scope); if(result instanceof ReturnInfo level) { if(!level.getLevel().equals(ReturnLevel.NONE)) return level; } @@ -33,7 +34,7 @@ public class Block implements Item> { } @Override - public Position getPosition() { + public SourcePosition getPosition() { return position; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Executable.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Executable.java index 6f9c026a0..176140c6d 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Executable.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Executable.java @@ -14,6 +14,6 @@ public class Executable { } public boolean execute(ImplementationArguments arguments) { - return script.apply(arguments, scope.get()).getLevel() != Block.ReturnLevel.FAIL; + return script.invoke(arguments, scope.get()).getLevel() != Block.ReturnLevel.FAIL; } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Returnable.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Expression.java similarity index 92% rename from common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Returnable.java rename to common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Expression.java index ac6578f4c..be4d7c837 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Returnable.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Expression.java @@ -7,7 +7,7 @@ package com.dfsek.terra.addons.terrascript.parser.lang; -public interface Returnable extends Item { +public interface Expression extends Statement { ReturnType returnType(); enum ReturnType { diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/ImplementationArguments.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/ImplementationArguments.java index a0f78aefb..b062641d8 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/ImplementationArguments.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/ImplementationArguments.java @@ -8,7 +8,7 @@ package com.dfsek.terra.addons.terrascript.parser.lang; /** - * Arguments passed to {@link Item}s by the implementation + * Arguments passed to {@link Statement}s by the implementation */ public interface ImplementationArguments { } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Item.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Item.java deleted file mode 100644 index 27947c291..000000000 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Item.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (c) 2020-2021 Polyhedral Development - * - * The Terra Core Addons are licensed under the terms of the MIT License. For more details, - * reference the LICENSE file in this module's root directory. - */ - -package com.dfsek.terra.addons.terrascript.parser.lang; - -import com.dfsek.terra.addons.terrascript.tokenizer.Position; - - -public interface Item { - T apply(ImplementationArguments implementationArguments, Scope scope); - - default double applyDouble(ImplementationArguments implementationArguments, Scope scope) { - throw new UnsupportedOperationException("Cannot apply " + this + " as double"); - } - - default boolean applyBoolean(ImplementationArguments implementationArguments, Scope scope) { - throw new UnsupportedOperationException("Cannot apply " + this + " as double"); - } - - Position getPosition(); -} diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Keyword.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Keyword.java index 56bb8bfd8..87306e1f0 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Keyword.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Keyword.java @@ -7,5 +7,5 @@ package com.dfsek.terra.addons.terrascript.parser.lang; -public interface Keyword extends Returnable { +public interface Keyword extends Expression { } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Scope.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Scope.java index 511c486bd..9c8e6aa81 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Scope.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Scope.java @@ -6,7 +6,7 @@ import net.jafama.FastMath; import java.util.HashMap; import java.util.Map; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable.ReturnType; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression.ReturnType; import com.dfsek.terra.api.util.generic.pair.Pair; diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Statement.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Statement.java index 14300e5fa..200666878 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Statement.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Statement.java @@ -7,5 +7,19 @@ package com.dfsek.terra.addons.terrascript.parser.lang; -public interface Statement extends Item { +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; + + +public interface Statement { + T invoke(ImplementationArguments implementationArguments, Scope scope); + + default double applyDouble(ImplementationArguments implementationArguments, Scope scope) { + throw new UnsupportedOperationException("Cannot apply " + this + " as double"); + } + + default boolean applyBoolean(ImplementationArguments implementationArguments, Scope scope) { + throw new UnsupportedOperationException("Cannot apply " + this + " as double"); + } + + SourcePosition getPosition(); } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/constants/BooleanConstant.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/constants/BooleanConstant.java index 3782344d1..adabeb05b 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/constants/BooleanConstant.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/constants/BooleanConstant.java @@ -9,13 +9,13 @@ package com.dfsek.terra.addons.terrascript.parser.lang.constants; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class BooleanConstant extends ConstantExpression { private final boolean constant; - public BooleanConstant(Boolean constant, Position position) { + public BooleanConstant(Boolean constant, SourcePosition position) { super(constant, position); this.constant = constant; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/constants/ConstantExpression.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/constants/ConstantExpression.java index dc783a628..f0eab50dd 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/constants/ConstantExpression.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/constants/ConstantExpression.java @@ -8,27 +8,27 @@ package com.dfsek.terra.addons.terrascript.parser.lang.constants; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; -public abstract class ConstantExpression implements Returnable { +public abstract class ConstantExpression implements Expression { private final T constant; - private final Position position; + private final SourcePosition position; - public ConstantExpression(T constant, Position position) { + public ConstantExpression(T constant, SourcePosition position) { this.constant = constant; this.position = position; } @Override - public T apply(ImplementationArguments implementationArguments, Scope scope) { + public T invoke(ImplementationArguments implementationArguments, Scope scope) { return constant; } @Override - public Position getPosition() { + public SourcePosition getPosition() { return position; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/constants/NumericConstant.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/constants/NumericConstant.java index 296b0c3e4..5548ebc6b 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/constants/NumericConstant.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/constants/NumericConstant.java @@ -8,15 +8,15 @@ package com.dfsek.terra.addons.terrascript.parser.lang.constants; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class NumericConstant extends ConstantExpression { private final double constant; - public NumericConstant(Number constant, Position position) { + public NumericConstant(Number constant, SourcePosition position) { super(constant, position); this.constant = constant.doubleValue(); } @@ -27,7 +27,7 @@ public class NumericConstant extends ConstantExpression { } @Override - public Returnable.ReturnType returnType() { - return Returnable.ReturnType.NUMBER; + public Expression.ReturnType returnType() { + return Expression.ReturnType.NUMBER; } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/constants/StringConstant.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/constants/StringConstant.java index 3e44bea10..d27f4977c 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/constants/StringConstant.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/constants/StringConstant.java @@ -7,17 +7,17 @@ package com.dfsek.terra.addons.terrascript.parser.lang.constants; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class StringConstant extends ConstantExpression { - public StringConstant(String constant, Position position) { + public StringConstant(String constant, SourcePosition position) { super(constant, position); } @Override - public Returnable.ReturnType returnType() { - return Returnable.ReturnType.STRING; + public Expression.ReturnType returnType() { + return Expression.ReturnType.STRING; } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/functions/Function.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/functions/Function.java index 9c1da1155..60fe482d4 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/functions/Function.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/functions/Function.java @@ -8,12 +8,12 @@ package com.dfsek.terra.addons.terrascript.parser.lang.functions; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; -public interface Function extends Returnable { +public interface Function extends Expression { Function NULL = new Function<>() { @Override public ReturnType returnType() { @@ -21,23 +21,23 @@ public interface Function extends Returnable { } @Override - public Object apply(ImplementationArguments implementationArguments, Scope scope) { + public Object invoke(ImplementationArguments implementationArguments, Scope scope) { return null; } @Override - public Position getPosition() { + public SourcePosition getPosition() { return null; } }; @Override default double applyDouble(ImplementationArguments implementationArguments, Scope scope) { - return ((Number) apply(implementationArguments, scope)).doubleValue(); + return ((Number) invoke(implementationArguments, scope)).doubleValue(); } @Override default boolean applyBoolean(ImplementationArguments implementationArguments, Scope scope) { - return (Boolean) apply(implementationArguments, scope); + return (Boolean) invoke(implementationArguments, scope); } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/functions/FunctionBuilder.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/functions/FunctionBuilder.java index d43121c6f..327ec7513 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/functions/FunctionBuilder.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/functions/FunctionBuilder.java @@ -9,14 +9,14 @@ package com.dfsek.terra.addons.terrascript.parser.lang.functions; import java.util.List; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public interface FunctionBuilder> { - T build(List> argumentList, Position position); + T build(List> argumentList, SourcePosition position); int argNumber(); - Returnable.ReturnType getArgument(int position); + Expression.ReturnType getArgument(int position); } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/flow/BreakKeyword.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/flow/BreakKeyword.java index b70b656ee..3ac27b9ed 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/flow/BreakKeyword.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/flow/BreakKeyword.java @@ -11,23 +11,23 @@ import com.dfsek.terra.addons.terrascript.parser.lang.Block; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; import com.dfsek.terra.addons.terrascript.parser.lang.Keyword; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class BreakKeyword implements Keyword> { - private final Position position; + private final SourcePosition position; - public BreakKeyword(Position position) { + public BreakKeyword(SourcePosition position) { this.position = position; } @Override - public Block.ReturnInfo apply(ImplementationArguments implementationArguments, Scope scope) { + public Block.ReturnInfo invoke(ImplementationArguments implementationArguments, Scope scope) { return new Block.ReturnInfo<>(Block.ReturnLevel.BREAK, null); } @Override - public Position getPosition() { + public SourcePosition getPosition() { return position; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/flow/ContinueKeyword.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/flow/ContinueKeyword.java index f7b03d3b4..1086311c7 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/flow/ContinueKeyword.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/flow/ContinueKeyword.java @@ -11,23 +11,23 @@ import com.dfsek.terra.addons.terrascript.parser.lang.Block; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; import com.dfsek.terra.addons.terrascript.parser.lang.Keyword; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class ContinueKeyword implements Keyword> { - private final Position position; + private final SourcePosition position; - public ContinueKeyword(Position position) { + public ContinueKeyword(SourcePosition position) { this.position = position; } @Override - public Block.ReturnInfo apply(ImplementationArguments implementationArguments, Scope scope) { + public Block.ReturnInfo invoke(ImplementationArguments implementationArguments, Scope scope) { return new Block.ReturnInfo<>(Block.ReturnLevel.CONTINUE, null); } @Override - public Position getPosition() { + public SourcePosition getPosition() { return position; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/flow/FailKeyword.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/flow/FailKeyword.java index 4f6a82f50..3bb5939b4 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/flow/FailKeyword.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/flow/FailKeyword.java @@ -11,23 +11,23 @@ import com.dfsek.terra.addons.terrascript.parser.lang.Block; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; import com.dfsek.terra.addons.terrascript.parser.lang.Keyword; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class FailKeyword implements Keyword> { - private final Position position; + private final SourcePosition position; - public FailKeyword(Position position) { + public FailKeyword(SourcePosition position) { this.position = position; } @Override - public Block.ReturnInfo apply(ImplementationArguments implementationArguments, Scope scope) { + public Block.ReturnInfo invoke(ImplementationArguments implementationArguments, Scope scope) { return new Block.ReturnInfo<>(Block.ReturnLevel.FAIL, null); } @Override - public Position getPosition() { + public SourcePosition getPosition() { return position; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/flow/ReturnKeyword.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/flow/ReturnKeyword.java index 997098af1..c40fa31c6 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/flow/ReturnKeyword.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/flow/ReturnKeyword.java @@ -11,23 +11,23 @@ import com.dfsek.terra.addons.terrascript.parser.lang.Block; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; import com.dfsek.terra.addons.terrascript.parser.lang.Keyword; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class ReturnKeyword implements Keyword> { - private final Position position; + private final SourcePosition position; - public ReturnKeyword(Position position) { + public ReturnKeyword(SourcePosition position) { this.position = position; } @Override - public Block.ReturnInfo apply(ImplementationArguments implementationArguments, Scope scope) { + public Block.ReturnInfo invoke(ImplementationArguments implementationArguments, Scope scope) { return new Block.ReturnInfo<>(Block.ReturnLevel.RETURN, null); } @Override - public Position getPosition() { + public SourcePosition getPosition() { return position; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/looplike/ForKeyword.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/looplike/ForKeyword.java index 49f874724..6e26143f9 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/looplike/ForKeyword.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/looplike/ForKeyword.java @@ -9,21 +9,21 @@ package com.dfsek.terra.addons.terrascript.parser.lang.keywords.looplike; import com.dfsek.terra.addons.terrascript.parser.lang.Block; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Item; +import com.dfsek.terra.addons.terrascript.parser.lang.Statement; import com.dfsek.terra.addons.terrascript.parser.lang.Keyword; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class ForKeyword implements Keyword> { private final Block conditional; - private final Item initializer; - private final Returnable statement; - private final Item incrementer; - private final Position position; + private final Statement initializer; + private final Expression statement; + private final Statement incrementer; + private final SourcePosition position; - public ForKeyword(Block conditional, Item initializer, Returnable statement, Item incrementer, Position position) { + public ForKeyword(Block conditional, Statement initializer, Expression statement, Statement incrementer, SourcePosition position) { this.conditional = conditional; this.initializer = initializer; this.statement = statement; @@ -32,11 +32,11 @@ public class ForKeyword implements Keyword> { } @Override - public Block.ReturnInfo apply(ImplementationArguments implementationArguments, Scope scope) { - for(initializer.apply(implementationArguments, scope); - statement.apply(implementationArguments, scope); - incrementer.apply(implementationArguments, scope)) { - Block.ReturnInfo level = conditional.apply(implementationArguments, scope); + public Block.ReturnInfo invoke(ImplementationArguments implementationArguments, Scope scope) { + for(initializer.invoke(implementationArguments, scope); + statement.invoke(implementationArguments, scope); + incrementer.invoke(implementationArguments, scope)) { + Block.ReturnInfo level = conditional.invoke(implementationArguments, scope); if(level.getLevel().equals(Block.ReturnLevel.BREAK)) break; if(level.getLevel().isReturnFast()) return level; } @@ -44,7 +44,7 @@ public class ForKeyword implements Keyword> { } @Override - public Position getPosition() { + public SourcePosition getPosition() { return position; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/looplike/IfKeyword.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/looplike/IfKeyword.java index f49cab112..62e034182 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/looplike/IfKeyword.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/looplike/IfKeyword.java @@ -14,21 +14,21 @@ import java.util.List; import com.dfsek.terra.addons.terrascript.parser.lang.Block; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; import com.dfsek.terra.addons.terrascript.parser.lang.Keyword; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; import com.dfsek.terra.api.util.generic.pair.Pair; public class IfKeyword implements Keyword> { private final Block conditional; - private final Returnable statement; - private final Position position; - private final List, Block>> elseIf; + private final Expression statement; + private final SourcePosition position; + private final List, Block>> elseIf; private final Block elseBlock; - public IfKeyword(Block conditional, Returnable statement, List, Block>> elseIf, - @Nullable Block elseBlock, Position position) { + public IfKeyword(Block conditional, Expression statement, List, Block>> elseIf, + @Nullable Block elseBlock, SourcePosition position) { this.conditional = conditional; this.statement = statement; this.position = position; @@ -37,21 +37,21 @@ public class IfKeyword implements Keyword> { } @Override - public Block.ReturnInfo apply(ImplementationArguments implementationArguments, Scope scope) { - if(statement.apply(implementationArguments, scope)) return conditional.apply(implementationArguments, scope); + public Block.ReturnInfo invoke(ImplementationArguments implementationArguments, Scope scope) { + if(statement.invoke(implementationArguments, scope)) return conditional.invoke(implementationArguments, scope); else { - for(Pair, Block> pair : elseIf) { - if(pair.getLeft().apply(implementationArguments, scope)) { - return pair.getRight().apply(implementationArguments, scope); + for(Pair, Block> pair : elseIf) { + if(pair.getLeft().invoke(implementationArguments, scope)) { + return pair.getRight().invoke(implementationArguments, scope); } } - if(elseBlock != null) return elseBlock.apply(implementationArguments, scope); + if(elseBlock != null) return elseBlock.invoke(implementationArguments, scope); } return new Block.ReturnInfo<>(Block.ReturnLevel.NONE, null); } @Override - public Position getPosition() { + public SourcePosition getPosition() { return position; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/looplike/WhileKeyword.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/looplike/WhileKeyword.java index d5126e7db..a88067d77 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/looplike/WhileKeyword.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/looplike/WhileKeyword.java @@ -10,26 +10,26 @@ package com.dfsek.terra.addons.terrascript.parser.lang.keywords.looplike; import com.dfsek.terra.addons.terrascript.parser.lang.Block; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; import com.dfsek.terra.addons.terrascript.parser.lang.Keyword; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class WhileKeyword implements Keyword> { private final Block conditional; - private final Returnable statement; - private final Position position; + private final Expression statement; + private final SourcePosition position; - public WhileKeyword(Block conditional, Returnable statement, Position position) { + public WhileKeyword(Block conditional, Expression statement, SourcePosition position) { this.conditional = conditional; this.statement = statement; this.position = position; } @Override - public Block.ReturnInfo apply(ImplementationArguments implementationArguments, Scope scope) { - while(statement.apply(implementationArguments, scope)) { - Block.ReturnInfo level = conditional.apply(implementationArguments, scope); + public Block.ReturnInfo invoke(ImplementationArguments implementationArguments, Scope scope) { + while(statement.invoke(implementationArguments, scope)) { + Block.ReturnInfo level = conditional.invoke(implementationArguments, scope); if(level.getLevel().equals(Block.ReturnLevel.BREAK)) break; if(level.getLevel().isReturnFast()) return level; } @@ -37,7 +37,7 @@ public class WhileKeyword implements Keyword> { } @Override - public Position getPosition() { + public SourcePosition getPosition() { return position; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/BinaryOperation.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/BinaryOperation.java index fdacebe4c..be897014c 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/BinaryOperation.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/BinaryOperation.java @@ -7,23 +7,23 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; -public abstract class BinaryOperation implements Returnable { - protected final Returnable left; - protected final Returnable right; - private final Position start; +public abstract class BinaryOperation implements Expression { + protected final Expression left; + protected final Expression right; + private final SourcePosition start; - public BinaryOperation(Returnable left, Returnable right, Position start) { + public BinaryOperation(Expression left, Expression right, SourcePosition start) { this.left = left; this.right = right; this.start = start; } @Override - public Position getPosition() { + public SourcePosition getPosition() { return start; } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/BooleanAndOperation.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/BooleanAndOperation.java index 94a08bbe6..fc0886c0d 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/BooleanAndOperation.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/BooleanAndOperation.java @@ -8,13 +8,13 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class BooleanAndOperation extends BinaryOperation { - public BooleanAndOperation(Returnable left, Returnable right, Position start) { + public BooleanAndOperation(Expression left, Expression right, SourcePosition start) { super(left, right, start); } @@ -24,7 +24,7 @@ public class BooleanAndOperation extends BinaryOperation { } @Override - public Boolean apply(ImplementationArguments implementationArguments, Scope scope) { + public Boolean invoke(ImplementationArguments implementationArguments, Scope scope) { return applyBoolean(implementationArguments, scope); } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/BooleanNotOperation.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/BooleanNotOperation.java index a65e00184..1f70d2b4c 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/BooleanNotOperation.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/BooleanNotOperation.java @@ -8,18 +8,18 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class BooleanNotOperation extends UnaryOperation { - public BooleanNotOperation(Returnable input, Position position) { + public BooleanNotOperation(Expression input, SourcePosition position) { super(input, position); } @Override - public Boolean apply(ImplementationArguments implementationArguments, Scope scope) { + public Boolean invoke(ImplementationArguments implementationArguments, Scope scope) { return applyBoolean(implementationArguments, scope); } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/BooleanOrOperation.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/BooleanOrOperation.java index 4722e175c..92225e9ca 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/BooleanOrOperation.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/BooleanOrOperation.java @@ -8,18 +8,18 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class BooleanOrOperation extends BinaryOperation { - public BooleanOrOperation(Returnable left, Returnable right, Position start) { + public BooleanOrOperation(Expression left, Expression right, SourcePosition start) { super(left, right, start); } @Override - public Boolean apply(ImplementationArguments implementationArguments, Scope scope) { + public Boolean invoke(ImplementationArguments implementationArguments, Scope scope) { return applyBoolean(implementationArguments, scope); } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/ConcatenationOperation.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/ConcatenationOperation.java index 1ff9d11b1..748e619a0 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/ConcatenationOperation.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/ConcatenationOperation.java @@ -8,13 +8,13 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class ConcatenationOperation extends BinaryOperation { - public ConcatenationOperation(Returnable left, Returnable right, Position position) { + public ConcatenationOperation(Expression left, Expression right, SourcePosition position) { super(left, right, position); } @@ -30,12 +30,12 @@ public class ConcatenationOperation extends BinaryOperation { } @Override - public Returnable.ReturnType returnType() { - return Returnable.ReturnType.STRING; + public Expression.ReturnType returnType() { + return Expression.ReturnType.STRING; } @Override - public Object apply(ImplementationArguments implementationArguments, Scope scope) { - return toString(left.apply(implementationArguments, scope)) + toString(right.apply(implementationArguments, scope)); + public Object invoke(ImplementationArguments implementationArguments, Scope scope) { + return toString(left.invoke(implementationArguments, scope)) + toString(right.invoke(implementationArguments, scope)); } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/DivisionOperation.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/DivisionOperation.java index 793012549..69b736418 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/DivisionOperation.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/DivisionOperation.java @@ -8,23 +8,23 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class DivisionOperation extends BinaryOperation { - public DivisionOperation(Returnable left, Returnable right, Position position) { + public DivisionOperation(Expression left, Expression right, SourcePosition position) { super(left, right, position); } @Override - public Returnable.ReturnType returnType() { - return Returnable.ReturnType.NUMBER; + public Expression.ReturnType returnType() { + return Expression.ReturnType.NUMBER; } @Override - public Number apply(ImplementationArguments implementationArguments, Scope scope) { + public Number invoke(ImplementationArguments implementationArguments, Scope scope) { return applyDouble(implementationArguments, scope); } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/ModuloOperation.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/ModuloOperation.java index b305f4c90..15397789f 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/ModuloOperation.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/ModuloOperation.java @@ -8,18 +8,18 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class ModuloOperation extends BinaryOperation { - public ModuloOperation(Returnable left, Returnable right, Position start) { + public ModuloOperation(Expression left, Expression right, SourcePosition start) { super(left, right, start); } @Override - public Number apply(ImplementationArguments implementationArguments, Scope scope) { + public Number invoke(ImplementationArguments implementationArguments, Scope scope) { return applyDouble(implementationArguments, scope); } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/MultiplicationOperation.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/MultiplicationOperation.java index 2a2cdbfe6..f535a60f4 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/MultiplicationOperation.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/MultiplicationOperation.java @@ -8,18 +8,18 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class MultiplicationOperation extends BinaryOperation { - public MultiplicationOperation(Returnable left, Returnable right, Position position) { + public MultiplicationOperation(Expression left, Expression right, SourcePosition position) { super(left, right, position); } @Override - public Number apply(ImplementationArguments implementationArguments, Scope scope) { + public Number invoke(ImplementationArguments implementationArguments, Scope scope) { return applyDouble(implementationArguments, scope); } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/NegationOperation.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/NegationOperation.java index 32d8f39b6..8ab2ac3bb 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/NegationOperation.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/NegationOperation.java @@ -8,13 +8,13 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class NegationOperation extends UnaryOperation { - public NegationOperation(Returnable input, Position position) { + public NegationOperation(Expression input, SourcePosition position) { super(input, position); } @@ -24,7 +24,7 @@ public class NegationOperation extends UnaryOperation { } @Override - public Number apply(ImplementationArguments implementationArguments, Scope scope) { + public Number invoke(ImplementationArguments implementationArguments, Scope scope) { return applyDouble(implementationArguments, scope); } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/NumberAdditionOperation.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/NumberAdditionOperation.java index 075a27619..f5a58cc3a 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/NumberAdditionOperation.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/NumberAdditionOperation.java @@ -8,18 +8,18 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class NumberAdditionOperation extends BinaryOperation { - public NumberAdditionOperation(Returnable left, Returnable right, Position position) { + public NumberAdditionOperation(Expression left, Expression right, SourcePosition position) { super(left, right, position); } @Override - public Number apply(ImplementationArguments implementationArguments, Scope scope) { + public Number invoke(ImplementationArguments implementationArguments, Scope scope) { return applyDouble(implementationArguments, scope); } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/SubtractionOperation.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/SubtractionOperation.java index 9a11c430f..6def5f080 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/SubtractionOperation.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/SubtractionOperation.java @@ -8,18 +8,18 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class SubtractionOperation extends BinaryOperation { - public SubtractionOperation(Returnable left, Returnable right, Position position) { + public SubtractionOperation(Expression left, Expression right, SourcePosition position) { super(left, right, position); } @Override - public Number apply(ImplementationArguments implementationArguments, Scope scope) { + public Number invoke(ImplementationArguments implementationArguments, Scope scope) { return applyDouble(implementationArguments, scope); } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/UnaryOperation.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/UnaryOperation.java index d83ab0ad2..a6c92f315 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/UnaryOperation.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/UnaryOperation.java @@ -7,21 +7,21 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; -public abstract class UnaryOperation implements Returnable { - protected final Returnable input; - private final Position position; +public abstract class UnaryOperation implements Expression { + protected final Expression input; + private final SourcePosition position; - public UnaryOperation(Returnable input, Position position) { + public UnaryOperation(Expression input, SourcePosition position) { this.input = input; this.position = position; } @Override - public Position getPosition() { + public SourcePosition getPosition() { return position; } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/EqualsStatement.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/EqualsStatement.java index f402e4862..0a34297b3 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/EqualsStatement.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/EqualsStatement.java @@ -10,35 +10,35 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations.statements; import net.jafama.FastMath; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.parser.lang.operations.BinaryOperation; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; import static com.dfsek.terra.api.util.MathUtil.EPSILON; public class EqualsStatement extends BinaryOperation { - public EqualsStatement(Returnable left, Returnable right, Position position) { + public EqualsStatement(Expression left, Expression right, SourcePosition position) { super(left, right, position); } @Override - public Returnable.ReturnType returnType() { - return Returnable.ReturnType.BOOLEAN; + public Expression.ReturnType returnType() { + return Expression.ReturnType.BOOLEAN; } @Override - public Boolean apply(ImplementationArguments implementationArguments, Scope scope) { + public Boolean invoke(ImplementationArguments implementationArguments, Scope scope) { return applyBoolean(implementationArguments, scope); } @Override public boolean applyBoolean(ImplementationArguments implementationArguments, Scope scope) { - Object leftValue = left.apply(implementationArguments, scope); - Object rightValue = right.apply(implementationArguments, scope); + Object leftValue = left.invoke(implementationArguments, scope); + Object rightValue = right.invoke(implementationArguments, scope); if(leftValue instanceof Number l && rightValue instanceof Number r) { return FastMath.abs(l.doubleValue() - r.doubleValue()) <= EPSILON; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/GreaterOrEqualsThanStatement.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/GreaterOrEqualsThanStatement.java index d25f6bd0d..6e89467f1 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/GreaterOrEqualsThanStatement.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/GreaterOrEqualsThanStatement.java @@ -8,24 +8,24 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations.statements; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.parser.lang.operations.BinaryOperation; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class GreaterOrEqualsThanStatement extends BinaryOperation { - public GreaterOrEqualsThanStatement(Returnable left, Returnable right, Position position) { + public GreaterOrEqualsThanStatement(Expression left, Expression right, SourcePosition position) { super(left, right, position); } @Override - public Returnable.ReturnType returnType() { - return Returnable.ReturnType.BOOLEAN; + public Expression.ReturnType returnType() { + return Expression.ReturnType.BOOLEAN; } @Override - public Boolean apply(ImplementationArguments implementationArguments, Scope scope) { + public Boolean invoke(ImplementationArguments implementationArguments, Scope scope) { return applyBoolean(implementationArguments, scope); } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/GreaterThanStatement.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/GreaterThanStatement.java index 8e5cc4aee..16986b033 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/GreaterThanStatement.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/GreaterThanStatement.java @@ -8,20 +8,20 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations.statements; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.parser.lang.operations.BinaryOperation; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class GreaterThanStatement extends BinaryOperation { - public GreaterThanStatement(Returnable left, Returnable right, Position position) { + public GreaterThanStatement(Expression left, Expression right, SourcePosition position) { super(left, right, position); } @Override - public Boolean apply(ImplementationArguments implementationArguments, Scope scope) { + public Boolean invoke(ImplementationArguments implementationArguments, Scope scope) { return applyBoolean(implementationArguments, scope); } @@ -31,7 +31,7 @@ public class GreaterThanStatement extends BinaryOperation { } @Override - public Returnable.ReturnType returnType() { - return Returnable.ReturnType.BOOLEAN; + public Expression.ReturnType returnType() { + return Expression.ReturnType.BOOLEAN; } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/LessThanOrEqualsStatement.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/LessThanOrEqualsStatement.java index 891210395..26007fc1b 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/LessThanOrEqualsStatement.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/LessThanOrEqualsStatement.java @@ -8,20 +8,20 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations.statements; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.parser.lang.operations.BinaryOperation; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class LessThanOrEqualsStatement extends BinaryOperation { - public LessThanOrEqualsStatement(Returnable left, Returnable right, Position position) { + public LessThanOrEqualsStatement(Expression left, Expression right, SourcePosition position) { super(left, right, position); } @Override - public Boolean apply(ImplementationArguments implementationArguments, Scope scope) { + public Boolean invoke(ImplementationArguments implementationArguments, Scope scope) { return applyBoolean(implementationArguments, scope); } @@ -31,7 +31,7 @@ public class LessThanOrEqualsStatement extends BinaryOperation } @Override - public Returnable.ReturnType returnType() { - return Returnable.ReturnType.BOOLEAN; + public Expression.ReturnType returnType() { + return Expression.ReturnType.BOOLEAN; } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/LessThanStatement.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/LessThanStatement.java index 969f0e27e..db2eaa04d 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/LessThanStatement.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/LessThanStatement.java @@ -8,20 +8,20 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations.statements; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.parser.lang.operations.BinaryOperation; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class LessThanStatement extends BinaryOperation { - public LessThanStatement(Returnable left, Returnable right, Position position) { + public LessThanStatement(Expression left, Expression right, SourcePosition position) { super(left, right, position); } @Override - public Boolean apply(ImplementationArguments implementationArguments, Scope scope) { + public Boolean invoke(ImplementationArguments implementationArguments, Scope scope) { return applyBoolean(implementationArguments, scope); } @@ -31,7 +31,7 @@ public class LessThanStatement extends BinaryOperation { } @Override - public Returnable.ReturnType returnType() { - return Returnable.ReturnType.BOOLEAN; + public Expression.ReturnType returnType() { + return Expression.ReturnType.BOOLEAN; } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/NotEqualsStatement.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/NotEqualsStatement.java index 3241c8657..09e4c08cf 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/NotEqualsStatement.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/NotEqualsStatement.java @@ -10,28 +10,28 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations.statements; import net.jafama.FastMath; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.parser.lang.operations.BinaryOperation; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; import static com.dfsek.terra.api.util.MathUtil.EPSILON; public class NotEqualsStatement extends BinaryOperation { - public NotEqualsStatement(Returnable left, Returnable right, Position position) { + public NotEqualsStatement(Expression left, Expression right, SourcePosition position) { super(left, right, position); } @Override - public Boolean apply(ImplementationArguments implementationArguments, Scope scope) { + public Boolean invoke(ImplementationArguments implementationArguments, Scope scope) { return applyBoolean(implementationArguments, scope); } @Override public boolean applyBoolean(ImplementationArguments implementationArguments, Scope scope) { - Object leftValue = left.apply(implementationArguments, scope); - Object rightValue = right.apply(implementationArguments, scope); + Object leftValue = left.invoke(implementationArguments, scope); + Object rightValue = right.invoke(implementationArguments, scope); if(leftValue instanceof Number l && rightValue instanceof Number r) { return FastMath.abs(l.doubleValue() - r.doubleValue()) > EPSILON; } @@ -40,7 +40,7 @@ public class NotEqualsStatement extends BinaryOperation { } @Override - public Returnable.ReturnType returnType() { - return Returnable.ReturnType.BOOLEAN; + public Expression.ReturnType returnType() { + return Expression.ReturnType.BOOLEAN; } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/BooleanVariable.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/BooleanVariable.java index 205c99e6f..2c7fe1dfe 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/BooleanVariable.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/BooleanVariable.java @@ -7,15 +7,15 @@ package com.dfsek.terra.addons.terrascript.parser.lang.variables; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class BooleanVariable implements Variable { - private final Position position; + private final SourcePosition position; private Boolean value; - public BooleanVariable(Boolean value, Position position) { + public BooleanVariable(Boolean value, SourcePosition position) { this.value = value; this.position = position; } @@ -31,12 +31,12 @@ public class BooleanVariable implements Variable { } @Override - public Returnable.ReturnType getType() { - return Returnable.ReturnType.BOOLEAN; + public Expression.ReturnType getType() { + return Expression.ReturnType.BOOLEAN; } @Override - public Position getPosition() { + public SourcePosition getPosition() { return position; } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/NumberVariable.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/NumberVariable.java index 698afdd4d..1e0c8f30d 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/NumberVariable.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/NumberVariable.java @@ -7,15 +7,15 @@ package com.dfsek.terra.addons.terrascript.parser.lang.variables; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class NumberVariable implements Variable { - private final Position position; + private final SourcePosition position; private Number value; - public NumberVariable(Number value, Position position) { + public NumberVariable(Number value, SourcePosition position) { this.value = value; this.position = position; } @@ -31,12 +31,12 @@ public class NumberVariable implements Variable { } @Override - public Returnable.ReturnType getType() { - return Returnable.ReturnType.NUMBER; + public Expression.ReturnType getType() { + return Expression.ReturnType.NUMBER; } @Override - public Position getPosition() { + public SourcePosition getPosition() { return position; } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/StringVariable.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/StringVariable.java index 3ed471cd6..fcafa08cc 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/StringVariable.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/StringVariable.java @@ -7,15 +7,15 @@ package com.dfsek.terra.addons.terrascript.parser.lang.variables; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class StringVariable implements Variable { - private final Position position; + private final SourcePosition position; private String value; - public StringVariable(String value, Position position) { + public StringVariable(String value, SourcePosition position) { this.value = value; this.position = position; } @@ -31,12 +31,12 @@ public class StringVariable implements Variable { } @Override - public Returnable.ReturnType getType() { - return Returnable.ReturnType.STRING; + public Expression.ReturnType getType() { + return Expression.ReturnType.STRING; } @Override - public Position getPosition() { + public SourcePosition getPosition() { return position; } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/Variable.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/Variable.java index 4bf0d6752..53844ed5b 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/Variable.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/Variable.java @@ -7,8 +7,8 @@ package com.dfsek.terra.addons.terrascript.parser.lang.variables; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public interface Variable { @@ -16,7 +16,7 @@ public interface Variable { void setValue(T value); - Returnable.ReturnType getType(); + Expression.ReturnType getType(); - Position getPosition(); + SourcePosition getPosition(); } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/assign/BoolAssignmentNode.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/assign/BoolAssignmentNode.java index 8f0f47ee9..8cc4c608d 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/assign/BoolAssignmentNode.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/assign/BoolAssignmentNode.java @@ -1,18 +1,18 @@ package com.dfsek.terra.addons.terrascript.parser.lang.variables.assign; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class BoolAssignmentNode extends VariableAssignmentNode { - public BoolAssignmentNode(Returnable value, Position position, int index) { + public BoolAssignmentNode(Expression value, SourcePosition position, int index) { super(value, position, index); } @Override - public Boolean apply(ImplementationArguments implementationArguments, Scope scope) { + public Boolean invoke(ImplementationArguments implementationArguments, Scope scope) { return applyBoolean(implementationArguments, scope); } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/assign/NumAssignmentNode.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/assign/NumAssignmentNode.java index 1b67e7150..2f464ad0d 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/assign/NumAssignmentNode.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/assign/NumAssignmentNode.java @@ -1,18 +1,18 @@ package com.dfsek.terra.addons.terrascript.parser.lang.variables.assign; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class NumAssignmentNode extends VariableAssignmentNode { - public NumAssignmentNode(Returnable value, Position position, int index) { + public NumAssignmentNode(Expression value, SourcePosition position, int index) { super(value, position, index); } @Override - public Number apply(ImplementationArguments implementationArguments, Scope scope) { + public Number invoke(ImplementationArguments implementationArguments, Scope scope) { return applyDouble(implementationArguments, scope); } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/assign/StrAssignmentNode.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/assign/StrAssignmentNode.java index ee811dbd8..bad4029c7 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/assign/StrAssignmentNode.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/assign/StrAssignmentNode.java @@ -1,19 +1,19 @@ package com.dfsek.terra.addons.terrascript.parser.lang.variables.assign; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class StrAssignmentNode extends VariableAssignmentNode { - public StrAssignmentNode(Returnable value, Position position, int index) { + public StrAssignmentNode(Expression value, SourcePosition position, int index) { super(value, position, index); } @Override - public String apply(ImplementationArguments implementationArguments, Scope scope) { - String val = value.apply(implementationArguments, scope); + public String invoke(ImplementationArguments implementationArguments, Scope scope) { + String val = value.invoke(implementationArguments, scope); scope.setStr(index, val); return val; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/assign/VariableAssignmentNode.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/assign/VariableAssignmentNode.java index ebca757b5..4d6f0692d 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/assign/VariableAssignmentNode.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/assign/VariableAssignmentNode.java @@ -7,25 +7,25 @@ package com.dfsek.terra.addons.terrascript.parser.lang.variables.assign; -import com.dfsek.terra.addons.terrascript.parser.lang.Item; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.parser.lang.Statement; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; -public abstract class VariableAssignmentNode implements Item { - protected final Returnable value; +public abstract class VariableAssignmentNode implements Statement { + protected final Expression value; protected final int index; - private final Position position; + private final SourcePosition position; - public VariableAssignmentNode(Returnable value, Position position, int index) { + public VariableAssignmentNode(Expression value, SourcePosition position, int index) { this.value = value; this.index = index; this.position = position; } @Override - public Position getPosition() { + public SourcePosition getPosition() { return position; } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/reference/BoolVariableReferenceNode.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/reference/BoolVariableReferenceNode.java index c2295f2e2..859847c6e 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/reference/BoolVariableReferenceNode.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/reference/BoolVariableReferenceNode.java @@ -2,16 +2,16 @@ package com.dfsek.terra.addons.terrascript.parser.lang.variables.reference; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class BoolVariableReferenceNode extends VariableReferenceNode { - public BoolVariableReferenceNode(Position position, ReturnType type, int index) { + public BoolVariableReferenceNode(SourcePosition position, ReturnType type, int index) { super(position, type, index); } @Override - public Boolean apply(ImplementationArguments implementationArguments, Scope scope) { + public Boolean invoke(ImplementationArguments implementationArguments, Scope scope) { return scope.getBool(index); } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/reference/NumVariableReferenceNode.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/reference/NumVariableReferenceNode.java index a266dcca9..5a438e447 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/reference/NumVariableReferenceNode.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/reference/NumVariableReferenceNode.java @@ -2,16 +2,16 @@ package com.dfsek.terra.addons.terrascript.parser.lang.variables.reference; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class NumVariableReferenceNode extends VariableReferenceNode { - public NumVariableReferenceNode(Position position, ReturnType type, int index) { + public NumVariableReferenceNode(SourcePosition position, ReturnType type, int index) { super(position, type, index); } @Override - public Number apply(ImplementationArguments implementationArguments, Scope scope) { + public Number invoke(ImplementationArguments implementationArguments, Scope scope) { return scope.getNum(index); } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/reference/StrVariableReferenceNode.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/reference/StrVariableReferenceNode.java index d67acc557..7fa4d2477 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/reference/StrVariableReferenceNode.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/reference/StrVariableReferenceNode.java @@ -2,16 +2,16 @@ package com.dfsek.terra.addons.terrascript.parser.lang.variables.reference; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class StrVariableReferenceNode extends VariableReferenceNode { - public StrVariableReferenceNode(Position position, ReturnType type, int index) { + public StrVariableReferenceNode(SourcePosition position, ReturnType type, int index) { super(position, type, index); } @Override - public String apply(ImplementationArguments implementationArguments, Scope scope) { + public String invoke(ImplementationArguments implementationArguments, Scope scope) { return scope.getStr(index); } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/reference/VariableReferenceNode.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/reference/VariableReferenceNode.java index ecfebedca..de5b919e5 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/reference/VariableReferenceNode.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/reference/VariableReferenceNode.java @@ -7,16 +7,16 @@ package com.dfsek.terra.addons.terrascript.parser.lang.variables.reference; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; -public abstract class VariableReferenceNode implements Returnable { +public abstract class VariableReferenceNode implements Expression { protected final int index; - private final Position position; + private final SourcePosition position; private final ReturnType type; - public VariableReferenceNode(Position position, ReturnType type, int index) { + public VariableReferenceNode(SourcePosition position, ReturnType type, int index) { this.position = position; this.type = type; this.index = index; @@ -28,7 +28,7 @@ public abstract class VariableReferenceNode implements Returnable { } @Override - public Position getPosition() { + public SourcePosition getPosition() { return position; } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/StructureScript.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/StructureScript.java index e865d0d6d..5ed630598 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/StructureScript.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/StructureScript.java @@ -19,7 +19,7 @@ import java.util.Random; import com.dfsek.terra.addons.terrascript.parser.Parser; import com.dfsek.terra.addons.terrascript.parser.lang.Executable; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.functions.FunctionBuilder; import com.dfsek.terra.addons.terrascript.script.builders.BinaryNumberFunctionBuilder; import com.dfsek.terra.addons.terrascript.script.builders.BiomeFunctionBuilder; @@ -58,12 +58,12 @@ public class StructureScript implements Structure, Keyed { private final Platform platform; @SuppressWarnings("rawtypes") - public StructureScript(InputStream inputStream, RegistryKey id, Platform platform, Registry registry, + public StructureScript(InputStream source, RegistryKey id, Platform platform, Registry structureRegistry, Registry lootRegistry, Registry functionRegistry) { Parser parser; try { - parser = new Parser(IOUtils.toString(inputStream, Charset.defaultCharset())); + parser = new Parser(IOUtils.toString(source, Charset.defaultCharset())); } catch(IOException e) { throw new RuntimeException(e); } @@ -76,7 +76,7 @@ public class StructureScript implements Structure, Keyed { parser .registerFunction("block", new BlockFunctionBuilder(platform)) .registerFunction("debugBlock", new BlockFunctionBuilder(platform)) - .registerFunction("structure", new StructureFunctionBuilder(registry, platform)) + .registerFunction("structure", new StructureFunctionBuilder(structureRegistry, platform)) .registerFunction("randomInt", new RandomFunctionBuilder()) .registerFunction("recursions", new RecursionsFunctionBuilder()) .registerFunction("setMark", new SetMarkFunctionBuilder()) @@ -89,15 +89,15 @@ public class StructureScript implements Structure, Keyed { .registerFunction("state", new StateFunctionBuilder(platform)) .registerFunction("setWaterlog", new UnaryBooleanFunctionBuilder((waterlog, args) -> args.setWaterlog(waterlog))) .registerFunction("originX", new ZeroArgFunctionBuilder(arguments -> arguments.getOrigin().getX(), - Returnable.ReturnType.NUMBER)) + Expression.ReturnType.NUMBER)) .registerFunction("originY", new ZeroArgFunctionBuilder(arguments -> arguments.getOrigin().getY(), - Returnable.ReturnType.NUMBER)) + Expression.ReturnType.NUMBER)) .registerFunction("originZ", new ZeroArgFunctionBuilder(arguments -> arguments.getOrigin().getZ(), - Returnable.ReturnType.NUMBER)) + Expression.ReturnType.NUMBER)) .registerFunction("rotation", new ZeroArgFunctionBuilder<>(arguments -> arguments.getRotation().toString(), - Returnable.ReturnType.STRING)) + Expression.ReturnType.STRING)) .registerFunction("rotationDegrees", new ZeroArgFunctionBuilder<>(arguments -> arguments.getRotation().getDegrees(), - Returnable.ReturnType.NUMBER)) + Expression.ReturnType.NUMBER)) .registerFunction("print", new UnaryStringFunctionBuilder(string -> LOGGER.info("[TerraScript:{}] {}", id, string))) .registerFunction("abs", new UnaryNumberFunctionBuilder(number -> FastMath.abs(number.doubleValue()))) diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/BinaryNumberFunctionBuilder.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/BinaryNumberFunctionBuilder.java index 0e55e4d3d..d42217950 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/BinaryNumberFunctionBuilder.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/BinaryNumberFunctionBuilder.java @@ -11,11 +11,11 @@ import java.util.List; import java.util.function.BiFunction; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.parser.lang.functions.Function; import com.dfsek.terra.addons.terrascript.parser.lang.functions.FunctionBuilder; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class BinaryNumberFunctionBuilder implements FunctionBuilder> { @@ -27,7 +27,7 @@ public class BinaryNumberFunctionBuilder implements FunctionBuilder build(List> argumentList, Position position) { + public Function build(List> argumentList, SourcePosition position) { return new Function<>() { @Override public ReturnType returnType() { @@ -36,13 +36,13 @@ public class BinaryNumberFunctionBuilder implements FunctionBuilder) argumentList.get(0)).apply(implementationArguments, scope), - ((Returnable) argumentList.get(1)).apply(implementationArguments, scope)); + public Number invoke(ImplementationArguments implementationArguments, Scope scope) { + return function.apply(((Expression) argumentList.get(0)).invoke(implementationArguments, scope), + ((Expression) argumentList.get(1)).invoke(implementationArguments, scope)); } @Override - public Position getPosition() { + public SourcePosition getPosition() { return position; } }; @@ -54,8 +54,8 @@ public class BinaryNumberFunctionBuilder implements FunctionBuilder { @SuppressWarnings("unchecked") @Override - public BiomeFunction build(List> argumentList, Position position) { - return new BiomeFunction((Returnable) argumentList.get(0), (Returnable) argumentList.get(1), - (Returnable) argumentList.get(2), position); + public BiomeFunction build(List> argumentList, SourcePosition position) { + return new BiomeFunction((Expression) argumentList.get(0), (Expression) argumentList.get(1), + (Expression) argumentList.get(2), position); } @Override @@ -36,9 +36,9 @@ public class BiomeFunctionBuilder implements FunctionBuilder { } @Override - public Returnable.ReturnType getArgument(int position) { + public Expression.ReturnType getArgument(int position) { return switch(position) { - case 0, 1, 2 -> Returnable.ReturnType.NUMBER; + case 0, 1, 2 -> Expression.ReturnType.NUMBER; default -> null; }; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/BlockFunctionBuilder.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/BlockFunctionBuilder.java index daa001ca9..834cab341 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/BlockFunctionBuilder.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/BlockFunctionBuilder.java @@ -10,12 +10,12 @@ package com.dfsek.terra.addons.terrascript.script.builders; import java.util.List; import com.dfsek.terra.addons.terrascript.parser.exceptions.ParseException; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.constants.BooleanConstant; import com.dfsek.terra.addons.terrascript.parser.lang.constants.StringConstant; import com.dfsek.terra.addons.terrascript.parser.lang.functions.FunctionBuilder; import com.dfsek.terra.addons.terrascript.script.functions.BlockFunction; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; import com.dfsek.terra.api.Platform; @@ -28,17 +28,17 @@ public class BlockFunctionBuilder implements FunctionBuilder { @SuppressWarnings("unchecked") @Override - public BlockFunction build(List> argumentList, Position position) { + public BlockFunction build(List> argumentList, SourcePosition position) { if(argumentList.size() < 4) throw new ParseException("Expected data", position); - Returnable booleanReturnable = new BooleanConstant(true, position); - if(argumentList.size() == 5) booleanReturnable = (Returnable) argumentList.get(4); + Expression booleanReturnable = new BooleanConstant(true, position); + if(argumentList.size() == 5) booleanReturnable = (Expression) argumentList.get(4); if(argumentList.get(3) instanceof StringConstant) { - return new BlockFunction.Constant((Returnable) argumentList.get(0), (Returnable) argumentList.get(1), - (Returnable) argumentList.get(2), (StringConstant) argumentList.get(3), + return new BlockFunction.Constant((Expression) argumentList.get(0), (Expression) argumentList.get(1), + (Expression) argumentList.get(2), (StringConstant) argumentList.get(3), booleanReturnable, platform, position); } - return new BlockFunction((Returnable) argumentList.get(0), (Returnable) argumentList.get(1), - (Returnable) argumentList.get(2), (Returnable) argumentList.get(3), booleanReturnable, + return new BlockFunction((Expression) argumentList.get(0), (Expression) argumentList.get(1), + (Expression) argumentList.get(2), (Expression) argumentList.get(3), booleanReturnable, platform, position); } @@ -48,11 +48,11 @@ public class BlockFunctionBuilder implements FunctionBuilder { } @Override - public Returnable.ReturnType getArgument(int position) { + public Expression.ReturnType getArgument(int position) { return switch(position) { - case 0, 1, 2 -> Returnable.ReturnType.NUMBER; - case 3 -> Returnable.ReturnType.STRING; - case 4 -> Returnable.ReturnType.BOOLEAN; + case 0, 1, 2 -> Expression.ReturnType.NUMBER; + case 3 -> Expression.ReturnType.STRING; + case 4 -> Expression.ReturnType.BOOLEAN; default -> null; }; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/CheckBlockFunctionBuilder.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/CheckBlockFunctionBuilder.java index 2e32cf363..7a28ca5da 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/CheckBlockFunctionBuilder.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/CheckBlockFunctionBuilder.java @@ -9,18 +9,18 @@ package com.dfsek.terra.addons.terrascript.script.builders; import java.util.List; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.functions.FunctionBuilder; import com.dfsek.terra.addons.terrascript.script.functions.CheckBlockFunction; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class CheckBlockFunctionBuilder implements FunctionBuilder { @SuppressWarnings("unchecked") @Override - public CheckBlockFunction build(List> argumentList, Position position) { - return new CheckBlockFunction((Returnable) argumentList.get(0), (Returnable) argumentList.get(1), - (Returnable) argumentList.get(2), position); + public CheckBlockFunction build(List> argumentList, SourcePosition position) { + return new CheckBlockFunction((Expression) argumentList.get(0), (Expression) argumentList.get(1), + (Expression) argumentList.get(2), position); } @Override @@ -29,9 +29,9 @@ public class CheckBlockFunctionBuilder implements FunctionBuilder Returnable.ReturnType.NUMBER; + case 0, 1, 2 -> Expression.ReturnType.NUMBER; default -> null; }; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/EntityFunctionBuilder.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/EntityFunctionBuilder.java index 305105180..3d81d7e52 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/EntityFunctionBuilder.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/EntityFunctionBuilder.java @@ -9,10 +9,10 @@ package com.dfsek.terra.addons.terrascript.script.builders; import java.util.List; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.functions.FunctionBuilder; import com.dfsek.terra.addons.terrascript.script.functions.EntityFunction; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; import com.dfsek.terra.api.Platform; @@ -25,9 +25,9 @@ public class EntityFunctionBuilder implements FunctionBuilder { @SuppressWarnings("unchecked") @Override - public EntityFunction build(List> argumentList, Position position) { - return new EntityFunction((Returnable) argumentList.get(0), (Returnable) argumentList.get(1), - (Returnable) argumentList.get(2), (Returnable) argumentList.get(3), platform, position); + public EntityFunction build(List> argumentList, SourcePosition position) { + return new EntityFunction((Expression) argumentList.get(0), (Expression) argumentList.get(1), + (Expression) argumentList.get(2), (Expression) argumentList.get(3), platform, position); } @Override @@ -36,10 +36,10 @@ public class EntityFunctionBuilder implements FunctionBuilder { } @Override - public Returnable.ReturnType getArgument(int position) { + public Expression.ReturnType getArgument(int position) { return switch(position) { - case 0, 1, 2 -> Returnable.ReturnType.NUMBER; - case 3 -> Returnable.ReturnType.STRING; + case 0, 1, 2 -> Expression.ReturnType.NUMBER; + case 3 -> Expression.ReturnType.STRING; default -> null; }; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/GetMarkFunctionBuilder.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/GetMarkFunctionBuilder.java index c38c406d4..54dffc9bc 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/GetMarkFunctionBuilder.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/GetMarkFunctionBuilder.java @@ -9,10 +9,10 @@ package com.dfsek.terra.addons.terrascript.script.builders; import java.util.List; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.functions.FunctionBuilder; import com.dfsek.terra.addons.terrascript.script.functions.GetMarkFunction; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class GetMarkFunctionBuilder implements FunctionBuilder { @@ -22,9 +22,9 @@ public class GetMarkFunctionBuilder implements FunctionBuilder @SuppressWarnings("unchecked") @Override - public GetMarkFunction build(List> argumentList, Position position) { - return new GetMarkFunction((Returnable) argumentList.get(0), (Returnable) argumentList.get(1), - (Returnable) argumentList.get(2), position); + public GetMarkFunction build(List> argumentList, SourcePosition position) { + return new GetMarkFunction((Expression) argumentList.get(0), (Expression) argumentList.get(1), + (Expression) argumentList.get(2), position); } @Override @@ -33,9 +33,9 @@ public class GetMarkFunctionBuilder implements FunctionBuilder } @Override - public Returnable.ReturnType getArgument(int position) { + public Expression.ReturnType getArgument(int position) { return switch(position) { - case 0, 1, 2 -> Returnable.ReturnType.NUMBER; + case 0, 1, 2 -> Expression.ReturnType.NUMBER; default -> null; }; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/LootFunctionBuilder.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/LootFunctionBuilder.java index 293b5278c..dbc0a0ac5 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/LootFunctionBuilder.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/LootFunctionBuilder.java @@ -9,11 +9,11 @@ package com.dfsek.terra.addons.terrascript.script.builders; import java.util.List; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.functions.FunctionBuilder; import com.dfsek.terra.addons.terrascript.script.StructureScript; import com.dfsek.terra.addons.terrascript.script.functions.LootFunction; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; import com.dfsek.terra.api.Platform; import com.dfsek.terra.api.registry.Registry; import com.dfsek.terra.api.structure.LootTable; @@ -32,9 +32,9 @@ public class LootFunctionBuilder implements FunctionBuilder { @SuppressWarnings("unchecked") @Override - public LootFunction build(List> argumentList, Position position) { - return new LootFunction(registry, (Returnable) argumentList.get(0), (Returnable) argumentList.get(1), - (Returnable) argumentList.get(2), (Returnable) argumentList.get(3), platform, position, + public LootFunction build(List> argumentList, SourcePosition position) { + return new LootFunction(registry, (Expression) argumentList.get(0), (Expression) argumentList.get(1), + (Expression) argumentList.get(2), (Expression) argumentList.get(3), platform, position, script); } @@ -44,10 +44,10 @@ public class LootFunctionBuilder implements FunctionBuilder { } @Override - public Returnable.ReturnType getArgument(int position) { + public Expression.ReturnType getArgument(int position) { return switch(position) { - case 0, 1, 2 -> Returnable.ReturnType.NUMBER; - case 3 -> Returnable.ReturnType.STRING; + case 0, 1, 2 -> Expression.ReturnType.NUMBER; + case 3 -> Expression.ReturnType.STRING; default -> null; }; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/PullFunctionBuilder.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/PullFunctionBuilder.java index ff970735d..c5cda97a0 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/PullFunctionBuilder.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/PullFunctionBuilder.java @@ -9,10 +9,10 @@ package com.dfsek.terra.addons.terrascript.script.builders; import java.util.List; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.functions.FunctionBuilder; import com.dfsek.terra.addons.terrascript.script.functions.PullFunction; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; import com.dfsek.terra.api.Platform; @@ -25,9 +25,9 @@ public class PullFunctionBuilder implements FunctionBuilder { @SuppressWarnings("unchecked") @Override - public PullFunction build(List> argumentList, Position position) { - return new PullFunction((Returnable) argumentList.get(0), (Returnable) argumentList.get(1), - (Returnable) argumentList.get(2), (Returnable) argumentList.get(3), platform, position); + public PullFunction build(List> argumentList, SourcePosition position) { + return new PullFunction((Expression) argumentList.get(0), (Expression) argumentList.get(1), + (Expression) argumentList.get(2), (Expression) argumentList.get(3), platform, position); } @Override @@ -36,10 +36,10 @@ public class PullFunctionBuilder implements FunctionBuilder { } @Override - public Returnable.ReturnType getArgument(int position) { + public Expression.ReturnType getArgument(int position) { return switch(position) { - case 0, 1, 2 -> Returnable.ReturnType.NUMBER; - case 3 -> Returnable.ReturnType.STRING; + case 0, 1, 2 -> Expression.ReturnType.NUMBER; + case 3 -> Expression.ReturnType.STRING; default -> null; }; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/RandomFunctionBuilder.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/RandomFunctionBuilder.java index 6cfeaa52d..1e5142d05 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/RandomFunctionBuilder.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/RandomFunctionBuilder.java @@ -9,17 +9,17 @@ package com.dfsek.terra.addons.terrascript.script.builders; import java.util.List; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.functions.FunctionBuilder; import com.dfsek.terra.addons.terrascript.script.functions.RandomFunction; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class RandomFunctionBuilder implements FunctionBuilder { @SuppressWarnings("unchecked") @Override - public RandomFunction build(List> argumentList, Position position) { - return new RandomFunction((Returnable) argumentList.get(0), position); + public RandomFunction build(List> argumentList, SourcePosition position) { + return new RandomFunction((Expression) argumentList.get(0), position); } @Override @@ -28,8 +28,8 @@ public class RandomFunctionBuilder implements FunctionBuilder { } @Override - public Returnable.ReturnType getArgument(int position) { - if(position == 0) return Returnable.ReturnType.NUMBER; + public Expression.ReturnType getArgument(int position) { + if(position == 0) return Expression.ReturnType.NUMBER; return null; } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/RecursionsFunctionBuilder.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/RecursionsFunctionBuilder.java index f4b34673e..1d6ae90cc 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/RecursionsFunctionBuilder.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/RecursionsFunctionBuilder.java @@ -9,15 +9,15 @@ package com.dfsek.terra.addons.terrascript.script.builders; import java.util.List; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.functions.FunctionBuilder; import com.dfsek.terra.addons.terrascript.script.functions.RecursionsFunction; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class RecursionsFunctionBuilder implements FunctionBuilder { @Override - public RecursionsFunction build(List> argumentList, Position position) { + public RecursionsFunction build(List> argumentList, SourcePosition position) { return new RecursionsFunction(position); } @@ -27,7 +27,7 @@ public class RecursionsFunctionBuilder implements FunctionBuilder { @@ -22,9 +22,9 @@ public class SetMarkFunctionBuilder implements FunctionBuilder @SuppressWarnings("unchecked") @Override - public SetMarkFunction build(List> argumentList, Position position) { - return new SetMarkFunction((Returnable) argumentList.get(0), (Returnable) argumentList.get(1), - (Returnable) argumentList.get(2), (Returnable) argumentList.get(3), position); + public SetMarkFunction build(List> argumentList, SourcePosition position) { + return new SetMarkFunction((Expression) argumentList.get(0), (Expression) argumentList.get(1), + (Expression) argumentList.get(2), (Expression) argumentList.get(3), position); } @Override @@ -33,10 +33,10 @@ public class SetMarkFunctionBuilder implements FunctionBuilder } @Override - public Returnable.ReturnType getArgument(int position) { + public Expression.ReturnType getArgument(int position) { return switch(position) { - case 0, 1, 2 -> Returnable.ReturnType.NUMBER; - case 3 -> Returnable.ReturnType.STRING; + case 0, 1, 2 -> Expression.ReturnType.NUMBER; + case 3 -> Expression.ReturnType.STRING; default -> null; }; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/StateFunctionBuilder.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/StateFunctionBuilder.java index cecd17112..a59a7462f 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/StateFunctionBuilder.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/StateFunctionBuilder.java @@ -10,10 +10,10 @@ package com.dfsek.terra.addons.terrascript.script.builders; import java.util.List; import com.dfsek.terra.addons.terrascript.parser.exceptions.ParseException; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.functions.FunctionBuilder; import com.dfsek.terra.addons.terrascript.script.functions.StateFunction; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; import com.dfsek.terra.api.Platform; @@ -26,10 +26,10 @@ public class StateFunctionBuilder implements FunctionBuilder { @SuppressWarnings("unchecked") @Override - public StateFunction build(List> argumentList, Position position) { + public StateFunction build(List> argumentList, SourcePosition position) { if(argumentList.size() < 4) throw new ParseException("Expected data", position); - return new StateFunction((Returnable) argumentList.get(0), (Returnable) argumentList.get(1), - (Returnable) argumentList.get(2), (Returnable) argumentList.get(3), position); + return new StateFunction((Expression) argumentList.get(0), (Expression) argumentList.get(1), + (Expression) argumentList.get(2), (Expression) argumentList.get(3), position); } @Override @@ -38,10 +38,10 @@ public class StateFunctionBuilder implements FunctionBuilder { } @Override - public Returnable.ReturnType getArgument(int position) { + public Expression.ReturnType getArgument(int position) { return switch(position) { - case 0, 1, 2 -> Returnable.ReturnType.NUMBER; - case 3 -> Returnable.ReturnType.STRING; + case 0, 1, 2 -> Expression.ReturnType.NUMBER; + case 3 -> Expression.ReturnType.STRING; default -> null; }; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/StructureFunctionBuilder.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/StructureFunctionBuilder.java index 69b05554d..71b5262b6 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/StructureFunctionBuilder.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/StructureFunctionBuilder.java @@ -11,10 +11,10 @@ import java.util.List; import java.util.stream.Collectors; import com.dfsek.terra.addons.terrascript.parser.exceptions.ParseException; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.functions.FunctionBuilder; import com.dfsek.terra.addons.terrascript.script.functions.StructureFunction; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; import com.dfsek.terra.api.Platform; import com.dfsek.terra.api.registry.Registry; import com.dfsek.terra.api.structure.Structure; @@ -31,12 +31,12 @@ public class StructureFunctionBuilder implements FunctionBuilder> argumentList, Position position) { + public StructureFunction build(List> argumentList, SourcePosition position) { if(argumentList.size() < 5) throw new ParseException("Expected rotations", position); - return new StructureFunction((Returnable) argumentList.remove(0), (Returnable) argumentList.remove(0), - (Returnable) argumentList.remove(0), (Returnable) argumentList.remove(0), - argumentList.stream().map(item -> ((Returnable) item)).collect(Collectors.toList()), registry, + return new StructureFunction((Expression) argumentList.remove(0), (Expression) argumentList.remove(0), + (Expression) argumentList.remove(0), (Expression) argumentList.remove(0), + argumentList.stream().map(item -> ((Expression) item)).collect(Collectors.toList()), registry, position, platform); } @@ -46,10 +46,10 @@ public class StructureFunctionBuilder implements FunctionBuilder Returnable.ReturnType.NUMBER; - default -> Returnable.ReturnType.STRING; + case 0, 1, 2 -> Expression.ReturnType.NUMBER; + default -> Expression.ReturnType.STRING; }; } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/UnaryBooleanFunctionBuilder.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/UnaryBooleanFunctionBuilder.java index 922f4842f..a1d9a8ac5 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/UnaryBooleanFunctionBuilder.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/UnaryBooleanFunctionBuilder.java @@ -11,12 +11,12 @@ import java.util.List; import java.util.function.BiConsumer; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.parser.lang.functions.Function; import com.dfsek.terra.addons.terrascript.parser.lang.functions.FunctionBuilder; import com.dfsek.terra.addons.terrascript.script.TerraImplementationArguments; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class UnaryBooleanFunctionBuilder implements FunctionBuilder> { @@ -28,7 +28,7 @@ public class UnaryBooleanFunctionBuilder implements FunctionBuilder build(List> argumentList, Position position) { + public Function build(List> argumentList, SourcePosition position) { return new Function<>() { @Override public ReturnType returnType() { @@ -37,14 +37,14 @@ public class UnaryBooleanFunctionBuilder implements FunctionBuilder) argumentList.get(0)).apply(implementationArguments, scope), + public Void invoke(ImplementationArguments implementationArguments, Scope scope) { + function.accept(((Expression) argumentList.get(0)).invoke(implementationArguments, scope), (TerraImplementationArguments) implementationArguments); return null; } @Override - public Position getPosition() { + public SourcePosition getPosition() { return position; } }; @@ -56,8 +56,8 @@ public class UnaryBooleanFunctionBuilder implements FunctionBuilder> { @@ -26,7 +26,7 @@ public class UnaryNumberFunctionBuilder implements FunctionBuilder build(List> argumentList, Position position) { + public Function build(List> argumentList, SourcePosition position) { return new Function<>() { @Override public ReturnType returnType() { @@ -35,12 +35,12 @@ public class UnaryNumberFunctionBuilder implements FunctionBuilder) argumentList.get(0)).apply(implementationArguments, scope)); + public Number invoke(ImplementationArguments implementationArguments, Scope scope) { + return function.apply(((Expression) argumentList.get(0)).invoke(implementationArguments, scope)); } @Override - public Position getPosition() { + public SourcePosition getPosition() { return position; } }; @@ -52,8 +52,8 @@ public class UnaryNumberFunctionBuilder implements FunctionBuilder> { @@ -26,7 +26,7 @@ public class UnaryStringFunctionBuilder implements FunctionBuilder build(List> argumentList, Position position) { + public Function build(List> argumentList, SourcePosition position) { return new Function<>() { @Override public ReturnType returnType() { @@ -35,13 +35,13 @@ public class UnaryStringFunctionBuilder implements FunctionBuilder) argumentList.get(0)).apply(implementationArguments, scope)); + public Void invoke(ImplementationArguments implementationArguments, Scope scope) { + function.accept(((Expression) argumentList.get(0)).invoke(implementationArguments, scope)); return null; } @Override - public Position getPosition() { + public SourcePosition getPosition() { return position; } }; @@ -53,8 +53,8 @@ public class UnaryStringFunctionBuilder implements FunctionBuilder implements FunctionBuilder> { private final java.util.function.Function function; - private final Returnable.ReturnType type; + private final Expression.ReturnType type; - public ZeroArgFunctionBuilder(java.util.function.Function function, Returnable.ReturnType type) { + public ZeroArgFunctionBuilder(java.util.function.Function function, Expression.ReturnType type) { this.function = function; this.type = type; } @Override - public Function build(List> argumentList, Position position) { + public Function build(List> argumentList, SourcePosition position) { return new Function<>() { @Override public ReturnType returnType() { @@ -36,12 +36,12 @@ public class ZeroArgFunctionBuilder implements FunctionBuilder> { } @Override - public T apply(ImplementationArguments implementationArguments, Scope scope) { + public T invoke(ImplementationArguments implementationArguments, Scope scope) { return function.apply((TerraImplementationArguments) implementationArguments); } @Override - public Position getPosition() { + public SourcePosition getPosition() { return position; } }; @@ -53,7 +53,7 @@ public class ZeroArgFunctionBuilder implements FunctionBuilder> { } @Override - public Returnable.ReturnType getArgument(int position) { + public Expression.ReturnType getArgument(int position) { if(position == 0) return type; return null; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/BiomeFunction.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/BiomeFunction.java index 452b9f43b..2e673a789 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/BiomeFunction.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/BiomeFunction.java @@ -10,11 +10,11 @@ package com.dfsek.terra.addons.terrascript.script.functions; import net.jafama.FastMath; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.parser.lang.functions.Function; import com.dfsek.terra.addons.terrascript.script.TerraImplementationArguments; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; import com.dfsek.terra.api.util.RotationUtil; import com.dfsek.terra.api.util.vector.Vector2; import com.dfsek.terra.api.util.vector.Vector3; @@ -22,11 +22,11 @@ import com.dfsek.terra.api.world.biome.generation.BiomeProvider; public class BiomeFunction implements Function { - private final Returnable x, y, z; - private final Position position; + private final Expression x, y, z; + private final SourcePosition position; - public BiomeFunction(Returnable x, Returnable y, Returnable z, Position position) { + public BiomeFunction(Expression x, Expression y, Expression z, SourcePosition position) { this.x = x; this.y = y; this.z = z; @@ -35,11 +35,11 @@ public class BiomeFunction implements Function { @Override - public String apply(ImplementationArguments implementationArguments, Scope scope) { + public String invoke(ImplementationArguments implementationArguments, Scope scope) { TerraImplementationArguments arguments = (TerraImplementationArguments) implementationArguments; - Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.apply(implementationArguments, scope).doubleValue(), - z.apply(implementationArguments, scope).doubleValue()), + Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.invoke(implementationArguments, scope).doubleValue(), + z.invoke(implementationArguments, scope).doubleValue()), arguments.getRotation()); @@ -49,12 +49,12 @@ public class BiomeFunction implements Function { .toVector3() .mutable() .add(Vector3.of(FastMath.roundToInt(xz.getX()), - y.apply(implementationArguments, scope).intValue(), + y.invoke(implementationArguments, scope).intValue(), FastMath.roundToInt(xz.getZ()))).immutable(), arguments.getWorld().getSeed()).getID(); } @Override - public Position getPosition() { + public SourcePosition getPosition() { return position; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/BlockFunction.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/BlockFunction.java index 63d754975..f0a42ca4b 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/BlockFunction.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/BlockFunction.java @@ -15,12 +15,12 @@ import java.util.HashMap; import java.util.Map; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.parser.lang.constants.StringConstant; import com.dfsek.terra.addons.terrascript.parser.lang.functions.Function; import com.dfsek.terra.addons.terrascript.script.TerraImplementationArguments; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; import com.dfsek.terra.api.Platform; import com.dfsek.terra.api.block.state.BlockState; import com.dfsek.terra.api.util.RotationUtil; @@ -30,15 +30,15 @@ import com.dfsek.terra.api.util.vector.Vector3; public class BlockFunction implements Function { private static final Logger logger = LoggerFactory.getLogger(BlockFunction.class); - protected final Returnable x, y, z; - protected final Returnable blockData; + protected final Expression x, y, z; + protected final Expression blockData; protected final Platform platform; private final Map data = new HashMap<>(); - private final Returnable overwrite; - private final Position position; + private final Expression overwrite; + private final SourcePosition position; - public BlockFunction(Returnable x, Returnable y, Returnable z, Returnable blockData, - Returnable overwrite, Platform platform, Position position) { + public BlockFunction(Expression x, Expression y, Expression z, Expression blockData, + Expression overwrite, Platform platform, SourcePosition position) { this.x = x; this.y = y; this.z = z; @@ -49,7 +49,7 @@ public class BlockFunction implements Function { } @Override - public Void apply(ImplementationArguments implementationArguments, Scope scope) { + public Void invoke(ImplementationArguments implementationArguments, Scope scope) { TerraImplementationArguments arguments = (TerraImplementationArguments) implementationArguments; BlockState rot = getBlockState(implementationArguments, scope); setBlock(implementationArguments, scope, arguments, rot); @@ -57,7 +57,7 @@ public class BlockFunction implements Function { } @Override - public Position getPosition() { + public SourcePosition getPosition() { return position; } @@ -68,14 +68,14 @@ public class BlockFunction implements Function { void setBlock(ImplementationArguments implementationArguments, Scope scope, TerraImplementationArguments arguments, BlockState rot) { - Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.apply(implementationArguments, scope).doubleValue(), - z.apply(implementationArguments, scope).doubleValue()), arguments.getRotation()); + Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.invoke(implementationArguments, scope).doubleValue(), + z.invoke(implementationArguments, scope).doubleValue()), arguments.getRotation()); try { Vector3.Mutable set = Vector3.of(FastMath.roundToInt(xz.getX()), - y.apply(implementationArguments, scope).doubleValue(), + y.invoke(implementationArguments, scope).doubleValue(), FastMath.roundToInt(xz.getZ())).mutable().add(arguments.getOrigin()); BlockState current = arguments.getWorld().getBlockState(set); - if(overwrite.apply(implementationArguments, scope) || current.isAir()) { + if(overwrite.invoke(implementationArguments, scope) || current.isAir()) { arguments.getWorld().setBlockState(set, rot); } } catch(RuntimeException e) { @@ -84,15 +84,15 @@ public class BlockFunction implements Function { } protected BlockState getBlockState(ImplementationArguments arguments, Scope scope) { - return data.computeIfAbsent(blockData.apply(arguments, scope), platform.getWorldHandle()::createBlockState); + return data.computeIfAbsent(blockData.invoke(arguments, scope), platform.getWorldHandle()::createBlockState); } public static class Constant extends BlockFunction { private final BlockState state; - public Constant(Returnable x, Returnable y, Returnable z, StringConstant blockData, - Returnable overwrite, Platform platform, Position position) { + public Constant(Expression x, Expression y, Expression z, StringConstant blockData, + Expression overwrite, Platform platform, SourcePosition position) { super(x, y, z, blockData, overwrite, platform, position); this.state = platform.getWorldHandle().createBlockState(blockData.getConstant()); } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/CheckBlockFunction.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/CheckBlockFunction.java index d2fddf169..efb13f7dc 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/CheckBlockFunction.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/CheckBlockFunction.java @@ -10,21 +10,21 @@ package com.dfsek.terra.addons.terrascript.script.functions; import net.jafama.FastMath; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.parser.lang.functions.Function; import com.dfsek.terra.addons.terrascript.script.TerraImplementationArguments; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; import com.dfsek.terra.api.util.RotationUtil; import com.dfsek.terra.api.util.vector.Vector2; import com.dfsek.terra.api.util.vector.Vector3; public class CheckBlockFunction implements Function { - private final Returnable x, y, z; - private final Position position; + private final Expression x, y, z; + private final SourcePosition position; - public CheckBlockFunction(Returnable x, Returnable y, Returnable z, Position position) { + public CheckBlockFunction(Expression x, Expression y, Expression z, SourcePosition position) { this.x = x; this.y = y; this.z = z; @@ -33,11 +33,11 @@ public class CheckBlockFunction implements Function { @Override - public String apply(ImplementationArguments implementationArguments, Scope scope) { + public String invoke(ImplementationArguments implementationArguments, Scope scope) { TerraImplementationArguments arguments = (TerraImplementationArguments) implementationArguments; - Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.apply(implementationArguments, scope).doubleValue(), - z.apply(implementationArguments, scope).doubleValue()), + Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.invoke(implementationArguments, scope).doubleValue(), + z.invoke(implementationArguments, scope).doubleValue()), arguments.getRotation()); @@ -46,7 +46,7 @@ public class CheckBlockFunction implements Function { .toVector3() .mutable() .add(Vector3.of(FastMath.roundToInt(xz.getX()), - y.apply(implementationArguments, scope) + y.invoke(implementationArguments, scope) .doubleValue(), FastMath.roundToInt(xz.getZ())))) .getAsString(); if(data.contains("[")) return data.substring(0, data.indexOf('[')); // Strip properties @@ -54,7 +54,7 @@ public class CheckBlockFunction implements Function { } @Override - public Position getPosition() { + public SourcePosition getPosition() { return position; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/EntityFunction.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/EntityFunction.java index 9fd51ceac..f1ae72f7a 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/EntityFunction.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/EntityFunction.java @@ -9,12 +9,12 @@ package com.dfsek.terra.addons.terrascript.script.functions; import com.dfsek.terra.addons.terrascript.parser.exceptions.ParseException; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.parser.lang.constants.ConstantExpression; import com.dfsek.terra.addons.terrascript.parser.lang.functions.Function; import com.dfsek.terra.addons.terrascript.script.TerraImplementationArguments; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; import com.dfsek.terra.api.Platform; import com.dfsek.terra.api.entity.Entity; import com.dfsek.terra.api.entity.EntityType; @@ -26,12 +26,12 @@ import com.dfsek.terra.api.util.vector.Vector3; public class EntityFunction implements Function { private final EntityType data; - private final Returnable x, y, z; - private final Position position; + private final Expression x, y, z; + private final SourcePosition position; private final Platform platform; - public EntityFunction(Returnable x, Returnable y, Returnable z, Returnable data, Platform platform, - Position position) { + public EntityFunction(Expression x, Expression y, Expression z, Expression data, Platform platform, + SourcePosition position) { this.position = position; this.platform = platform; if(!(data instanceof ConstantExpression)) throw new ParseException("Entity data must be constant", data.getPosition()); @@ -43,12 +43,12 @@ public class EntityFunction implements Function { } @Override - public Void apply(ImplementationArguments implementationArguments, Scope scope) { + public Void invoke(ImplementationArguments implementationArguments, Scope scope) { TerraImplementationArguments arguments = (TerraImplementationArguments) implementationArguments; - Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.apply(implementationArguments, scope).doubleValue(), - z.apply(implementationArguments, scope).doubleValue()), arguments.getRotation()); + Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.invoke(implementationArguments, scope).doubleValue(), + z.invoke(implementationArguments, scope).doubleValue()), arguments.getRotation()); - Entity entity = arguments.getWorld().spawnEntity(Vector3.of(xz.getX(), y.apply(implementationArguments, scope).doubleValue(), + Entity entity = arguments.getWorld().spawnEntity(Vector3.of(xz.getX(), y.invoke(implementationArguments, scope).doubleValue(), xz.getZ()) .mutable() .add(arguments.getOrigin()) @@ -59,7 +59,7 @@ public class EntityFunction implements Function { } @Override - public Position getPosition() { + public SourcePosition getPosition() { return position; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/GetMarkFunction.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/GetMarkFunction.java index 09e735665..def8a47c0 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/GetMarkFunction.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/GetMarkFunction.java @@ -10,21 +10,21 @@ package com.dfsek.terra.addons.terrascript.script.functions; import net.jafama.FastMath; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.parser.lang.functions.Function; import com.dfsek.terra.addons.terrascript.script.TerraImplementationArguments; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; import com.dfsek.terra.api.util.RotationUtil; import com.dfsek.terra.api.util.vector.Vector2; import com.dfsek.terra.api.util.vector.Vector3; public class GetMarkFunction implements Function { - private final Returnable x, y, z; - private final Position position; + private final Expression x, y, z; + private final SourcePosition position; - public GetMarkFunction(Returnable x, Returnable y, Returnable z, Position position) { + public GetMarkFunction(Expression x, Expression y, Expression z, SourcePosition position) { this.position = position; this.x = x; this.y = y; @@ -32,13 +32,13 @@ public class GetMarkFunction implements Function { } @Override - public String apply(ImplementationArguments implementationArguments, Scope scope) { + public String invoke(ImplementationArguments implementationArguments, Scope scope) { TerraImplementationArguments arguments = (TerraImplementationArguments) implementationArguments; - Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.apply(implementationArguments, scope).doubleValue(), - z.apply(implementationArguments, scope).doubleValue()), arguments.getRotation()); + Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.invoke(implementationArguments, scope).doubleValue(), + z.invoke(implementationArguments, scope).doubleValue()), arguments.getRotation()); String mark = arguments.getMark(Vector3.of(FastMath.floorToInt(xz.getX()), FastMath.floorToInt( - y.apply(implementationArguments, scope).doubleValue()), + y.invoke(implementationArguments, scope).doubleValue()), FastMath.floorToInt(xz.getZ())) .mutable() .add(arguments.getOrigin()) @@ -47,7 +47,7 @@ public class GetMarkFunction implements Function { } @Override - public Position getPosition() { + public SourcePosition getPosition() { return position; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/LootFunction.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/LootFunction.java index ebadb9288..b404cf402 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/LootFunction.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/LootFunction.java @@ -14,12 +14,12 @@ import org.slf4j.LoggerFactory; import java.util.Random; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.parser.lang.functions.Function; import com.dfsek.terra.addons.terrascript.script.StructureScript; import com.dfsek.terra.addons.terrascript.script.TerraImplementationArguments; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; import com.dfsek.terra.api.Platform; import com.dfsek.terra.api.block.entity.BlockEntity; import com.dfsek.terra.api.block.entity.Container; @@ -35,14 +35,14 @@ import com.dfsek.terra.api.util.vector.Vector3; public class LootFunction implements Function { private static final Logger LOGGER = LoggerFactory.getLogger(LootFunction.class); private final Registry registry; - private final Returnable data; - private final Returnable x, y, z; - private final Position position; + private final Expression data; + private final Expression x, y, z; + private final SourcePosition position; private final Platform platform; private final StructureScript script; - public LootFunction(Registry registry, Returnable x, Returnable y, Returnable z, - Returnable data, Platform platform, Position position, StructureScript script) { + public LootFunction(Registry registry, Expression x, Expression y, Expression z, + Expression data, Platform platform, SourcePosition position, StructureScript script) { this.registry = registry; this.position = position; this.data = data; @@ -54,20 +54,20 @@ public class LootFunction implements Function { } @Override - public Void apply(ImplementationArguments implementationArguments, Scope scope) { + public Void invoke(ImplementationArguments implementationArguments, Scope scope) { TerraImplementationArguments arguments = (TerraImplementationArguments) implementationArguments; - Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.apply(implementationArguments, scope).doubleValue(), - z.apply(implementationArguments, scope).doubleValue()), + Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.invoke(implementationArguments, scope).doubleValue(), + z.invoke(implementationArguments, scope).doubleValue()), arguments.getRotation()); - String id = data.apply(implementationArguments, scope); + String id = data.invoke(implementationArguments, scope); registry.get(RegistryKey.parse(id)) .ifPresentOrElse(table -> { Vector3 apply = Vector3.of(FastMath.roundToInt(xz.getX()), - y.apply(implementationArguments, scope) + y.invoke(implementationArguments, scope) .intValue(), FastMath.roundToInt(xz.getZ())).mutable().add(arguments.getOrigin()).immutable(); @@ -97,7 +97,7 @@ public class LootFunction implements Function { } @Override - public Position getPosition() { + public SourcePosition getPosition() { return position; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/PullFunction.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/PullFunction.java index 70fbbafc5..4b2ba3ead 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/PullFunction.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/PullFunction.java @@ -11,12 +11,12 @@ import net.jafama.FastMath; import com.dfsek.terra.addons.terrascript.parser.exceptions.ParseException; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.parser.lang.constants.ConstantExpression; import com.dfsek.terra.addons.terrascript.parser.lang.functions.Function; import com.dfsek.terra.addons.terrascript.script.TerraImplementationArguments; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; import com.dfsek.terra.api.Platform; import com.dfsek.terra.api.block.state.BlockState; import com.dfsek.terra.api.util.RotationUtil; @@ -26,11 +26,11 @@ import com.dfsek.terra.api.util.vector.Vector3; public class PullFunction implements Function { private final BlockState data; - private final Returnable x, y, z; - private final Position position; + private final Expression x, y, z; + private final SourcePosition position; - public PullFunction(Returnable x, Returnable y, Returnable z, Returnable data, Platform platform, - Position position) { + public PullFunction(Expression x, Expression y, Expression z, Expression data, Platform platform, + SourcePosition position) { this.position = position; if(!(data instanceof ConstantExpression)) throw new ParseException("Block data must be constant", data.getPosition()); @@ -41,12 +41,12 @@ public class PullFunction implements Function { } @Override - public Void apply(ImplementationArguments implementationArguments, Scope scope) { + public Void invoke(ImplementationArguments implementationArguments, Scope scope) { TerraImplementationArguments arguments = (TerraImplementationArguments) implementationArguments; - Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.apply(implementationArguments, scope).doubleValue(), - z.apply(implementationArguments, scope).doubleValue()), arguments.getRotation()); + Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.invoke(implementationArguments, scope).doubleValue(), + z.invoke(implementationArguments, scope).doubleValue()), arguments.getRotation()); - Vector3.Mutable mutable = Vector3.of(FastMath.roundToInt(xz.getX()), y.apply(implementationArguments, scope).intValue(), + Vector3.Mutable mutable = Vector3.of(FastMath.roundToInt(xz.getX()), y.invoke(implementationArguments, scope).intValue(), FastMath.roundToInt(xz.getZ())).mutable().add(arguments.getOrigin()); while(mutable.getY() > arguments.getWorld().getMinHeight()) { if(!arguments.getWorld().getBlockState(mutable).isAir()) { @@ -59,7 +59,7 @@ public class PullFunction implements Function { } @Override - public Position getPosition() { + public SourcePosition getPosition() { return position; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/RandomFunction.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/RandomFunction.java index 3170d2645..92fc38a6f 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/RandomFunction.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/RandomFunction.java @@ -8,18 +8,18 @@ package com.dfsek.terra.addons.terrascript.script.functions; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.parser.lang.functions.Function; import com.dfsek.terra.addons.terrascript.script.TerraImplementationArguments; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class RandomFunction implements Function { - private final Returnable numberReturnable; - private final Position position; + private final Expression numberReturnable; + private final SourcePosition position; - public RandomFunction(Returnable numberReturnable, Position position) { + public RandomFunction(Expression numberReturnable, SourcePosition position) { this.numberReturnable = numberReturnable; this.position = position; } @@ -31,13 +31,13 @@ public class RandomFunction implements Function { } @Override - public Integer apply(ImplementationArguments implementationArguments, Scope scope) { + public Integer invoke(ImplementationArguments implementationArguments, Scope scope) { return ((TerraImplementationArguments) implementationArguments).getRandom().nextInt( - numberReturnable.apply(implementationArguments, scope).intValue()); + numberReturnable.invoke(implementationArguments, scope).intValue()); } @Override - public Position getPosition() { + public SourcePosition getPosition() { return position; } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/RecursionsFunction.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/RecursionsFunction.java index 6343c1002..d196521f1 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/RecursionsFunction.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/RecursionsFunction.java @@ -11,13 +11,13 @@ import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.parser.lang.functions.Function; import com.dfsek.terra.addons.terrascript.script.TerraImplementationArguments; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class RecursionsFunction implements Function { - private final Position position; + private final SourcePosition position; - public RecursionsFunction(Position position) { + public RecursionsFunction(SourcePosition position) { this.position = position; } @@ -27,12 +27,12 @@ public class RecursionsFunction implements Function { } @Override - public Number apply(ImplementationArguments implementationArguments, Scope scope) { + public Number invoke(ImplementationArguments implementationArguments, Scope scope) { return ((TerraImplementationArguments) implementationArguments).getRecursions(); } @Override - public Position getPosition() { + public SourcePosition getPosition() { return position; } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/SetMarkFunction.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/SetMarkFunction.java index 43a7436b9..030abd690 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/SetMarkFunction.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/SetMarkFunction.java @@ -10,22 +10,22 @@ package com.dfsek.terra.addons.terrascript.script.functions; import net.jafama.FastMath; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.parser.lang.functions.Function; import com.dfsek.terra.addons.terrascript.script.TerraImplementationArguments; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; import com.dfsek.terra.api.util.RotationUtil; import com.dfsek.terra.api.util.vector.Vector2; import com.dfsek.terra.api.util.vector.Vector3; public class SetMarkFunction implements Function { - private final Returnable x, y, z; - private final Position position; - private final Returnable mark; + private final Expression x, y, z; + private final SourcePosition position; + private final Expression mark; - public SetMarkFunction(Returnable x, Returnable y, Returnable z, Returnable mark, Position position) { + public SetMarkFunction(Expression x, Expression y, Expression z, Expression mark, SourcePosition position) { this.position = position; this.mark = mark; this.x = x; @@ -34,22 +34,22 @@ public class SetMarkFunction implements Function { } @Override - public Void apply(ImplementationArguments implementationArguments, Scope scope) { + public Void invoke(ImplementationArguments implementationArguments, Scope scope) { TerraImplementationArguments arguments = (TerraImplementationArguments) implementationArguments; - Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.apply(implementationArguments, scope).doubleValue(), - z.apply(implementationArguments, scope).doubleValue()), arguments.getRotation()); + Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.invoke(implementationArguments, scope).doubleValue(), + z.invoke(implementationArguments, scope).doubleValue()), arguments.getRotation()); arguments.setMark(Vector3.of(FastMath.floorToInt(xz.getX()), FastMath.floorToInt( - y.apply(implementationArguments, scope).doubleValue()), + y.invoke(implementationArguments, scope).doubleValue()), FastMath.floorToInt(xz.getZ())).mutable().add(arguments.getOrigin()).immutable(), - mark.apply(implementationArguments, scope)); + mark.invoke(implementationArguments, scope)); return null; } @Override - public Position getPosition() { + public SourcePosition getPosition() { return position; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/StateFunction.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/StateFunction.java index 6ccbe1a80..cacfe3ed6 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/StateFunction.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/StateFunction.java @@ -12,11 +12,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.parser.lang.functions.Function; import com.dfsek.terra.addons.terrascript.script.TerraImplementationArguments; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; import com.dfsek.terra.api.block.entity.BlockEntity; import com.dfsek.terra.api.util.RotationUtil; import com.dfsek.terra.api.util.vector.Vector2; @@ -25,12 +25,12 @@ import com.dfsek.terra.api.util.vector.Vector3; public class StateFunction implements Function { private static final Logger LOGGER = LoggerFactory.getLogger(StateFunction.class); - private final Returnable data; - private final Returnable x, y, z; - private final Position position; + private final Expression data; + private final Expression x, y, z; + private final SourcePosition position; - public StateFunction(Returnable x, Returnable y, Returnable z, Returnable data, - Position position) { + public StateFunction(Expression x, Expression y, Expression z, Expression data, + SourcePosition position) { this.position = position; this.data = data; this.x = x; @@ -39,17 +39,17 @@ public class StateFunction implements Function { } @Override - public Void apply(ImplementationArguments implementationArguments, Scope scope) { + public Void invoke(ImplementationArguments implementationArguments, Scope scope) { TerraImplementationArguments arguments = (TerraImplementationArguments) implementationArguments; - Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.apply(implementationArguments, scope).doubleValue(), - z.apply(implementationArguments, scope).doubleValue()), arguments.getRotation()); + Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.invoke(implementationArguments, scope).doubleValue(), + z.invoke(implementationArguments, scope).doubleValue()), arguments.getRotation()); - Vector3 origin = Vector3.of(FastMath.roundToInt(xz.getX()), y.apply(implementationArguments, scope).intValue(), + Vector3 origin = Vector3.of(FastMath.roundToInt(xz.getX()), y.invoke(implementationArguments, scope).intValue(), FastMath.roundToInt(xz.getZ())).mutable().add(arguments.getOrigin()).immutable(); try { BlockEntity state = arguments.getWorld().getBlockEntity(origin); - state.applyState(data.apply(implementationArguments, scope)); + state.applyState(data.invoke(implementationArguments, scope)); state.update(false); } catch(Exception e) { LOGGER.warn("Could not apply BlockState at {}", origin, e); @@ -59,7 +59,7 @@ public class StateFunction implements Function { } @Override - public Position getPosition() { + public SourcePosition getPosition() { return position; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/StructureFunction.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/StructureFunction.java index 51fb47054..72fc4d43a 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/StructureFunction.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/StructureFunction.java @@ -14,12 +14,12 @@ import org.slf4j.LoggerFactory; import java.util.List; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.parser.lang.functions.Function; import com.dfsek.terra.addons.terrascript.script.StructureScript; import com.dfsek.terra.addons.terrascript.script.TerraImplementationArguments; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; import com.dfsek.terra.api.Platform; import com.dfsek.terra.api.registry.Registry; import com.dfsek.terra.api.structure.Structure; @@ -31,14 +31,14 @@ import com.dfsek.terra.api.util.vector.Vector2; public class StructureFunction implements Function { private static final Logger LOGGER = LoggerFactory.getLogger(StructureFunction.class); private final Registry registry; - private final Returnable id; - private final Returnable x, y, z; - private final Position position; + private final Expression id; + private final Expression x, y, z; + private final SourcePosition position; private final Platform platform; - private final List> rotations; + private final List> rotations; - public StructureFunction(Returnable x, Returnable y, Returnable z, Returnable id, - List> rotations, Registry registry, Position position, Platform platform) { + public StructureFunction(Expression x, Expression y, Expression z, Expression id, + List> rotations, Registry registry, SourcePosition position, Platform platform) { this.registry = registry; this.id = id; this.position = position; @@ -55,20 +55,20 @@ public class StructureFunction implements Function { } @Override - public Boolean apply(ImplementationArguments implementationArguments, Scope scope) { + public Boolean invoke(ImplementationArguments implementationArguments, Scope scope) { TerraImplementationArguments arguments = (TerraImplementationArguments) implementationArguments; if(arguments.getRecursions() > platform.getTerraConfig().getMaxRecursion()) throw new RuntimeException("Structure recursion too deep: " + arguments.getRecursions()); - Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.apply(implementationArguments, scope).doubleValue(), - z.apply(implementationArguments, scope).doubleValue()), arguments.getRotation()); + Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.invoke(implementationArguments, scope).doubleValue(), + z.invoke(implementationArguments, scope).doubleValue()), arguments.getRotation()); - String app = id.apply(implementationArguments, scope); + String app = id.invoke(implementationArguments, scope); return registry.getByID(app).map(script -> { Rotation rotation1; - String rotString = rotations.get(arguments.getRandom().nextInt(rotations.size())).apply(implementationArguments, scope); + String rotString = rotations.get(arguments.getRandom().nextInt(rotations.size())).invoke(implementationArguments, scope); try { rotation1 = Rotation.valueOf(rotString); } catch(IllegalArgumentException e) { @@ -80,7 +80,7 @@ public class StructureFunction implements Function { return structureScript.generate(arguments.getOrigin(), arguments.getWorld() .buffer(FastMath.roundToInt(xz.getX()), - y.apply(implementationArguments, scope).intValue(), + y.invoke(implementationArguments, scope).intValue(), FastMath.roundToInt(xz.getZ())), arguments.getRandom(), arguments.getRotation().rotate(rotation1), arguments.getRecursions() + 1); @@ -88,7 +88,7 @@ public class StructureFunction implements Function { return script.generate(arguments.getOrigin(), arguments.getWorld() .buffer(FastMath.roundToInt(xz.getX()), - y.apply(implementationArguments, scope).intValue(), + y.invoke(implementationArguments, scope).intValue(), FastMath.roundToInt(xz.getZ())), arguments.getRandom(), arguments.getRotation().rotate(rotation1)); @@ -99,7 +99,7 @@ public class StructureFunction implements Function { } @Override - public Position getPosition() { + public SourcePosition getPosition() { return position; } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/Lookahead.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/LookaheadStream.java similarity index 92% rename from common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/Lookahead.java rename to common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/LookaheadStream.java index 4778b70af..3bea7c769 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/Lookahead.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/LookaheadStream.java @@ -17,14 +17,14 @@ import java.util.List; /** * Stream-like data structure that allows viewing future elements without consuming current. */ -public class Lookahead { +public class LookaheadStream { private final List buffer = new ArrayList<>(); private final Reader input; private int index = 0; private int line = 0; private boolean end = false; - public Lookahead(Reader r) { + public LookaheadStream(Reader r) { this.input = r; } @@ -88,7 +88,7 @@ public class Lookahead { } } - public boolean matches(String check, boolean consume) { + public boolean matchesString(String check, boolean consume) { if(check == null) return false; for(int i = 0; i < check.length(); i++) { @@ -120,11 +120,7 @@ public class Lookahead { } } - public int getLine() { - return line; - } - - public int getIndex() { - return index; + public SourcePosition getPosition() { + return new SourcePosition(line, index); } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/Position.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/SourcePosition.java similarity index 86% rename from common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/Position.java rename to common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/SourcePosition.java index 9e5c7c675..269b4027f 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/Position.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/SourcePosition.java @@ -7,11 +7,11 @@ package com.dfsek.terra.addons.terrascript.tokenizer; -public class Position { +public class SourcePosition { private final int line; private final int index; - public Position(int line, int index) { + public SourcePosition(int line, int index) { this.line = line; this.index = index; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/Token.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/Token.java index 6ab278807..a2ffeaeef 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/Token.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/Token.java @@ -10,9 +10,9 @@ package com.dfsek.terra.addons.terrascript.tokenizer; public class Token { private final String content; private final Type type; - private final Position start; + private final SourcePosition start; - public Token(String content, Type type, Position start) { + public Token(String content, Type type, SourcePosition start) { this.content = content; this.type = type; this.start = start; @@ -31,7 +31,7 @@ public class Token { return content; } - public Position getPosition() { + public SourcePosition getPosition() { return start; } @@ -232,6 +232,10 @@ public class Token { /** * Else keyword */ - ELSE + ELSE, + /** + * End of file + */ + END_OF_FILE } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/Tokenizer.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/Tokenizer.java index 16ede7b3a..f93280f95 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/Tokenizer.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/Tokenizer.java @@ -22,14 +22,13 @@ import com.dfsek.terra.addons.terrascript.tokenizer.exceptions.TokenizerExceptio public class Tokenizer { public static final Set syntaxSignificant = Sets.newHashSet(';', '(', ')', '"', ',', '\\', '=', '{', '}', '+', '-', '*', '/', '>', '<', '!'); // Reserved chars - private final Lookahead reader; - private final Stack brackets = new Stack<>(); + private final LookaheadStream reader; + private final Stack bracketStack = new Stack<>(); private Token current; - private Token last; public Tokenizer(String data) { - reader = new Lookahead(new StringReader(data + '\0')); - current = fetchCheck(); + reader = new LookaheadStream(new StringReader(data + '\0')); + current = tokenize(); } /** @@ -39,8 +38,7 @@ public class Tokenizer { * * @throws ParseException If token does not exist */ - public Token get() { - if(!hasNext()) throw new ParseException("Unexpected end of input", last.getPosition()); + public Token current() { return current; } @@ -52,64 +50,66 @@ public class Tokenizer { * @throws ParseException If token does not exist */ public Token consume() { - if(!hasNext()) throw new ParseException("Unexpected end of input", last.getPosition()); + if (current.getType() == Token.Type.END_OF_FILE) return current; Token temp = current; - current = fetchCheck(); + current = tokenize(); return temp; } - private Token fetchCheck() { - Token fetch = fetch(); - if(fetch != null) { - last = fetch; - if(fetch.getType() == Token.Type.BLOCK_BEGIN) brackets.push(fetch); // Opening bracket - else if(fetch.getType() == Token.Type.BLOCK_END) { - if(!brackets.isEmpty()) brackets.pop(); - else throw new ParseException("Dangling opening brace", new Position(0, 0)); - } - } else if(!brackets.isEmpty()) { - throw new ParseException("Dangling closing brace", brackets.peek().getPosition()); - } - return fetch; + /** + * Whether this {@code Tokenizer} contains additional tokens. + * + * @return {@code true} if more tokens are present, otherwise {@code false} + */ + public boolean hasNext() { + return current.getType() != Token.Type.END_OF_FILE; } - private Token fetch() throws TokenizerException { - while(!reader.current().isEOF() && reader.current().isWhitespace()) reader.consume(); + private Token tokenize() throws TokenizerException { + consumeWhitespace(); - while(reader.matches("//", true)) skipLine(); // Skip line if comment + // Skip line if comment + while(reader.matchesString("//", true)) skipLine(); - if(reader.matches("/*", true)) skipTo("*/"); // Skip multi line comment + // Skip multi line comment + if(reader.matchesString("/*", true)) skipTo("*/"); - if(reader.current().isEOF()) return null; // EOF + // Reached end of file + if(reader.current().isEOF()) { + if (!bracketStack.isEmpty()) throw new ParseException("Dangling closing brace", bracketStack.peek().getPosition()); + return new Token(reader.consume().toString(), Token.Type.END_OF_FILE, reader.getPosition()); + } - if(reader.matches("==", true)) - return new Token("==", Token.Type.EQUALS_OPERATOR, new Position(reader.getLine(), reader.getIndex())); - if(reader.matches("!=", true)) - return new Token("!=", Token.Type.NOT_EQUALS_OPERATOR, new Position(reader.getLine(), reader.getIndex())); - if(reader.matches(">=", true)) - return new Token(">=", Token.Type.GREATER_THAN_OR_EQUALS_OPERATOR, new Position(reader.getLine(), reader.getIndex())); - if(reader.matches("<=", true)) - return new Token("<=", Token.Type.LESS_THAN_OR_EQUALS_OPERATOR, new Position(reader.getLine(), reader.getIndex())); - if(reader.matches(">", true)) - return new Token(">", Token.Type.GREATER_THAN_OPERATOR, new Position(reader.getLine(), reader.getIndex())); - if(reader.matches("<", true)) - return new Token("<", Token.Type.LESS_THAN_OPERATOR, new Position(reader.getLine(), reader.getIndex())); - - - if(reader.matches("||", true)) - return new Token("||", Token.Type.BOOLEAN_OR, new Position(reader.getLine(), reader.getIndex())); - if(reader.matches("&&", true)) - return new Token("&&", Token.Type.BOOLEAN_AND, new Position(reader.getLine(), reader.getIndex())); + // Check if operator token + if(reader.matchesString("==", true)) + return new Token("==", Token.Type.EQUALS_OPERATOR, reader.getPosition()); + if(reader.matchesString("!=", true)) + return new Token("!=", Token.Type.NOT_EQUALS_OPERATOR, reader.getPosition()); + if(reader.matchesString(">=", true)) + return new Token(">=", Token.Type.GREATER_THAN_OR_EQUALS_OPERATOR, reader.getPosition()); + if(reader.matchesString("<=", true)) + return new Token("<=", Token.Type.LESS_THAN_OR_EQUALS_OPERATOR, reader.getPosition()); + if(reader.matchesString(">", true)) + return new Token(">", Token.Type.GREATER_THAN_OPERATOR, reader.getPosition()); + if(reader.matchesString("<", true)) + return new Token("<", Token.Type.LESS_THAN_OPERATOR, reader.getPosition()); + // Check if logical operator + if(reader.matchesString("||", true)) + return new Token("||", Token.Type.BOOLEAN_OR, reader.getPosition()); + if(reader.matchesString("&&", true)) + return new Token("&&", Token.Type.BOOLEAN_AND, reader.getPosition()); + // Check if number if(isNumberStart()) { StringBuilder num = new StringBuilder(); while(!reader.current().isEOF() && isNumberLike()) { num.append(reader.consume()); } - return new Token(num.toString(), Token.Type.NUMBER, new Position(reader.getLine(), reader.getIndex())); + return new Token(num.toString(), Token.Type.NUMBER, reader.getPosition()); } + // Check if string literal if(reader.current().is('"')) { reader.consume(); // Consume first quote StringBuilder string = new StringBuilder(); @@ -121,83 +121,93 @@ public class Tokenizer { continue; } else ignoreNext = false; if(reader.current().isEOF()) - throw new FormatException("No end of string literal found. ", new Position(reader.getLine(), reader.getIndex())); + throw new FormatException("No end of string literal found. ", reader.getPosition()); string.append(reader.consume()); } reader.consume(); // Consume last quote - return new Token(string.toString(), Token.Type.STRING, new Position(reader.getLine(), reader.getIndex())); + return new Token(string.toString(), Token.Type.STRING, reader.getPosition()); } if(reader.current().is('(')) - return new Token(reader.consume().toString(), Token.Type.GROUP_BEGIN, new Position(reader.getLine(), reader.getIndex())); + return new Token(reader.consume().toString(), Token.Type.GROUP_BEGIN, reader.getPosition()); if(reader.current().is(')')) - return new Token(reader.consume().toString(), Token.Type.GROUP_END, new Position(reader.getLine(), reader.getIndex())); + return new Token(reader.consume().toString(), Token.Type.GROUP_END, reader.getPosition()); if(reader.current().is(';')) - return new Token(reader.consume().toString(), Token.Type.STATEMENT_END, new Position(reader.getLine(), reader.getIndex())); + return new Token(reader.consume().toString(), Token.Type.STATEMENT_END, reader.getPosition()); if(reader.current().is(',')) - return new Token(reader.consume().toString(), Token.Type.SEPARATOR, new Position(reader.getLine(), reader.getIndex())); - if(reader.current().is('{')) - return new Token(reader.consume().toString(), Token.Type.BLOCK_BEGIN, new Position(reader.getLine(), reader.getIndex())); - if(reader.current().is('}')) - return new Token(reader.consume().toString(), Token.Type.BLOCK_END, new Position(reader.getLine(), reader.getIndex())); + return new Token(reader.consume().toString(), Token.Type.SEPARATOR, reader.getPosition()); + + if(reader.current().is('{')) { + Token token = new Token(reader.consume().toString(), Token.Type.BLOCK_BEGIN, reader.getPosition()); + bracketStack.push(token); + return token; + } + if(reader.current().is('}')) { + if(bracketStack.isEmpty()) throw new ParseException("Dangling opening brace", new SourcePosition(0, 0)); + bracketStack.pop(); + return new Token(reader.consume().toString(), Token.Type.BLOCK_END, reader.getPosition()); + } + if(reader.current().is('=')) - return new Token(reader.consume().toString(), Token.Type.ASSIGNMENT, new Position(reader.getLine(), reader.getIndex())); + return new Token(reader.consume().toString(), Token.Type.ASSIGNMENT, reader.getPosition()); if(reader.current().is('+')) - return new Token(reader.consume().toString(), Token.Type.ADDITION_OPERATOR, new Position(reader.getLine(), reader.getIndex())); + return new Token(reader.consume().toString(), Token.Type.ADDITION_OPERATOR, reader.getPosition()); if(reader.current().is('-')) return new Token(reader.consume().toString(), Token.Type.SUBTRACTION_OPERATOR, - new Position(reader.getLine(), reader.getIndex())); + reader.getPosition()); if(reader.current().is('*')) return new Token(reader.consume().toString(), Token.Type.MULTIPLICATION_OPERATOR, - new Position(reader.getLine(), reader.getIndex())); + reader.getPosition()); if(reader.current().is('/')) - return new Token(reader.consume().toString(), Token.Type.DIVISION_OPERATOR, new Position(reader.getLine(), reader.getIndex())); + return new Token(reader.consume().toString(), Token.Type.DIVISION_OPERATOR, reader.getPosition()); if(reader.current().is('%')) - return new Token(reader.consume().toString(), Token.Type.MODULO_OPERATOR, new Position(reader.getLine(), reader.getIndex())); + return new Token(reader.consume().toString(), Token.Type.MODULO_OPERATOR, reader.getPosition()); if(reader.current().is('!')) - return new Token(reader.consume().toString(), Token.Type.BOOLEAN_NOT, new Position(reader.getLine(), reader.getIndex())); + return new Token(reader.consume().toString(), Token.Type.BOOLEAN_NOT, reader.getPosition()); + // Read word StringBuilder token = new StringBuilder(); while(!reader.current().isEOF() && !isSyntaxSignificant(reader.current().getCharacter())) { Char c = reader.consume(); if(c.isWhitespace()) break; token.append(c); } - String tokenString = token.toString(); + // Check if word is a keyword if(tokenString.equals("true")) - return new Token(tokenString, Token.Type.BOOLEAN, new Position(reader.getLine(), reader.getIndex())); + return new Token(tokenString, Token.Type.BOOLEAN, reader.getPosition()); if(tokenString.equals("false")) - return new Token(tokenString, Token.Type.BOOLEAN, new Position(reader.getLine(), reader.getIndex())); + return new Token(tokenString, Token.Type.BOOLEAN, reader.getPosition()); if(tokenString.equals("num")) - return new Token(tokenString, Token.Type.NUMBER_VARIABLE, new Position(reader.getLine(), reader.getIndex())); + return new Token(tokenString, Token.Type.NUMBER_VARIABLE, reader.getPosition()); if(tokenString.equals("str")) - return new Token(tokenString, Token.Type.STRING_VARIABLE, new Position(reader.getLine(), reader.getIndex())); + return new Token(tokenString, Token.Type.STRING_VARIABLE, reader.getPosition()); if(tokenString.equals("bool")) - return new Token(tokenString, Token.Type.BOOLEAN_VARIABLE, new Position(reader.getLine(), reader.getIndex())); + return new Token(tokenString, Token.Type.BOOLEAN_VARIABLE, reader.getPosition()); if(tokenString.equals("if")) - return new Token(tokenString, Token.Type.IF_STATEMENT, new Position(reader.getLine(), reader.getIndex())); + return new Token(tokenString, Token.Type.IF_STATEMENT, reader.getPosition()); if(tokenString.equals("else")) - return new Token(tokenString, Token.Type.ELSE, new Position(reader.getLine(), reader.getIndex())); + return new Token(tokenString, Token.Type.ELSE, reader.getPosition()); if(tokenString.equals("while")) - return new Token(tokenString, Token.Type.WHILE_LOOP, new Position(reader.getLine(), reader.getIndex())); + return new Token(tokenString, Token.Type.WHILE_LOOP, reader.getPosition()); if(tokenString.equals("for")) - return new Token(tokenString, Token.Type.FOR_LOOP, new Position(reader.getLine(), reader.getIndex())); + return new Token(tokenString, Token.Type.FOR_LOOP, reader.getPosition()); if(tokenString.equals("return")) - return new Token(tokenString, Token.Type.RETURN, new Position(reader.getLine(), reader.getIndex())); + return new Token(tokenString, Token.Type.RETURN, reader.getPosition()); if(tokenString.equals("continue")) - return new Token(tokenString, Token.Type.CONTINUE, new Position(reader.getLine(), reader.getIndex())); + return new Token(tokenString, Token.Type.CONTINUE, reader.getPosition()); if(tokenString.equals("break")) - return new Token(tokenString, Token.Type.BREAK, new Position(reader.getLine(), reader.getIndex())); + return new Token(tokenString, Token.Type.BREAK, reader.getPosition()); if(tokenString.equals("fail")) - return new Token(tokenString, Token.Type.FAIL, new Position(reader.getLine(), reader.getIndex())); + return new Token(tokenString, Token.Type.FAIL, reader.getPosition()); - return new Token(tokenString, Token.Type.IDENTIFIER, new Position(reader.getLine(), reader.getIndex())); + // If not keyword, assume it is an identifier + return new Token(tokenString, Token.Type.IDENTIFIER, reader.getPosition()); } private void skipLine() { @@ -210,9 +220,9 @@ public class Tokenizer { } private void skipTo(String s) throws EOFException { - Position begin = new Position(reader.getLine(), reader.getIndex()); + SourcePosition begin = reader.getPosition(); while(!reader.current().isEOF()) { - if(reader.matches(s, true)) { + if(reader.matchesString(s, true)) { consumeWhitespace(); return; } @@ -221,15 +231,6 @@ public class Tokenizer { throw new EOFException("No end of expression found.", begin); } - /** - * Whether this {@code Tokenizer} contains additional tokens. - * - * @return {@code true} if more tokens are present, otherwise {@code false} - */ - public boolean hasNext() { - return !(current == null); - } - private boolean isNumberLike() { return reader.current().isDigit() || reader.current().is('_', '.', 'E'); @@ -243,5 +244,4 @@ public class Tokenizer { public boolean isSyntaxSignificant(char c) { return syntaxSignificant.contains(c); } - } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/exceptions/EOFException.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/exceptions/EOFException.java index bd9097946..72f4d82fc 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/exceptions/EOFException.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/exceptions/EOFException.java @@ -9,7 +9,7 @@ package com.dfsek.terra.addons.terrascript.tokenizer.exceptions; import java.io.Serial; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class EOFException extends TokenizerException { @@ -17,11 +17,11 @@ public class EOFException extends TokenizerException { @Serial private static final long serialVersionUID = 3980047409902809440L; - public EOFException(String message, Position position) { + public EOFException(String message, SourcePosition position) { super(message, position); } - public EOFException(String message, Position position, Throwable cause) { + public EOFException(String message, SourcePosition position, Throwable cause) { super(message, position, cause); } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/exceptions/FormatException.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/exceptions/FormatException.java index 067b49b70..9f2b0d5e0 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/exceptions/FormatException.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/exceptions/FormatException.java @@ -9,7 +9,7 @@ package com.dfsek.terra.addons.terrascript.tokenizer.exceptions; import java.io.Serial; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class FormatException extends TokenizerException { @@ -17,11 +17,11 @@ public class FormatException extends TokenizerException { @Serial private static final long serialVersionUID = -791308012940744455L; - public FormatException(String message, Position position) { + public FormatException(String message, SourcePosition position) { super(message, position); } - public FormatException(String message, Position position, Throwable cause) { + public FormatException(String message, SourcePosition position, Throwable cause) { super(message, position, cause); } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/exceptions/TokenizerException.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/exceptions/TokenizerException.java index 079f17226..52b115c16 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/exceptions/TokenizerException.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/exceptions/TokenizerException.java @@ -10,7 +10,7 @@ package com.dfsek.terra.addons.terrascript.tokenizer.exceptions; import java.io.Serial; import com.dfsek.terra.addons.terrascript.parser.exceptions.ParseException; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public abstract class TokenizerException extends ParseException { @@ -18,11 +18,11 @@ public abstract class TokenizerException extends ParseException { @Serial private static final long serialVersionUID = 2792384010083575420L; - public TokenizerException(String message, Position position) { + public TokenizerException(String message, SourcePosition position) { super(message, position); } - public TokenizerException(String message, Position position, Throwable cause) { + public TokenizerException(String message, SourcePosition position, Throwable cause) { super(message, position, cause); } } diff --git a/common/addons/structure-terrascript-loader/src/test/java/structure/LookaheadTest.java b/common/addons/structure-terrascript-loader/src/test/java/structure/LookaheadStreamTest.java similarity index 75% rename from common/addons/structure-terrascript-loader/src/test/java/structure/LookaheadTest.java rename to common/addons/structure-terrascript-loader/src/test/java/structure/LookaheadStreamTest.java index e428f67cf..bb9983901 100644 --- a/common/addons/structure-terrascript-loader/src/test/java/structure/LookaheadTest.java +++ b/common/addons/structure-terrascript-loader/src/test/java/structure/LookaheadStreamTest.java @@ -11,13 +11,13 @@ import org.junit.jupiter.api.Test; import java.io.StringReader; -import com.dfsek.terra.addons.terrascript.tokenizer.Lookahead; +import com.dfsek.terra.addons.terrascript.tokenizer.PeekableStream; -public class LookaheadTest { +public class PeekableStreamTest { @Test public void lookahead() { - Lookahead lookahead = new Lookahead(new StringReader("Test string...")); + PeekableStream lookahead = new PeekableStream(new StringReader("Test string...")); for(int i = 0; lookahead.next(i) != null; i++) { System.out.print(lookahead.next(i).getCharacter()); diff --git a/common/addons/structure-terrascript-loader/src/test/java/structure/ParserTest.java b/common/addons/structure-terrascript-loader/src/test/java/structure/ParserTest.java index fc0fcf532..b6a298c12 100644 --- a/common/addons/structure-terrascript-loader/src/test/java/structure/ParserTest.java +++ b/common/addons/structure-terrascript-loader/src/test/java/structure/ParserTest.java @@ -20,11 +20,11 @@ import com.dfsek.terra.addons.terrascript.parser.Parser; import com.dfsek.terra.addons.terrascript.parser.exceptions.ParseException; import com.dfsek.terra.addons.terrascript.parser.lang.Executable; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.parser.lang.functions.Function; import com.dfsek.terra.addons.terrascript.parser.lang.functions.FunctionBuilder; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class ParserTest { @@ -35,7 +35,7 @@ public class ParserTest { parser.registerFunction("test", new FunctionBuilder() { @Override - public Test1 build(List> argumentList, Position position) { + public Test1 build(List> argumentList, SourcePosition position) { return new Test1(argumentList.get(0), argumentList.get(1), position); } @@ -45,10 +45,10 @@ public class ParserTest { } @Override - public Returnable.ReturnType getArgument(int position) { + public Expression.ReturnType getArgument(int position) { return switch(position) { - case 0 -> Returnable.ReturnType.STRING; - case 1 -> Returnable.ReturnType.NUMBER; + case 0 -> Expression.ReturnType.STRING; + case 1 -> Expression.ReturnType.NUMBER; default -> null; }; } @@ -66,25 +66,25 @@ public class ParserTest { } private static class Test1 implements Function { - private final Returnable a; - private final Returnable b; - private final Position position; + private final Expression a; + private final Expression b; + private final SourcePosition position; - public Test1(Returnable a, Returnable b, Position position) { + public Test1(Expression a, Expression b, SourcePosition position) { this.a = a; this.b = b; this.position = position; } @Override - public Void apply(ImplementationArguments implementationArguments, Scope scope) { - System.out.println("string: " + a.apply(implementationArguments, scope) + ", double: " + - b.apply(implementationArguments, scope)); + public Void invoke(ImplementationArguments implementationArguments, Scope scope) { + System.out.println("string: " + a.invoke(implementationArguments, scope) + ", double: " + + b.invoke(implementationArguments, scope)); return null; } @Override - public Position getPosition() { + public SourcePosition getPosition() { return position; } diff --git a/common/addons/terrascript-function-check-noise-3d/src/main/java/com/dfsek/terra/addon/terrascript/check/CheckFunction.java b/common/addons/terrascript-function-check-noise-3d/src/main/java/com/dfsek/terra/addon/terrascript/check/CheckFunction.java index 1dfb1d293..377229a37 100644 --- a/common/addons/terrascript-function-check-noise-3d/src/main/java/com/dfsek/terra/addon/terrascript/check/CheckFunction.java +++ b/common/addons/terrascript-function-check-noise-3d/src/main/java/com/dfsek/terra/addon/terrascript/check/CheckFunction.java @@ -12,11 +12,11 @@ import net.jafama.FastMath; import com.dfsek.terra.addons.chunkgenerator.generation.NoiseChunkGenerator3D; import com.dfsek.terra.addons.chunkgenerator.generation.math.samplers.SamplerProvider; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.parser.lang.functions.Function; import com.dfsek.terra.addons.terrascript.script.TerraImplementationArguments; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; import com.dfsek.terra.api.util.RotationUtil; import com.dfsek.terra.api.util.vector.Vector2; import com.dfsek.terra.api.util.vector.Vector3; @@ -25,10 +25,10 @@ import com.dfsek.terra.api.world.WritableWorld; public class CheckFunction implements Function { - private final Returnable x, y, z; - private final Position position; + private final Expression x, y, z; + private final SourcePosition position; - public CheckFunction(Returnable x, Returnable y, Returnable z, Position position) { + public CheckFunction(Expression x, Expression y, Expression z, SourcePosition position) { this.x = x; this.y = y; this.z = z; @@ -37,26 +37,26 @@ public class CheckFunction implements Function { @Override - public String apply(ImplementationArguments implementationArguments, Scope scope) { + public String invoke(ImplementationArguments implementationArguments, Scope scope) { TerraImplementationArguments arguments = (TerraImplementationArguments) implementationArguments; - Vector2 xz = Vector2.of(x.apply(implementationArguments, scope).doubleValue(), - z.apply(implementationArguments, scope).doubleValue()); + Vector2 xz = Vector2.of(x.invoke(implementationArguments, scope).doubleValue(), + z.invoke(implementationArguments, scope).doubleValue()); RotationUtil.rotateVector(xz, arguments.getRotation()); Vector3 location = arguments.getOrigin().toVector3Mutable().add( - Vector3.of(FastMath.roundToInt(xz.getX()), y.apply(implementationArguments, scope).doubleValue(), + Vector3.of(FastMath.roundToInt(xz.getX()), y.invoke(implementationArguments, scope).doubleValue(), FastMath.roundToInt(xz.getZ()))).immutable(); return apply(location, arguments.getWorld()); } @Override - public Position getPosition() { + public SourcePosition getPosition() { return position; } diff --git a/common/addons/terrascript-function-check-noise-3d/src/main/java/com/dfsek/terra/addon/terrascript/check/CheckFunctionBuilder.java b/common/addons/terrascript-function-check-noise-3d/src/main/java/com/dfsek/terra/addon/terrascript/check/CheckFunctionBuilder.java index dc0a0b1da..e4d20789b 100644 --- a/common/addons/terrascript-function-check-noise-3d/src/main/java/com/dfsek/terra/addon/terrascript/check/CheckFunctionBuilder.java +++ b/common/addons/terrascript-function-check-noise-3d/src/main/java/com/dfsek/terra/addon/terrascript/check/CheckFunctionBuilder.java @@ -9,9 +9,9 @@ package com.dfsek.terra.addon.terrascript.check; import java.util.List; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.functions.FunctionBuilder; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; import com.dfsek.terra.api.Platform; @@ -24,9 +24,9 @@ public class CheckFunctionBuilder implements FunctionBuilder { @SuppressWarnings("unchecked") @Override - public CheckFunction build(List> argumentList, Position position) { - return new CheckFunction((Returnable) argumentList.get(0), (Returnable) argumentList.get(1), - (Returnable) argumentList.get(2), position); + public CheckFunction build(List> argumentList, SourcePosition position) { + return new CheckFunction((Expression) argumentList.get(0), (Expression) argumentList.get(1), + (Expression) argumentList.get(2), position); } @Override @@ -35,9 +35,9 @@ public class CheckFunctionBuilder implements FunctionBuilder { } @Override - public Returnable.ReturnType getArgument(int position) { + public Expression.ReturnType getArgument(int position) { return switch(position) { - case 0, 1, 2 -> Returnable.ReturnType.NUMBER; + case 0, 1, 2 -> Expression.ReturnType.NUMBER; default -> null; }; } diff --git a/common/addons/terrascript-function-sampler/src/main/java/com/dfsek/terra/addons/terrascript/sampler/ConstantSamplerFunction.java b/common/addons/terrascript-function-sampler/src/main/java/com/dfsek/terra/addons/terrascript/sampler/ConstantSamplerFunction.java index 83cf2563b..5b70b7faa 100644 --- a/common/addons/terrascript-function-sampler/src/main/java/com/dfsek/terra/addons/terrascript/sampler/ConstantSamplerFunction.java +++ b/common/addons/terrascript-function-sampler/src/main/java/com/dfsek/terra/addons/terrascript/sampler/ConstantSamplerFunction.java @@ -1,28 +1,28 @@ package com.dfsek.terra.addons.terrascript.sampler; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.parser.lang.functions.Function; import com.dfsek.terra.addons.terrascript.script.TerraImplementationArguments; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; import com.dfsek.terra.api.noise.NoiseSampler; public class ConstantSamplerFunction implements Function { - private final Returnable x, y, z; + private final Expression x, y, z; private final NoiseSampler sampler; private final boolean twoD; - private final Position position; + private final SourcePosition position; public ConstantSamplerFunction(NoiseSampler sampler, - Returnable x, - Returnable y, - Returnable z, + Expression x, + Expression y, + Expression z, boolean twoD, - Position position) { + SourcePosition position) { this.x = x; this.y = y; this.z = z; @@ -32,22 +32,22 @@ public class ConstantSamplerFunction implements Function { } @Override - public Number apply(ImplementationArguments implementationArguments, Scope scope) { + public Number invoke(ImplementationArguments implementationArguments, Scope scope) { TerraImplementationArguments arguments = (TerraImplementationArguments) implementationArguments; - double x = this.x.apply(implementationArguments, scope).doubleValue(); + double x = this.x.invoke(implementationArguments, scope).doubleValue(); - double z = this.z.apply(implementationArguments, scope).doubleValue(); + double z = this.z.invoke(implementationArguments, scope).doubleValue(); if(twoD) { return sampler.noise(arguments.getWorld().getSeed(), x, z); } else { - double y = this.y.apply(implementationArguments, scope).doubleValue(); + double y = this.y.invoke(implementationArguments, scope).doubleValue(); return sampler.noise(arguments.getWorld().getSeed(), x, y, z); } } @Override - public Position getPosition() { + public SourcePosition getPosition() { return position; } diff --git a/common/addons/terrascript-function-sampler/src/main/java/com/dfsek/terra/addons/terrascript/sampler/SamplerFunction.java b/common/addons/terrascript-function-sampler/src/main/java/com/dfsek/terra/addons/terrascript/sampler/SamplerFunction.java index abaafecab..4da543eb9 100644 --- a/common/addons/terrascript-function-sampler/src/main/java/com/dfsek/terra/addons/terrascript/sampler/SamplerFunction.java +++ b/common/addons/terrascript-function-sampler/src/main/java/com/dfsek/terra/addons/terrascript/sampler/SamplerFunction.java @@ -3,30 +3,30 @@ package com.dfsek.terra.addons.terrascript.sampler; import java.util.function.Supplier; import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.parser.lang.functions.Function; import com.dfsek.terra.addons.terrascript.script.TerraImplementationArguments; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; import com.dfsek.terra.api.noise.NoiseSampler; public class SamplerFunction implements Function { - private final Returnable x, y, z; - private final Returnable function; + private final Expression x, y, z; + private final Expression function; private final java.util.function.Function, NoiseSampler> samplerFunction; private final boolean twoD; - private final Position position; + private final SourcePosition position; - public SamplerFunction(Returnable function, - Returnable x, - Returnable y, - Returnable z, + public SamplerFunction(Expression function, + Expression x, + Expression y, + Expression z, java.util.function.Function, NoiseSampler> samplerFunction, boolean twoD, - Position position) { + SourcePosition position) { this.x = x; this.y = y; this.z = z; @@ -37,23 +37,23 @@ public class SamplerFunction implements Function { } @Override - public Number apply(ImplementationArguments implementationArguments, Scope scope) { + public Number invoke(ImplementationArguments implementationArguments, Scope scope) { TerraImplementationArguments arguments = (TerraImplementationArguments) implementationArguments; - double x = this.x.apply(implementationArguments, scope).doubleValue(); + double x = this.x.invoke(implementationArguments, scope).doubleValue(); - double z = this.z.apply(implementationArguments, scope).doubleValue(); + double z = this.z.invoke(implementationArguments, scope).doubleValue(); - NoiseSampler sampler = samplerFunction.apply(() -> function.apply(implementationArguments, scope)); + NoiseSampler sampler = samplerFunction.apply(() -> function.invoke(implementationArguments, scope)); if(twoD) { return sampler.noise(arguments.getWorld().getSeed(), x, z); } else { - double y = this.y.apply(implementationArguments, scope).doubleValue(); + double y = this.y.invoke(implementationArguments, scope).doubleValue(); return sampler.noise(arguments.getWorld().getSeed(), x, y, z); } } @Override - public Position getPosition() { + public SourcePosition getPosition() { return position; } diff --git a/common/addons/terrascript-function-sampler/src/main/java/com/dfsek/terra/addons/terrascript/sampler/SamplerFunctionBuilder.java b/common/addons/terrascript-function-sampler/src/main/java/com/dfsek/terra/addons/terrascript/sampler/SamplerFunctionBuilder.java index 07ce640fd..75fe5e1ee 100644 --- a/common/addons/terrascript-function-sampler/src/main/java/com/dfsek/terra/addons/terrascript/sampler/SamplerFunctionBuilder.java +++ b/common/addons/terrascript-function-sampler/src/main/java/com/dfsek/terra/addons/terrascript/sampler/SamplerFunctionBuilder.java @@ -6,12 +6,12 @@ import java.util.Map; import java.util.Objects; import com.dfsek.terra.addons.noise.config.DimensionApplicableNoiseSampler; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; -import com.dfsek.terra.addons.terrascript.parser.lang.Returnable.ReturnType; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression; +import com.dfsek.terra.addons.terrascript.parser.lang.Expression.ReturnType; import com.dfsek.terra.addons.terrascript.parser.lang.constants.NumericConstant; import com.dfsek.terra.addons.terrascript.parser.lang.constants.StringConstant; import com.dfsek.terra.addons.terrascript.parser.lang.functions.FunctionBuilder; -import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class SamplerFunctionBuilder implements FunctionBuilder> { @@ -33,25 +33,25 @@ public class SamplerFunctionBuilder implements FunctionBuilder build(List> argumentList, - Position position) { - Returnable arg = (Returnable) argumentList.get(0); + public com.dfsek.terra.addons.terrascript.parser.lang.functions.Function build(List> argumentList, + SourcePosition position) { + Expression arg = (Expression) argumentList.get(0); if(argumentList.size() == 3) { // 2D if(arg instanceof StringConstant constant) { return new ConstantSamplerFunction(Objects.requireNonNull(samplers2d.get(constant.getConstant()), "No such 2D noise function " + constant.getConstant()) .getSampler(), - (Returnable) argumentList.get(1), + (Expression) argumentList.get(1), new NumericConstant(0, position), - (Returnable) argumentList.get(2), + (Expression) argumentList.get(2), true, position); } else { - return new SamplerFunction((Returnable) argumentList.get(0), - (Returnable) argumentList.get(1), + return new SamplerFunction((Expression) argumentList.get(0), + (Expression) argumentList.get(1), new NumericConstant(0, position), - (Returnable) argumentList.get(2), + (Expression) argumentList.get(2), s -> Objects.requireNonNull(samplers2d.get(s.get()), "No such 2D noise function " + s.get()) .getSampler(), true, @@ -63,16 +63,16 @@ public class SamplerFunctionBuilder implements FunctionBuilder) argumentList.get(1), - (Returnable) argumentList.get(2), - (Returnable) argumentList.get(3), + (Expression) argumentList.get(1), + (Expression) argumentList.get(2), + (Expression) argumentList.get(3), true, position); } else { - return new SamplerFunction((Returnable) argumentList.get(0), - (Returnable) argumentList.get(1), - (Returnable) argumentList.get(2), - (Returnable) argumentList.get(3), + return new SamplerFunction((Expression) argumentList.get(0), + (Expression) argumentList.get(1), + (Expression) argumentList.get(2), + (Expression) argumentList.get(3), s -> Objects.requireNonNull(samplers3d.get(s.get()), "No such 3D noise function " + s.get()) .getSampler(), true,