| summaryrefslogtreecommitdiff |
diff options
22 files changed, 366 insertions, 75 deletions
diff --git a/src/core/src/tonkadur/error/BasicError.java b/src/core/src/tonkadur/error/BasicError.java new file mode 100644 index 0000000..9c0f01d --- /dev/null +++ b/src/core/src/tonkadur/error/BasicError.java @@ -0,0 +1,37 @@ +package tonkadur.error; + +public class BasicError extends tonkadur.error.Error +{ + /***************************************************************************/ + /**** MEMBERS **************************************************************/ + /***************************************************************************/ + protected final String description; + + /***************************************************************************/ + /**** PUBLIC ***************************************************************/ + /***************************************************************************/ + public BasicError + ( + final ErrorLevel error_level, + final ErrorCategory error_category, + final String description + ) + { + super(error_level, error_category); + + this.description = description; + } + + @Override + public String toString () + { + final StringBuilder sb = new StringBuilder(); + + sb.append(error_level.toString()); + sb.append(error_category.toString()); + sb.append(System.lineSeparator()); + sb.append(description); + + return sb.toString(); + } +} diff --git a/src/core/src/tonkadur/fate/v1/error/InvalidTypeArityException.java b/src/core/src/tonkadur/fate/v1/error/InvalidTypeArityException.java new file mode 100644 index 0000000..417eb79 --- /dev/null +++ b/src/core/src/tonkadur/fate/v1/error/InvalidTypeArityException.java @@ -0,0 +1,54 @@ +package tonkadur.fate.v1.error; + +import tonkadur.error.ErrorLevel; + +import tonkadur.parser.Origin; +import tonkadur.parser.ParsingError; + +import tonkadur.fate.v1.lang.type.Type; + +public class InvalidTypeArityException extends ParsingError +{ + /***************************************************************************/ + /**** MEMBERS **************************************************************/ + /***************************************************************************/ + protected final Type base_type; + + /***************************************************************************/ + /**** PUBLIC ***************************************************************/ + /***************************************************************************/ + public InvalidTypeArityException + ( + final Origin call_origin, + final Type base_type + ) + { + super + ( + ErrorLevel.FATAL, + ErrorCategory.INVALID_USE, + call_origin + ); + + this.base_type = base_type; + } + + @Override + public String toString () + { + final StringBuilder sb = new StringBuilder(); + + sb.append(origin.toString()); + sb.append(" "); + sb.append(error_category.toString()); + sb.append(System.lineSeparator()); + + sb.append("Type "); + sb.append(base_type.toString()); + sb.append(" takes "); + sb.append(base_type.get_parameters().size()); + sb.append(" type(s) as parameter(s)."); + + return sb.toString(); + } +} diff --git a/src/core/src/tonkadur/fate/v1/error/NotAReferenceException.java b/src/core/src/tonkadur/fate/v1/error/NotAReferenceException.java new file mode 100644 index 0000000..396b4fd --- /dev/null +++ b/src/core/src/tonkadur/fate/v1/error/NotAReferenceException.java @@ -0,0 +1,53 @@ +package tonkadur.fate.v1.error; + +import tonkadur.error.ErrorLevel; + +import tonkadur.parser.Origin; +import tonkadur.parser.ParsingError; + +import tonkadur.fate.v1.lang.meta.Computation; + +public class NotAReferenceException extends ParsingError +{ + /***************************************************************************/ + /**** MEMBERS **************************************************************/ + /***************************************************************************/ + protected final Computation computation; + + /***************************************************************************/ + /**** PUBLIC ***************************************************************/ + /***************************************************************************/ + public NotAReferenceException + ( + final Computation computation + ) + { + super + ( + ErrorLevel.WARNING, + ErrorCategory.INVALID_USE, + computation.get_origin() + ); + + this.computation = computation; + } + + @Override + public String toString () + { + final StringBuilder sb = new StringBuilder(); + + sb.append(origin.toString()); + sb.append(" "); + sb.append(error_category.toString()); + sb.append(System.lineSeparator()); + + sb.append("The computation "); + sb.append(computation.toString()); + sb.append(" is being used as a reference, but isn't one."); + sb.append(" The instruction using it will not be able to modify the"); + sb.append(" memory you thought was targeted by this computation."); + + return sb.toString(); + } +} diff --git a/src/core/src/tonkadur/fate/v1/lang/Sequence.java b/src/core/src/tonkadur/fate/v1/lang/Sequence.java index 5356cba..0b903c6 100644 --- a/src/core/src/tonkadur/fate/v1/lang/Sequence.java +++ b/src/core/src/tonkadur/fate/v1/lang/Sequence.java @@ -82,7 +82,7 @@ public class Sequence extends DeclaredEntity return null; } - public boolean assert_can_take_parameters + public boolean propagate_expected_types_and_assert_can_take_parameters ( final Origin origin, final List<Computation> parameters diff --git a/src/core/src/tonkadur/fate/v1/lang/World.java b/src/core/src/tonkadur/fate/v1/lang/World.java index bc85e83..8355a2e 100644 --- a/src/core/src/tonkadur/fate/v1/lang/World.java +++ b/src/core/src/tonkadur/fate/v1/lang/World.java @@ -391,7 +391,11 @@ public class World { if ( - !seq.assert_can_take_parameters(use.get_car(), use.get_cdr()) + !seq.propagate_expected_types_and_assert_can_take_parameters + ( + use.get_car(), + use.get_cdr() + ) ) { is_sane = false; diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/FieldAccess.java b/src/core/src/tonkadur/fate/v1/lang/computation/FieldAccess.java index d48c997..dc9cea7 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/FieldAccess.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/FieldAccess.java @@ -85,7 +85,7 @@ public class FieldAccess extends Computation ( origin, current_type, - Collections.singleton(Type.ANY), // FIXME: Type.STRUCT + Collections.singleton(Type.ANY), // TODO: add StructType.ARCHETYPE parent.toString() ) ); diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/GenericComputation.java b/src/core/src/tonkadur/fate/v1/lang/computation/GenericComputation.java index d2a5ef0..4f50166 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/GenericComputation.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/GenericComputation.java @@ -5,7 +5,13 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import tonkadur.error.BasicError; +import tonkadur.error.ErrorCategory; +import tonkadur.error.ErrorLevel; +import tonkadur.error.ErrorManager; + import tonkadur.parser.Origin; +import tonkadur.parser.BasicParsingError; import tonkadur.functional.Cons; @@ -45,16 +51,22 @@ public abstract class GenericComputation extends Computation if (previous_entry != null) { - // TODO Exception handling. - throw new Exception + ErrorManager.handle ( - "[F] Unable to add alias for Generic Fate Computation '" - + alias - + "' from class '" - + c.getName() - + "': it has already been claimed by class '" - + previous_entry.getName() - + "'." + new BasicError + ( + ErrorLevel.FATAL, + ErrorCategory.PROGRAMMING_ERROR, + ( + "Unable to add alias for Generic Fate Computation '" + + alias + + "' from class '" + + c.getName() + + "': it has already been claimed by class '" + + previous_entry.getName() + + "'." + ) + ) ); } @@ -88,16 +100,16 @@ public abstract class GenericComputation extends Computation if (computation_class == null) { - // TODO use a separate class for this. - throw - new Exception + ErrorManager.handle + ( + new BasicParsingError ( - "[E] Unknown Generic Fate Computation '" - + name - + "' at " - + origin - + "." - ); + ErrorLevel.ERROR, + tonkadur.fate.v1.error.ErrorCategory.UNKNOWN, + origin, + ("Unknown Generic Fate Computation '" + name + "'.") + ) + ); } return diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/GenericInstruction.java b/src/core/src/tonkadur/fate/v1/lang/instruction/GenericInstruction.java index 065c7db..8c2b77e 100644 --- a/src/core/src/tonkadur/fate/v1/lang/instruction/GenericInstruction.java +++ b/src/core/src/tonkadur/fate/v1/lang/instruction/GenericInstruction.java @@ -5,7 +5,13 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import tonkadur.error.BasicError; +import tonkadur.error.ErrorCategory; +import tonkadur.error.ErrorLevel; +import tonkadur.error.ErrorManager; + import tonkadur.parser.Origin; +import tonkadur.parser.BasicParsingError; import tonkadur.functional.Cons; @@ -46,16 +52,22 @@ public abstract class GenericInstruction extends Instruction if (previous_entry != null) { - // TODO Exception handling. - throw new Exception + ErrorManager.handle ( - "[F] Unable to add alias for Generic Fate Instruction '" - + alias - + "' from class '" - + c.getName() - + "': it has already been claimed by class '" - + previous_entry.getName() - + "'." + new BasicError + ( + ErrorLevel.FATAL, + ErrorCategory.PROGRAMMING_ERROR, + ( + "Unable to add alias for Generic Fate Instruction '" + + alias + + "' from class '" + + c.getName() + + "': it has already been claimed by class '" + + previous_entry.getName() + + "'." + ) + ) ); } @@ -89,16 +101,16 @@ public abstract class GenericInstruction extends Instruction if (computation_class == null) { - // TODO use a separate class for this. - throw - new Exception + ErrorManager.handle + ( + new BasicParsingError ( - "[E] Unknown Generic Fate Instruction '" - + name - + "' at " - + origin - + "." - ); + ErrorLevel.ERROR, + tonkadur.fate.v1.error.ErrorCategory.UNKNOWN, + origin, + ("Unknown Generic Fate Instruction '" + name + "'.") + ) + ); } return diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/SequenceCall.java b/src/core/src/tonkadur/fate/v1/lang/instruction/SequenceCall.java index 2972417..43e56e6 100644 --- a/src/core/src/tonkadur/fate/v1/lang/instruction/SequenceCall.java +++ b/src/core/src/tonkadur/fate/v1/lang/instruction/SequenceCall.java @@ -55,7 +55,6 @@ public class SequenceCall extends Instruction return parameters; } - // TODO: call this at some point. public void perform_signature_checks (final List<Type> signature) throws ParsingError { diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/SequenceJump.java b/src/core/src/tonkadur/fate/v1/lang/instruction/SequenceJump.java index f7157ff..5b85568 100644 --- a/src/core/src/tonkadur/fate/v1/lang/instruction/SequenceJump.java +++ b/src/core/src/tonkadur/fate/v1/lang/instruction/SequenceJump.java @@ -38,7 +38,6 @@ public class SequenceJump extends Instruction } /**** Accessors ************************************************************/ - // TODO: call this at some point. public void perform_signature_checks (final List<Type> signature) throws ParsingError { diff --git a/src/core/src/tonkadur/fate/v1/lang/meta/Computation.java b/src/core/src/tonkadur/fate/v1/lang/meta/Computation.java index 62d88ed..173ad53 100644 --- a/src/core/src/tonkadur/fate/v1/lang/meta/Computation.java +++ b/src/core/src/tonkadur/fate/v1/lang/meta/Computation.java @@ -1,8 +1,12 @@ package tonkadur.fate.v1.lang.meta; +import tonkadur.error.ErrorManager; + import tonkadur.parser.Origin; import tonkadur.parser.ParsingError; +import tonkadur.fate.v1.error.NotAReferenceException; + import tonkadur.fate.v1.lang.type.Type; import tonkadur.fate.v1.lang.type.FutureType; @@ -57,14 +61,9 @@ public abstract class Computation extends Node public void use_as_reference () throws ParsingError { - // TODO: proper ParsingError. - System.err.println + ErrorManager.handle ( - "[W] Computation at " - + origin.toString() - + " is being used as a reference, but isn't one. The instruction will" - + " not be able to modify the memory you thought was targeted by this" - + " computation." + new NotAReferenceException(this) ); } diff --git a/src/core/src/tonkadur/fate/v1/lang/meta/VariableFromWord.java b/src/core/src/tonkadur/fate/v1/lang/meta/VariableFromWord.java index 8fa713d..813cef4 100644 --- a/src/core/src/tonkadur/fate/v1/lang/meta/VariableFromWord.java +++ b/src/core/src/tonkadur/fate/v1/lang/meta/VariableFromWord.java @@ -7,10 +7,17 @@ import java.util.Arrays; import java.util.List; import java.util.ArrayList; +import tonkadur.error.ErrorLevel; +import tonkadur.error.ErrorManager; + import tonkadur.parser.Origin; import tonkadur.parser.ParsingError; +import tonkadur.parser.BasicParsingError; + +import tonkadur.fate.v1.error.ErrorCategory; import tonkadur.fate.v1.parser.ParserData; + import tonkadur.fate.v1.lang.Variable; import tonkadur.fate.v1.lang.computation.Constant; @@ -109,10 +116,21 @@ public class VariableFromWord } else { - /* TODO: error */ - System.err.println("Unimplemented error in VariableFromWord."); - - System.exit(-1); + ErrorManager.handle + ( + new BasicParsingError + ( + ErrorLevel.ERROR, + ErrorCategory.INVALID_USE, + origin.with_hint(subref), + ( + "Attempting to access a subreference from a value of" + + " type " + + t.toString() + + ", despite this type not being useable in this way." + ) + ) + ); } } } diff --git a/src/core/src/tonkadur/fate/v1/lang/type/CollectionType.java b/src/core/src/tonkadur/fate/v1/lang/type/CollectionType.java index c3ffb35..e563be2 100644 --- a/src/core/src/tonkadur/fate/v1/lang/type/CollectionType.java +++ b/src/core/src/tonkadur/fate/v1/lang/type/CollectionType.java @@ -4,11 +4,12 @@ import java.util.List; import java.util.Collections; import tonkadur.error.ErrorManager; -import tonkadur.parser.ParsingError; +import tonkadur.parser.ParsingError; import tonkadur.parser.Origin; import tonkadur.fate.v1.error.InvalidTypeException; +import tonkadur.fate.v1.error.InvalidTypeArityException; import tonkadur.fate.v1.lang.meta.DeclaredEntity; @@ -223,7 +224,7 @@ public class CollectionType extends Type { if (this.parameters.size() != parameters.size()) { - // TODO: error; + ErrorManager.handle(new InvalidTypeArityException(origin, this)); } return new CollectionType(origin, parameters.get(0), is_set, name); diff --git a/src/core/src/tonkadur/fate/v1/lang/type/ConsType.java b/src/core/src/tonkadur/fate/v1/lang/type/ConsType.java index 6430494..be3d60d 100644 --- a/src/core/src/tonkadur/fate/v1/lang/type/ConsType.java +++ b/src/core/src/tonkadur/fate/v1/lang/type/ConsType.java @@ -3,8 +3,12 @@ package tonkadur.fate.v1.lang.type; import java.util.Arrays; import java.util.List; +import tonkadur.error.ErrorManager; + import tonkadur.parser.Origin; +import tonkadur.fate.v1.error.InvalidTypeArityException; + import tonkadur.fate.v1.lang.meta.DeclaredEntity; public class ConsType extends Type @@ -50,7 +54,7 @@ public class ConsType extends Type { if (this.parameters.size() != parameters.size()) { - // TODO: error; + ErrorManager.handle(new InvalidTypeArityException(origin, this)); } return new ConsType(origin, parameters.get(0), parameters.get(1), name); diff --git a/src/core/src/tonkadur/fate/v1/lang/type/DictionaryType.java b/src/core/src/tonkadur/fate/v1/lang/type/DictionaryType.java index b4d227f..9755e36 100644 --- a/src/core/src/tonkadur/fate/v1/lang/type/DictionaryType.java +++ b/src/core/src/tonkadur/fate/v1/lang/type/DictionaryType.java @@ -4,11 +4,12 @@ import java.util.List; import java.util.Arrays; import tonkadur.error.ErrorManager; -import tonkadur.parser.ParsingError; +import tonkadur.parser.ParsingError; import tonkadur.parser.Origin; import tonkadur.fate.v1.error.InvalidTypeException; +import tonkadur.fate.v1.error.InvalidTypeArityException; import tonkadur.fate.v1.lang.meta.DeclaredEntity; @@ -191,7 +192,7 @@ public class DictionaryType extends Type { if (this.parameters.size() != parameters.size()) { - // TODO: error; + ErrorManager.handle(new InvalidTypeArityException(origin, this)); } return diff --git a/src/core/src/tonkadur/fate/v1/lang/type/ExtraType.java b/src/core/src/tonkadur/fate/v1/lang/type/ExtraType.java index 919abd6..151cb98 100644 --- a/src/core/src/tonkadur/fate/v1/lang/type/ExtraType.java +++ b/src/core/src/tonkadur/fate/v1/lang/type/ExtraType.java @@ -4,8 +4,12 @@ import java.util.List; import java.util.HashMap; import java.util.Map; +import tonkadur.error.ErrorManager; + import tonkadur.parser.Origin; +import tonkadur.fate.v1.error.InvalidTypeArityException; + import tonkadur.fate.v1.lang.meta.DeclaredEntity; import tonkadur.fate.v1.lang.meta.RecurrentChecks; @@ -37,7 +41,7 @@ public class ExtraType extends Type { if (this.parameters.size() != parameters.size()) { - // TODO: error; + ErrorManager.handle(new InvalidTypeArityException(origin, this)); } return new ExtraType(origin, this, name, parameters); diff --git a/src/core/src/tonkadur/fate/v1/lang/type/FutureType.java b/src/core/src/tonkadur/fate/v1/lang/type/FutureType.java index f85053d..ca9bd5a 100644 --- a/src/core/src/tonkadur/fate/v1/lang/type/FutureType.java +++ b/src/core/src/tonkadur/fate/v1/lang/type/FutureType.java @@ -6,11 +6,15 @@ import java.util.Collection; import java.util.Collections; import tonkadur.error.ErrorManager; +import tonkadur.error.BasicError; +import tonkadur.error.ErrorLevel; import tonkadur.parser.Context; import tonkadur.parser.Location; import tonkadur.parser.Origin; +import tonkadur.fate.v1.error.ErrorCategory; + import tonkadur.fate.v1.lang.meta.DeclaredEntity; public class FutureType extends Type @@ -31,16 +35,28 @@ public class FutureType extends Type { if (resolved_type == null) { - // TODO: proper error handling - // - System.err.println - ( - "[F] Future Type from " - + get_origin().toString() - + " used prior to resolution." - ); - - System.exit(-1); + try + { + ErrorManager.handle + ( + new BasicError + ( + ErrorLevel.FATAL, + ErrorCategory.MISSING_DECLARATION, + ( + "Future Type from " + + get_origin().toString() + + " used prior to resolution." + ) + ) + ); + } + catch (final Throwable t) + { + t.printStackTrace(); + System.err.println(t.toString()); + System.exit(-1); + } } } diff --git a/src/core/src/tonkadur/fate/v1/lang/type/PointerType.java b/src/core/src/tonkadur/fate/v1/lang/type/PointerType.java index daf5bc8..a3e25ae 100644 --- a/src/core/src/tonkadur/fate/v1/lang/type/PointerType.java +++ b/src/core/src/tonkadur/fate/v1/lang/type/PointerType.java @@ -3,8 +3,12 @@ package tonkadur.fate.v1.lang.type; import java.util.Collections; import java.util.List; +import tonkadur.error.ErrorManager; + import tonkadur.parser.Origin; +import tonkadur.fate.v1.error.InvalidTypeArityException; + import tonkadur.fate.v1.lang.meta.DeclaredEntity; public class PointerType extends Type @@ -133,7 +137,7 @@ public class PointerType extends Type { if (this.parameters.size() != 1) { - // TODO: error; + ErrorManager.handle(new InvalidTypeArityException(origin, this)); } return new PointerType(origin, parameters.get(0), "auto gen"); diff --git a/src/core/src/tonkadur/fate/v1/lang/type/Type.java b/src/core/src/tonkadur/fate/v1/lang/type/Type.java index 1bed5da..bb1ec71 100644 --- a/src/core/src/tonkadur/fate/v1/lang/type/Type.java +++ b/src/core/src/tonkadur/fate/v1/lang/type/Type.java @@ -14,6 +14,7 @@ import tonkadur.parser.Location; import tonkadur.parser.Origin; import tonkadur.fate.v1.error.InvalidTypeException; +import tonkadur.fate.v1.error.InvalidTypeArityException; import tonkadur.fate.v1.lang.meta.DeclaredEntity; @@ -262,7 +263,7 @@ public class Type extends DeclaredEntity { if (this.parameters.size() != parameters.size()) { - // TODO: error; + ErrorManager.handle(new InvalidTypeArityException(origin, this)); } return new Type(origin, get_base_type(), name, parameters); diff --git a/src/core/src/tonkadur/fate/v1/parser/FateLexer.g4 b/src/core/src/tonkadur/fate/v1/parser/FateLexer.g4 index ca632dd..95a614c 100644 --- a/src/core/src/tonkadur/fate/v1/parser/FateLexer.g4 +++ b/src/core/src/tonkadur/fate/v1/parser/FateLexer.g4 @@ -94,7 +94,6 @@ FOR_EACH_KW: L_PAREN 'for'US'each' SEP+; WHILE_KW: L_PAREN 'while' SEP+; SWITCH_KW: L_PAREN 'switch' SEP+; -// FIXME: this hides generic if_else and if. IF_ELSE_KW: L_PAREN 'if'US'else' SEP+; IF_KW: L_PAREN 'if' SEP+; diff --git a/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 b/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 index aded279..71d1d36 100644 --- a/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 +++ b/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 @@ -19,6 +19,8 @@ options import tonkadur.Files; + import tonkadur.error.ErrorLevel; + import tonkadur.error.ErrorCategory; import tonkadur.error.ErrorManager; import tonkadur.functional.Cons; @@ -26,6 +28,7 @@ options import tonkadur.parser.Context; import tonkadur.parser.Location; import tonkadur.parser.Origin; + import tonkadur.parser.BasicParsingError; /* Conflicts with an existing package */ /* import tonkadur.fate.v1.tonkadur.fate.v1.Utils; */ @@ -34,6 +37,7 @@ options import tonkadur.fate.v1.error.IllegalReferenceNameException; import tonkadur.fate.v1.error.InvalidArityException; import tonkadur.fate.v1.error.InvalidTypeException; + import tonkadur.fate.v1.error.InvalidTypeArityException; import tonkadur.fate.v1.error.UpdatingIllegalVariableFromChoiceException; import tonkadur.fate.v1.error.UnknownExtensionContentException; @@ -228,13 +232,33 @@ first_level_instruction if (arg_count < 0) { - // TODO: show error. + ErrorManager.handle + ( + new BasicParsingError + ( + ErrorLevel.FATAL, + ErrorCategory.INVALID_INPUT, + start_origin.with_hint("second parameter"), + "An integer higher than zero is needed here." + ) + ); } } catch (final Exception e) { arg_count = 0; - // TODO: show error. + + ErrorManager.handle + ( + new BasicParsingError + ( + ErrorLevel.FATAL, + ErrorCategory.INVALID_INPUT, + start_origin.with_hint("second parameter"), + "An integer higher than zero is needed here." + ) + ); + throw e; } @@ -245,7 +269,18 @@ first_level_instruction catch (final Exception e) { is_comparable = false; - // TODO: show error. + + ErrorManager.handle + ( + new BasicParsingError + ( + ErrorLevel.FATAL, + ErrorCategory.INVALID_INPUT, + start_origin.with_hint("third parameter"), + "An boolean is needed here." + ) + ); + throw e; } @@ -1649,7 +1684,10 @@ returns [Type result] if ($result.get_parameters().size() != 0) { - // TODO: throw error. + ErrorManager.handle + ( + new InvalidTypeArityException(($word.origin), ($result)) + ); } } diff --git a/src/core/src/tonkadur/parser/BasicParsingError.java b/src/core/src/tonkadur/parser/BasicParsingError.java new file mode 100644 index 0000000..f003e77 --- /dev/null +++ b/src/core/src/tonkadur/parser/BasicParsingError.java @@ -0,0 +1,36 @@ +package tonkadur.parser; + +import tonkadur.error.ErrorCategory; +import tonkadur.error.ErrorLevel; + +public class BasicParsingError extends ParsingError +{ + protected final String description; + + public BasicParsingError + ( + final ErrorLevel error_level, + final ErrorCategory error_category, + final Origin origin, + final String description + ) + { + super(error_level, error_category, origin); + + this.description = description; + } + + @Override + public String toString () + { + final StringBuilder sb = new StringBuilder(); + + sb.append(origin.toString()); + sb.append(" "); + sb.append(error_category.toString()); + sb.append(System.lineSeparator()); + sb.append(description); + + return sb.toString(); + } +} |


