diff --git a/src/main/java/carpet/script/Expression.java b/src/main/java/carpet/script/Expression.java index bba8bfcf..3689d1f5 100644 --- a/src/main/java/carpet/script/Expression.java +++ b/src/main/java/carpet/script/Expression.java @@ -1346,14 +1346,13 @@ public class Expression { String operator = pair.getKey(); String function = pair.getValue(); - if ((symbol.equals(operator) || symbol.equals(function)) && node.args.size() > 0) + if ((symbol.equals(operator) || symbol.equals(function)) && !node.args.isEmpty()) { boolean leftOptimizable = operators.get(operator).isLeftAssoc(); ExpressionNode optimizedChild = node.args.get(leftOptimizable ? 0 : (node.args.size() - 1)); String type = optimizedChild.token.surface; if ((type.equals(operator) || type.equals(function)) && (!(optimizedChild.op instanceof LazyValue.ContextFreeLazyValue))) { - optimized = true; List newargs = new ArrayList<>(); if (leftOptimizable) { @@ -1378,6 +1377,7 @@ public class Expression } node.token.morph(Token.TokenType.FUNCTION, function); node.args = newargs; + return true; } } } diff --git a/src/main/java/carpet/script/language/Operators.java b/src/main/java/carpet/script/language/Operators.java index a1c2d1a2..ddad96fe 100644 --- a/src/main/java/carpet/script/language/Operators.java +++ b/src/main/java/carpet/script/language/Operators.java @@ -346,6 +346,7 @@ public class Operators return Value.TRUE; }); expression.addFunctionalEquivalence("==", "equal"); + expression.addBinaryOperator("!=", precedence.get("equal==!="), false, (v1, v2) -> v1.equals(v2) ? Value.FALSE : Value.TRUE); expression.addFunction("unique", lv -> { diff --git a/src/main/java/carpet/script/value/LazyListValue.java b/src/main/java/carpet/script/value/LazyListValue.java index 99ae419c..1e2d183b 100644 --- a/src/main/java/carpet/script/value/LazyListValue.java +++ b/src/main/java/carpet/script/value/LazyListValue.java @@ -56,7 +56,7 @@ public abstract class LazyListValue extends AbstractListValue implements Iterato @Override public String getString() { - return String.format(Locale.ROOT, "[%s, %s, ..., %s)", NumericValue.of(start).getString(), NumericValue.of(start + stepp).getString(), NumericValue.of(limit).getString()); + return String.format(Locale.ROOT, "<%s, %s, ..., %s)", NumericValue.of(start).getString(), NumericValue.of(start + stepp).getString(), NumericValue.of(limit).getString()); } }; } @@ -104,7 +104,7 @@ public abstract class LazyListValue extends AbstractListValue implements Iterato @Override public String getString() { - return String.format(Locale.ROOT, "[%s, %s, ..., %s)", NumericValue.of(start).getString(), NumericValue.of(start + stepp).getString(), NumericValue.of(limit).getString()); + return String.format(Locale.ROOT, "<%s, %s, ..., %s)", NumericValue.of(start).getString(), NumericValue.of(start + stepp).getString(), NumericValue.of(limit).getString()); } }; }