imports and better error reporting and stacktraces

This commit is contained in:
gnembon committed 2020-01-05 02:24:48 -04:00
1 parent 15fe9c5ad9
commit 1650f3233b
15 files changed
+351 -245

No files matched your search

@@ -1,9 +1,28 @@
package carpet.script.exception;
public class CarpetExpressionException extends ExpressionException
import carpet.script.value.FunctionValue;
import carpet.utils.Messenger;
import net.minecraft.server.command.ServerCommandSource;
import java.util.List;
public class CarpetExpressionException extends RuntimeException
{
public CarpetExpressionException(String message)
public List<FunctionValue> stack;
public CarpetExpressionException(String message, List<FunctionValue> stack)
{
super(message);
this.stack = stack;
}
public void printStack(ServerCommandSource source)
{
if (stack != null && !stack.isEmpty())
{
for (FunctionValue fun : stack)
{
Messenger.m(source, "e ... in "+fun.fullName(), "e /"+(fun.getToken().lineno+1)+":"+(fun.getToken().linepos+1));
}
}
}
}
@@ -1,8 +1,10 @@
package carpet.script.exception;
import carpet.script.Context;
import carpet.script.Expression;
import carpet.script.Fluff;
import carpet.script.Tokenizer;
import carpet.script.value.FunctionValue;
import java.util.ArrayList;
import java.util.List;
@@ -13,38 +15,58 @@ import static carpet.script.ExpressionInspector.Expression_getName;
/* The expression evaluators exception class. */
public class ExpressionException extends RuntimeException
{
public ExpressionException(String message)
public Context context;
public List<FunctionValue> stack = new ArrayList<>();
public ExpressionException(Context c, String message)
{
super(message);
super(makeMessage(c, null, null, message));
context = c;
}
public ExpressionException(Context c, Expression e, Tokenizer.Token t, String message)
{
super(makeMessage(c, e, t, message));
context = c;
}
public ExpressionException(Context c, Expression e, Tokenizer.Token t, String message, List<FunctionValue> stack)
{
super(makeMessage(c, e, t, message));
this.stack.addAll(stack);
context = c;
}
private static Fluff.TriFunction<Expression, Tokenizer.Token, String, List<String>> errorMaker = (expr, token, errmessage) ->
{
List<String> snippet = Expression_getExpressionSnippet(token, expr);
List<String> errMsg = new ArrayList<>(snippet);
if (snippet.size() != 1)
List<String> errMsg = new ArrayList<>();
if (expr != null && token != null)
{
errmessage+= " at line "+(token.lineno+1)+", pos "+(token.linepos+1);
}
else
{
errmessage += " at pos "+(token.pos+1);
}
if (Expression_getName(expr) != null)
{
errmessage += " ("+Expression_getName(expr)+")";
List<String> snippet = Expression_getExpressionSnippet(token, expr);
errMsg.addAll(snippet);
if (snippet.size() != 1)
{
errmessage += " at line " + (token.lineno + 1) + ", pos " + (token.linepos + 1);
}
else
{
errmessage += " at pos " + (token.pos + 1);
}
if (Expression_getName(expr) != null)
{
errmessage += " (" + Expression_getName(expr) + ")";
}
}
errMsg.add(errmessage);
return errMsg;
};
public static Fluff.TriFunction<Expression, Tokenizer.Token, String, List<String>> errorSnooper = null;
static String makeMessage(Expression e, Tokenizer.Token t, String message) throws ExpressionException
static String makeMessage(Context c, Expression e, Tokenizer.Token t, String message) throws ExpressionException
{
if (errorSnooper != null)
if (c.host.errorSnooper != null)
{
List<String> alternative = errorSnooper.apply(e, t, message);
List<String> alternative = c.host.errorSnooper.apply(e, t, message);
if (alternative!= null)
{
return String.join("\n", alternative);
@@ -52,9 +74,4 @@ public class ExpressionException extends RuntimeException
}
return String.join("\n", errorMaker.apply(e, t, message));
}
public ExpressionException(Expression e, Tokenizer.Token t, String message)
{
super(makeMessage(e, t, message));
}
}
@@ -1,8 +1,14 @@
package carpet.script.exception;
import carpet.script.value.FunctionValue;
import java.util.ArrayList;
import java.util.List;
/* The internal expression evaluators exception class. */
public class InternalExpressionException extends ExpressionException
public class InternalExpressionException extends RuntimeException
{
public List<FunctionValue> stack = new ArrayList<>();
public InternalExpressionException(String message)
{
super(message);