35 lines
1.1 KiB
C#
35 lines
1.1 KiB
C#
using Qrakhen.Qamp.Core.Collections.Abstractions;
|
|
using Qrakhen.Qamp.Core.Tokenization;
|
|
using Qrakhen.Qamp.Core.Values;
|
|
|
|
namespace Qrakhen.Qamp.Core;
|
|
|
|
public class QampException(string message, object? context = null)
|
|
: Exception(message)
|
|
{
|
|
public readonly object? Context = context;
|
|
}
|
|
|
|
public class ReaderException(string message, IReader<Token> reader)
|
|
: QampException(message, reader.CurrentPosition)
|
|
{
|
|
public readonly IReader<Token> Reader = reader;
|
|
}
|
|
|
|
public class TokenException(string message, IReader<Token> reader, Token token)
|
|
: ReaderException($"TokenError {token} at {token.Position}: {message}", reader)
|
|
{
|
|
public readonly Token Token = token;
|
|
}
|
|
|
|
public class RuntimeException(string message, object? context = null)
|
|
: QampException(message, context);
|
|
|
|
public class DivisionByZeroException(string? message, object? context = null)
|
|
: RuntimeException(message ?? "Can not divide by zero", context);
|
|
|
|
public class ConversionException(string message, Value value, object? context = null)
|
|
: RuntimeException(message, context)
|
|
{
|
|
public readonly Value Value = value;
|
|
} |