summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornsensfel <SpamShield0@noot-noot.org>2020-09-10 17:19:53 +0200
committernsensfel <SpamShield0@noot-noot.org>2020-09-10 17:19:53 +0200
commit54bff1ac3084bde69fd5a14feb0fedc496f91a85 (patch)
tree45574c90873df61724c8a1e2227f7cf632e6be80
parent066fcb03884cfdb79b3ff3825064debeb9e73126 (diff)
...
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/computation/AddElementComputation.java2
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/computation/AddElementsOfComputation.java6
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/computation/MapComputation.java3
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/computation/Range.java54
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/computation/RemoveElementAtComputation.java2
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/computation/ReverseListComputation.java6
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/computation/ShuffleComputation.java8
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/meta/ComputationVisitor.java38
-rw-r--r--src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/ComputationCompiler.java108
-rw-r--r--src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/InstructionCompiler.java51
10 files changed, 231 insertions, 47 deletions
diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/AddElementComputation.java b/src/core/src/tonkadur/fate/v1/lang/computation/AddElementComputation.java
index e0ef551..82461d3 100644
--- a/src/core/src/tonkadur/fate/v1/lang/computation/AddElementComputation.java
+++ b/src/core/src/tonkadur/fate/v1/lang/computation/AddElementComputation.java
@@ -24,7 +24,7 @@ public class AddElementComputation extends Computation
/**** Constructors *********************************************************/
protected AddElementComputation
(
- final AddElementAt instruction
+ final AddElement instruction
)
{
super(instruction.get_origin(), instruction.get_collection().get_type());
diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/AddElementsOfComputation.java b/src/core/src/tonkadur/fate/v1/lang/computation/AddElementsOfComputation.java
index 5d87e0b..b6ecec4 100644
--- a/src/core/src/tonkadur/fate/v1/lang/computation/AddElementsOfComputation.java
+++ b/src/core/src/tonkadur/fate/v1/lang/computation/AddElementsOfComputation.java
@@ -28,7 +28,11 @@ public class AddElementsOfComputation extends Computation
final AddElementsOf instruction
)
{
- super(instruction.get_origin(), instruction.get_collection().get_type());
+ super
+ (
+ instruction.get_origin(),
+ instruction.get_source_collection().get_type()
+ );
this.instruction = instruction;
}
diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/MapComputation.java b/src/core/src/tonkadur/fate/v1/lang/computation/MapComputation.java
index d042dd0..c81926e 100644
--- a/src/core/src/tonkadur/fate/v1/lang/computation/MapComputation.java
+++ b/src/core/src/tonkadur/fate/v1/lang/computation/MapComputation.java
@@ -58,7 +58,8 @@ public class MapComputation extends Computation
(
origin,
((LambdaType) lambda_function.get_type()).get_return_type(),
- ((CollectionType) collection_in.get_type()).is_set()
+ ((CollectionType) collection_in.get_type()).is_set(),
+ "auto generated"
);
return new MapComputation(parent, type);
diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/Range.java b/src/core/src/tonkadur/fate/v1/lang/computation/Range.java
index 2398bdf..257a722 100644
--- a/src/core/src/tonkadur/fate/v1/lang/computation/Range.java
+++ b/src/core/src/tonkadur/fate/v1/lang/computation/Range.java
@@ -1,4 +1,4 @@
-package tonkadur.fate.v1.lang.instruction;
+package tonkadur.fate.v1.lang.computation;
import java.util.Collections;
@@ -11,16 +11,14 @@ import tonkadur.fate.v1.error.InvalidTypeException;
import tonkadur.fate.v1.lang.type.CollectionType;
import tonkadur.fate.v1.lang.type.Type;
-import tonkadur.fate.v1.lang.meta.InstructionVisitor;
-import tonkadur.fate.v1.lang.meta.Instruction;
+import tonkadur.fate.v1.lang.meta.ComputationVisitor;
import tonkadur.fate.v1.lang.meta.Computation;
-public class Range extends Instruction
+public class Range extends Computation
{
/***************************************************************************/
/**** MEMBERS **************************************************************/
/***************************************************************************/
- protected final Computation collection;
protected final Computation start;
protected final Computation end;
protected final Computation increment;
@@ -35,12 +33,11 @@ public class Range extends Instruction
final Computation start,
final Computation end,
final Computation increment,
- final Computation collection
+ final Type target_type
)
{
- super(origin);
+ super(origin, target_type);
- this.collection = collection;
this.start = start;
this.end = end;
this.increment = increment;
@@ -55,28 +52,10 @@ public class Range extends Instruction
final Origin origin,
final Computation start,
final Computation end,
- final Computation increment,
- final Computation collection
+ final Computation increment
)
throws InvalidTypeException
{
- final Type t;
-
- t = collection.get_type();
-
- if (!(t instanceof CollectionType))
- {
- ErrorManager.handle
- (
- new InvalidTypeException
- (
- collection.get_origin(),
- collection.get_type(),
- Type.COLLECTION_TYPES
- )
- );
- }
-
if (!start.get_type().can_be_used_as(Type.INT))
{
ErrorManager.handle
@@ -116,20 +95,23 @@ public class Range extends Instruction
);
}
- return new Range(origin, start, end, increment, collection);
+ return
+ new Range
+ (
+ origin,
+ start,
+ end,
+ increment,
+ CollectionType.build(origin, Type.INT, false, "auto generated")
+ );
}
/**** Accessors ************************************************************/
@Override
- public void get_visited_by (final InstructionVisitor iv)
+ public void get_visited_by (final ComputationVisitor cv)
throws Throwable
{
- iv.visit_range(this);
- }
-
- public Computation get_collection ()
- {
- return collection;
+ cv.visit_range(this);
}
public Computation get_start ()
@@ -159,8 +141,6 @@ public class Range extends Instruction
sb.append(end.toString());
sb.append(" ");
sb.append(increment.toString());
- sb.append(" ");
- sb.append(collection.toString());
sb.append(")");
return sb.toString();
diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/RemoveElementAtComputation.java b/src/core/src/tonkadur/fate/v1/lang/computation/RemoveElementAtComputation.java
index 42e61b7..4a87a02 100644
--- a/src/core/src/tonkadur/fate/v1/lang/computation/RemoveElementAtComputation.java
+++ b/src/core/src/tonkadur/fate/v1/lang/computation/RemoveElementAtComputation.java
@@ -12,7 +12,7 @@ import tonkadur.fate.v1.lang.meta.ComputationVisitor;
import tonkadur.fate.v1.lang.meta.Computation;
import tonkadur.fate.v1.lang.meta.Reference;
-public class RemoveElementAt extends Computation
+public class RemoveElementAtComputation extends Computation
{
/***************************************************************************/
/**** MEMBERS **************************************************************/
diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/ReverseListComputation.java b/src/core/src/tonkadur/fate/v1/lang/computation/ReverseListComputation.java
index e5b6958..022633a 100644
--- a/src/core/src/tonkadur/fate/v1/lang/computation/ReverseListComputation.java
+++ b/src/core/src/tonkadur/fate/v1/lang/computation/ReverseListComputation.java
@@ -41,7 +41,11 @@ public class ReverseListComputation extends Computation
)
throws InvalidTypeException
{
- return new ReverseListComputation(Shuffe.build(origin, collection));
+ /*
+ * FIXME: this computation should accept any collection type, and return a
+ * list, which is not the case of ReverseList.build
+ */
+ return new ReverseListComputation(ReverseList.build(origin, collection));
}
/**** Accessors ************************************************************/
diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/ShuffleComputation.java b/src/core/src/tonkadur/fate/v1/lang/computation/ShuffleComputation.java
index d40bdc0..b9b42a0 100644
--- a/src/core/src/tonkadur/fate/v1/lang/computation/ShuffleComputation.java
+++ b/src/core/src/tonkadur/fate/v1/lang/computation/ShuffleComputation.java
@@ -34,14 +34,18 @@ public class ShuffleComputation extends Computation
/**** PUBLIC ***************************************************************/
/***************************************************************************/
/**** Constructors *********************************************************/
- public static Shuffle build
+ public static ShuffleComputation build
(
final Origin origin,
final Computation collection
)
throws InvalidTypeException
{
- return new ShuffleComputation(Shuffe.build(origin, collection));
+ /*
+ * FIXME: this computation should accept any collection type, and return a
+ * list, which is not the case of Shuffle.build
+ */
+ return new ShuffleComputation(Shuffle.build(origin, collection));
}
/**** Accessors ************************************************************/
diff --git a/src/core/src/tonkadur/fate/v1/lang/meta/ComputationVisitor.java b/src/core/src/tonkadur/fate/v1/lang/meta/ComputationVisitor.java
index 1c2fa85..8988ff7 100644
--- a/src/core/src/tonkadur/fate/v1/lang/meta/ComputationVisitor.java
+++ b/src/core/src/tonkadur/fate/v1/lang/meta/ComputationVisitor.java
@@ -22,9 +22,6 @@ public interface ComputationVisitor
public void visit_fold (final Fold n)
throws Throwable;
- public void visit_car_cdr (final CarCdr n)
- throws Throwable;
-
public void visit_cond_value (final CondValue n)
throws Throwable;
@@ -85,4 +82,39 @@ public interface ComputationVisitor
public void visit_variable_reference (final VariableReference n)
throws Throwable;
+ public void visit_car_cdr (final CarCdr n)
+ throws Throwable;
+
+ public void visit_add_element (final AddElementComputation n)
+ throws Throwable;
+
+ public void visit_add_element_at (final AddElementAtComputation n)
+ throws Throwable;
+
+ public void visit_add_elements_of (final AddElementsOfComputation n)
+ throws Throwable;
+
+ public void visit_map (final MapComputation n)
+ throws Throwable;
+
+ public void visit_range (final Range n)
+ throws Throwable;
+
+ public void visit_remove_all_of_element
+ (
+ final RemoveAllOfElementComputation n
+ )
+ throws Throwable;
+
+ public void visit_remove_element_at (final RemoveElementAtComputation n)
+ throws Throwable;
+
+ public void visit_remove_element (final RemoveElementComputation n)
+ throws Throwable;
+
+ public void visit_reverse_list (final ReverseListComputation n)
+ throws Throwable;
+
+ public void visit_shuffle (final ShuffleComputation n)
+ throws Throwable;
}
diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/ComputationCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/ComputationCompiler.java
index d031b66..5d961a4 100644
--- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/ComputationCompiler.java
+++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/ComputationCompiler.java
@@ -1872,4 +1872,112 @@ implements tonkadur.fate.v1.lang.meta.ComputationVisitor
result_as_address = register.get_address();
result_as_computation = register.get_value();
}
+
+ @Override
+ public void visit_car_cdr
+ (
+ final tonkadur.fate.v1.lang.computation.CarCdr n
+ )
+ {
+ /* TODO */
+ }
+
+ @Override
+ public void visit_cons
+ (
+ final tonkadur.fate.v1.lang.computation.ConsComputation n
+ )
+ {
+ /* TODO */
+ }
+
+ @Override
+ public void visit_add_element_at
+ (
+ final tonkadur.fate.v1.lang.computation.AddElementAtComputation n
+ )
+ {
+ /* TODO */
+ }
+
+ @Override
+ public void visit_add_elements_of
+ (
+ final tonkadur.fate.v1.lang.computation.AddElementsOfComputation n
+ )
+ {
+ /* TODO */
+ }
+
+ @Override
+ public void visit_fold
+ (
+ final tonkadur.fate.v1.lang.computation.Fold n
+ )
+ {
+ /* TODO */
+ }
+
+ @Override
+ public void visit_map
+ (
+ final tonkadur.fate.v1.lang.computation.MapComputation n
+ )
+ {
+ /* TODO */
+ }
+
+ @Override
+ public void visit_range
+ (
+ final tonkadur.fate.v1.lang.computation.Range n
+ )
+ {
+ /* TODO */
+ }
+
+ @Override
+ public void visit_remove_all_of_element
+ (
+ final tonkadur.fate.v1.lang.computation.RemoveAllOfElementComputation n
+ )
+ {
+ /* TODO */
+ }
+
+ @Override
+ public void visit_remove_element_at
+ (
+ final tonkadur.fate.v1.lang.computation.RemoveElementAtComputation n
+ )
+ {
+ /* TODO */
+ }
+
+ @Override
+ public void visit_remove_element
+ (
+ final tonkadur.fate.v1.lang.computation.RemoveElementComputation n
+ )
+ {
+ /* TODO */
+ }
+
+ @Override
+ public void visit_reverse_list
+ (
+ final tonkadur.fate.v1.lang.computation.ReverseListComputation n
+ )
+ {
+ /* TODO */
+ }
+
+ @Override
+ public void visit_shuffle
+ (
+ final tonkadur.fate.v1.lang.computation.ShuffleComputation n
+ )
+ {
+ /* TODO */
+ }
}
diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/InstructionCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/InstructionCompiler.java
index 769f2c0..4b88a53 100644
--- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/InstructionCompiler.java
+++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/InstructionCompiler.java
@@ -546,6 +546,57 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor
address_compiler.release_registers(result);
}
+ public void visit_shuffle
+ (
+ final tonkadur.fate.v1.lang.instruction.Shuffle n
+ )
+ throws Throwable
+ {
+ /*
+ * Fate: (shuffle collection)
+ *
+ * Wyrd: <shuffle collection>
+ */
+ final ComputationCompiler address_compiler;
+ final Address collection_address;
+
+ address_compiler = new ComputationCompiler(compiler);
+
+ n.get_collection().get_visited_by(address_compiler);
+
+ if (address_compiler.has_init())
+ {
+ result.add(address_compiler.get_init());
+ }
+
+ collection_address = address_compiler.get_address();
+
+ /*
+ * TODO
+ result.add
+ (
+ Shuffle.generate
+ (
+ compiler.registers(),
+ compiler.assembler(),
+ new Size(collection_address),
+ collection_address
+ )
+ );
+ */
+
+ address_compiler.release_registers(result);
+ }
+
+ public void visit_map
+ (
+ final tonkadur.fate.v1.lang.instruction.Map n
+ )
+ throws Throwable
+ {
+ /* TODO */
+ }
+
@Override
public void visit_switch_instruction
(