| 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(); +   } +} | 


