summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2021-09-06 21:48:18 +0200
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2021-09-06 21:48:18 +0200
commit0bc7e2178111f43b63bd8b5ea25a5f4c5277dbfb (patch)
treea80de01d4a7dffc1f2e75bc84a63648245549b25 /src
parent08776453837b50642b678ae864cfc6b70ec7f2b5 (diff)
Resolving a lot of TODOs.
Diffstat (limited to 'src')
-rw-r--r--src/core/src/tonkadur/error/BasicError.java37
-rw-r--r--src/core/src/tonkadur/fate/v1/error/InvalidTypeArityException.java54
-rw-r--r--src/core/src/tonkadur/fate/v1/error/NotAReferenceException.java53
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/Sequence.java2
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/World.java6
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/computation/FieldAccess.java2
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/computation/GenericComputation.java48
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/GenericInstruction.java48
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/SequenceCall.java1
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/SequenceJump.java1
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/meta/Computation.java13
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/meta/VariableFromWord.java26
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/type/CollectionType.java5
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/type/ConsType.java6
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/type/DictionaryType.java5
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/type/ExtraType.java6
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/type/FutureType.java36
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/type/PointerType.java6
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/type/Type.java3
-rw-r--r--src/core/src/tonkadur/fate/v1/parser/FateLexer.g41
-rw-r--r--src/core/src/tonkadur/fate/v1/parser/FateParser.g446
-rw-r--r--src/core/src/tonkadur/parser/BasicParsingError.java36
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();
+ }
+}