diff --git a/src/main/java/carpet/script/Expression.java b/src/main/java/carpet/script/Expression.java index 943901b4..03bf2566 100644 --- a/src/main/java/carpet/script/Expression.java +++ b/src/main/java/carpet/script/Expression.java @@ -3338,11 +3338,11 @@ public class Expression } catch (InternalExpressionException exc) { - throw new ExpressionException(c, this, "Your expression result is incorrect:"+exc.getMessage()); + throw new ExpressionException(c, this, "Your expression result is incorrect: "+exc.getMessage()); } catch (ArithmeticException exc) { - throw new ExpressionException(c, this, "The final result is incorrect, "+exc.getMessage()); + throw new ExpressionException(c, this, "The final result is incorrect: "+exc.getMessage()); } } diff --git a/src/main/java/carpet/script/ScriptHost.java b/src/main/java/carpet/script/ScriptHost.java index f104731b..063625e4 100644 --- a/src/main/java/carpet/script/ScriptHost.java +++ b/src/main/java/carpet/script/ScriptHost.java @@ -129,7 +129,7 @@ public abstract class ScriptHost } else { - targetData.functionImports.put(identifier, sourceData); + targetData.futureImports.put(identifier, sourceData); } } } @@ -168,7 +168,7 @@ public abstract class ScriptHost private ModuleData findModuleDataFromFunctionImports(String name, ModuleData source, int ttl) { - if (ttl > 10) throw new InternalExpressionException("Cannot import "+name+", either your imports are too deep or too loopy"); + if (ttl > 64) throw new InternalExpressionException("Cannot import "+name+", either your imports are too deep or too loopy"); if (source.globalFunctions.containsKey(name)) return source; if (source.functionImports.containsKey(name)) @@ -202,7 +202,7 @@ public abstract class ScriptHost private ModuleData findModuleDataFromGlobalImports(String name, ModuleData source, int ttl) { - if (ttl > 10) throw new InternalExpressionException("Cannot import "+name+", either your imports are too deep or too loopy"); + if (ttl > 64) throw new InternalExpressionException("Cannot import "+name+", either your imports are too deep or too loopy"); if (source.globalVariables.containsKey(name)) return source; if (source.globalsImports.containsKey(name)) @@ -251,18 +251,18 @@ public abstract class ScriptHost public Stream globaVariableNames(Module module, Predicate predicate) { - return Stream.concat( + return Stream.concat(Stream.concat( moduleData.get(module).globalVariables.keySet().stream(), moduleData.get(module).globalsImports.keySet().stream() - ).filter(predicate); + ), moduleData.get(module).futureImports.keySet().stream().filter(s -> s.startsWith("global_"))).filter(predicate); } public Stream globaFunctionNames(Module module, Predicate predicate) { - return Stream.concat( + return Stream.concat(Stream.concat( moduleData.get(module).globalFunctions.keySet().stream(), moduleData.get(module).functionImports.keySet().stream() - ).filter(predicate); + ),moduleData.get(module).futureImports.keySet().stream().filter(s -> !s.startsWith("global_"))).filter(predicate); } public ScriptHost retrieveForExecution(String /*Nullable*/ user) @@ -279,7 +279,7 @@ public abstract class ScriptHost // fixing imports userHost.moduleData.forEach((module, data) -> { - data.setImportsBasedOn(this, this.moduleData.get(data.parent)); + data.setImportsBasedOn(userHost, this.moduleData.get(data.parent)); }); userHosts.put(user, userHost); return userHost; diff --git a/src/main/java/carpet/script/value/FunctionValue.java b/src/main/java/carpet/script/value/FunctionValue.java index ecbf7dd0..aeab0d73 100644 --- a/src/main/java/carpet/script/value/FunctionValue.java +++ b/src/main/java/carpet/script/value/FunctionValue.java @@ -2,7 +2,6 @@ package carpet.script.value; import carpet.script.Context; import carpet.script.Expression; -import carpet.script.ExpressionInspector; import carpet.script.Fluff; import carpet.script.LazyValue; import carpet.script.Tokenizer; @@ -14,9 +13,11 @@ import carpet.script.exception.InternalExpressionException; import carpet.script.exception.ReturnStatement; import carpet.script.exception.ThrowStatement; +import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; public class FunctionValue extends Value implements Fluff.ILazyFunction { @@ -57,6 +58,16 @@ public class FunctionValue extends Value implements Fluff.ILazyFunction return name; } + @Override + public String getPrettyString() + { + List stringArgs= new ArrayList<>(args); + if (outerState != null) + stringArgs.addAll(outerState.entrySet().stream().map(e -> + "outer("+e.getKey()+") = "+e.getValue().evalValue(null).getPrettyString()).collect(Collectors.toList())); + return (name.equals("_")?"":name) +"("+String.join(", ",stringArgs)+")"; + } + public String fullName() {return expression.module == null?name:name+"["+expression.module.getName()+"]";} @Override @@ -107,6 +118,12 @@ public class FunctionValue extends Value implements Fluff.ILazyFunction throw new InternalExpressionException("Function value has no numeric value"); } + @Override + public String getTypeString() + { + return "function"; + } + @Override public Value slice(long from, long to) { diff --git a/src/main/java/carpet/script/value/NumericValue.java b/src/main/java/carpet/script/value/NumericValue.java index 77ca3ea7..5d31654b 100644 --- a/src/main/java/carpet/script/value/NumericValue.java +++ b/src/main/java/carpet/script/value/NumericValue.java @@ -42,7 +42,7 @@ public class NumericValue extends Value } else { - return String.format("%.3f..", getDouble()); + return String.format("%.1f..", getDouble()); } }