| summaryrefslogtreecommitdiff |
diff options
| author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2020-07-27 23:02:33 +0200 |
|---|---|---|
| committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2020-07-27 23:02:33 +0200 |
| commit | 06d5119ca19c68c6b2f45d79e2339e82278508fd (patch) | |
| tree | 258c3df350bd82c89cecee2e896e8a96891683f1 | |
| parent | 73c73309850c9189c551bb4c5ccddee2fa8aa43b (diff) | |
...
48 files changed, 604 insertions, 1019 deletions
diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/AtReference.java b/src/core/src/tonkadur/fate/v1/lang/computation/AtReference.java index 176b50c..a26d399 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/AtReference.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/AtReference.java @@ -11,7 +11,7 @@ import tonkadur.fate.v1.error.UnknownDictionaryFieldException; import tonkadur.fate.v1.lang.Variable; -import tonkadur.fate.v1.lang.meta.NodeVisitor; +import tonkadur.fate.v1.lang.meta.ComputationVisitor; import tonkadur.fate.v1.lang.meta.Reference; import tonkadur.fate.v1.lang.type.RefType; @@ -81,10 +81,10 @@ public class AtReference extends Reference /**** Accessors ************************************************************/ @Override - public void visit (final NodeVisitor nv) + public void get_visited_by (final ComputationVisitor cv) throws Throwable { - nv.visit_at_reference(this); + cv.visit_at_reference(this); } public Reference get_parent () diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/Cast.java b/src/core/src/tonkadur/fate/v1/lang/computation/Cast.java index 54b5c30..98e9746 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/Cast.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/Cast.java @@ -15,7 +15,7 @@ import tonkadur.fate.v1.error.IncomparableTypeException; import tonkadur.fate.v1.lang.type.Type; -import tonkadur.fate.v1.lang.meta.NodeVisitor; +import tonkadur.fate.v1.lang.meta.ComputationVisitor; import tonkadur.fate.v1.lang.meta.Computation; public class Cast extends Computation @@ -166,10 +166,10 @@ public class Cast extends Computation /**** Accessors ************************************************************/ @Override - public void visit (final NodeVisitor nv) + public void get_visited_by (final ComputationVisitor cv) throws Throwable { - nv.visit_cast(this); + cv.visit_cast(this); } public Computation get_parent () diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/CondValue.java b/src/core/src/tonkadur/fate/v1/lang/computation/CondValue.java index e8afd21..b8f0709 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/CondValue.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/CondValue.java @@ -15,7 +15,7 @@ import tonkadur.fate.v1.error.InvalidTypeException; import tonkadur.fate.v1.lang.type.Type; -import tonkadur.fate.v1.lang.meta.NodeVisitor; +import tonkadur.fate.v1.lang.meta.ComputationVisitor; import tonkadur.fate.v1.lang.meta.Computation; public class CondValue extends Computation @@ -121,10 +121,10 @@ public class CondValue extends Computation /**** Accessors ************************************************************/ @Override - public void visit (final NodeVisitor nv) + public void get_visited_by (final ComputationVisitor cv) throws Throwable { - nv.visit_cond_value(this); + cv.visit_cond_value(this); } /**** Misc. ****************************************************************/ diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/Constant.java b/src/core/src/tonkadur/fate/v1/lang/computation/Constant.java index 56f79f1..13233bc 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/Constant.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/Constant.java @@ -4,7 +4,7 @@ import tonkadur.parser.Origin; import tonkadur.fate.v1.lang.type.Type; -import tonkadur.fate.v1.lang.meta.NodeVisitor; +import tonkadur.fate.v1.lang.meta.ComputationVisitor; import tonkadur.fate.v1.lang.meta.Computation; public class Constant extends Computation @@ -81,10 +81,10 @@ public class Constant extends Computation /**** Accessors ************************************************************/ @Override - public void visit (final NodeVisitor nv) + public void get_visited_by (final ComputationVisitor cv) throws Throwable { - nv.visit_constant(this); + cv.visit_constant(this); } public String get_value_as_string () diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/CountOperator.java b/src/core/src/tonkadur/fate/v1/lang/computation/CountOperator.java index 0c26abc..fe72543 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/CountOperator.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/CountOperator.java @@ -11,7 +11,7 @@ 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.NodeVisitor; +import tonkadur.fate.v1.lang.meta.ComputationVisitor; import tonkadur.fate.v1.lang.meta.Computation; public class CountOperator extends Computation @@ -125,10 +125,10 @@ public class CountOperator extends Computation /**** Accessors ************************************************************/ @Override - public void visit (final NodeVisitor nv) + public void get_visited_by (final ComputationVisitor cv) throws Throwable { - nv.visit_count_operator(this); + cv.visit_count_operator(this); } /**** Misc. ****************************************************************/ diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/FieldReference.java b/src/core/src/tonkadur/fate/v1/lang/computation/FieldReference.java index 635e372..57d4836 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/FieldReference.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/FieldReference.java @@ -10,7 +10,7 @@ import tonkadur.error.ErrorManager; import tonkadur.fate.v1.error.InvalidTypeException; import tonkadur.fate.v1.error.UnknownDictionaryFieldException; -import tonkadur.fate.v1.lang.meta.NodeVisitor; +import tonkadur.fate.v1.lang.meta.ComputationVisitor; import tonkadur.fate.v1.lang.meta.Reference; import tonkadur.fate.v1.lang.type.DictType; @@ -116,10 +116,10 @@ public class FieldReference extends Reference /**** Accessors ************************************************************/ @Override - public void visit (final NodeVisitor nv) + public void get_visited_by (final ComputationVisitor cv) throws Throwable { - nv.visit_field_reference(this); + cv.visit_field_reference(this); } public String get_field_name () diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/IfElseValue.java b/src/core/src/tonkadur/fate/v1/lang/computation/IfElseValue.java index 97fe315..63adfb6 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/IfElseValue.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/IfElseValue.java @@ -12,7 +12,7 @@ import tonkadur.fate.v1.error.InvalidTypeException; import tonkadur.fate.v1.lang.type.Type; -import tonkadur.fate.v1.lang.meta.NodeVisitor; +import tonkadur.fate.v1.lang.meta.ComputationVisitor; import tonkadur.fate.v1.lang.meta.Computation; public class IfElseValue extends Computation @@ -124,10 +124,10 @@ public class IfElseValue extends Computation /**** Accessors ************************************************************/ @Override - public void visit (final NodeVisitor nv) + public void get_visited_by (final ComputationVisitor cv) throws Throwable { - nv.visit_if_else_value(this); + cv.visit_if_else_value(this); } /**** Misc. ****************************************************************/ diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/IsMemberOperator.java b/src/core/src/tonkadur/fate/v1/lang/computation/IsMemberOperator.java index 8e4aeb3..f7e5b57 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/IsMemberOperator.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/IsMemberOperator.java @@ -11,7 +11,7 @@ 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.NodeVisitor; +import tonkadur.fate.v1.lang.meta.ComputationVisitor; import tonkadur.fate.v1.lang.meta.Computation; public class IsMemberOperator extends Computation @@ -125,10 +125,10 @@ public class IsMemberOperator extends Computation /**** Accessors ************************************************************/ @Override - public void visit (final NodeVisitor nv) + public void get_visited_by (final ComputationVisitor cv) throws Throwable { - nv.visit_is_member_operator(this); + cv.visit_is_member_operator(this); } /**** Misc. ****************************************************************/ diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/MacroValueCall.java b/src/core/src/tonkadur/fate/v1/lang/computation/MacroValueCall.java index 83b16d4..5e4cdfd 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/MacroValueCall.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/MacroValueCall.java @@ -19,7 +19,7 @@ import tonkadur.fate.v1.lang.Macro; import tonkadur.fate.v1.lang.type.Type; -import tonkadur.fate.v1.lang.meta.NodeVisitor; +import tonkadur.fate.v1.lang.meta.ComputationVisitor; import tonkadur.fate.v1.lang.meta.Computation; public class MacroValueCall extends Computation @@ -150,10 +150,10 @@ public class MacroValueCall extends Computation /**** Accessors ************************************************************/ @Override - public void visit (final NodeVisitor nv) + public void get_visited_by (final ComputationVisitor cv) throws Throwable { - nv.visit_macro_value_call(this); + cv.visit_macro_value_call(this); } public Macro get_macro () diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/Newline.java b/src/core/src/tonkadur/fate/v1/lang/computation/Newline.java index 13b9671..9a5b880 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/Newline.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/Newline.java @@ -2,7 +2,7 @@ package tonkadur.fate.v1.lang.computation; import tonkadur.parser.Origin; -import tonkadur.fate.v1.lang.meta.NodeVisitor; +import tonkadur.fate.v1.lang.meta.ComputationVisitor; import tonkadur.fate.v1.lang.meta.RichTextNode; public class Newline extends RichTextNode @@ -18,10 +18,10 @@ public class Newline extends RichTextNode /**** Accessors ************************************************************/ @Override - public void visit (final NodeVisitor nv) + public void get_visited_by (final ComputationVisitor cv) throws Throwable { - nv.visit_newline(this); + cv.visit_newline(this); } /**** Misc. ****************************************************************/ diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/Operation.java b/src/core/src/tonkadur/fate/v1/lang/computation/Operation.java index 44f2a45..dfbfcb3 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/Operation.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/Operation.java @@ -15,7 +15,7 @@ import tonkadur.fate.v1.error.InvalidTypeException; import tonkadur.fate.v1.lang.type.Type; -import tonkadur.fate.v1.lang.meta.NodeVisitor; +import tonkadur.fate.v1.lang.meta.ComputationVisitor; import tonkadur.fate.v1.lang.meta.Computation; public class Operation extends Computation @@ -170,9 +170,9 @@ public class Operation extends Computation /**** Accessors ************************************************************/ @Override - public void visit (final NodeVisitor nv) + public void get_visited_by (final ComputationVisitor cv) throws Throwable { - nv.visit_operation(this); + cv.visit_operation(this); } } diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/Paragraph.java b/src/core/src/tonkadur/fate/v1/lang/computation/Paragraph.java index 0d1b8ce..62c72f3 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/Paragraph.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/Paragraph.java @@ -4,7 +4,7 @@ import java.util.List; import tonkadur.parser.Origin; -import tonkadur.fate.v1.lang.meta.NodeVisitor; +import tonkadur.fate.v1.lang.meta.ComputationVisitor; import tonkadur.fate.v1.lang.meta.RichTextNode; public class Paragraph extends RichTextNode @@ -36,10 +36,10 @@ public class Paragraph extends RichTextNode /**** Accessors ************************************************************/ @Override - public void visit (final NodeVisitor nv) + public void get_visited_by (final ComputationVisitor cv) throws Throwable { - nv.visit_paragraph(this); + cv.visit_paragraph(this); } public List<RichTextNode> get_content () diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/ParameterReference.java b/src/core/src/tonkadur/fate/v1/lang/computation/ParameterReference.java index 06cf523..6266c7c 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/ParameterReference.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/ParameterReference.java @@ -2,7 +2,7 @@ package tonkadur.fate.v1.lang.computation; import tonkadur.parser.Origin; -import tonkadur.fate.v1.lang.meta.NodeVisitor; +import tonkadur.fate.v1.lang.meta.ComputationVisitor; import tonkadur.fate.v1.lang.meta.Reference; import tonkadur.fate.v1.lang.type.Type; @@ -29,10 +29,10 @@ public class ParameterReference extends Reference /**** Accessors ************************************************************/ @Override - public void visit (final NodeVisitor nv) + public void get_visited_by (final ComputationVisitor cv) throws Throwable { - nv.visit_parameter_reference(this); + cv.visit_parameter_reference(this); } /**** Misc. ****************************************************************/ diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/RefOperator.java b/src/core/src/tonkadur/fate/v1/lang/computation/RefOperator.java index edbcc29..49f3ef6 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/RefOperator.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/RefOperator.java @@ -4,7 +4,7 @@ import tonkadur.parser.Origin; import tonkadur.fate.v1.lang.type.RefType; -import tonkadur.fate.v1.lang.meta.NodeVisitor; +import tonkadur.fate.v1.lang.meta.ComputationVisitor; import tonkadur.fate.v1.lang.meta.Reference; import tonkadur.fate.v1.lang.meta.Computation; @@ -32,10 +32,10 @@ public class RefOperator extends Computation /**** Accessors ************************************************************/ @Override - public void visit (final NodeVisitor nv) + public void get_visited_by (final ComputationVisitor cv) throws Throwable { - nv.visit_ref_operator(this); + cv.visit_ref_operator(this); } /**** Misc. ****************************************************************/ diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/TextWithEffect.java b/src/core/src/tonkadur/fate/v1/lang/computation/TextWithEffect.java index 7be47c1..df3c324 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/TextWithEffect.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/TextWithEffect.java @@ -18,7 +18,7 @@ import tonkadur.fate.v1.lang.TextEffect; import tonkadur.fate.v1.lang.type.Type; -import tonkadur.fate.v1.lang.meta.NodeVisitor; +import tonkadur.fate.v1.lang.meta.ComputationVisitor; import tonkadur.fate.v1.lang.meta.RichTextNode; import tonkadur.fate.v1.lang.meta.Computation; @@ -140,10 +140,10 @@ public class TextWithEffect extends RichTextNode /**** Accessors ************************************************************/ @Override - public void visit (final NodeVisitor nv) + public void get_visited_by (final ComputationVisitor cv) throws Throwable { - nv.visit_text_with_effect(this); + cv.visit_text_with_effect(this); } public TextEffect get_effect () diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/ValueToRichText.java b/src/core/src/tonkadur/fate/v1/lang/computation/ValueToRichText.java index 917f4ad..43c8371 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/ValueToRichText.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/ValueToRichText.java @@ -7,7 +7,7 @@ import tonkadur.fate.v1.error.IncomparableTypeException; import tonkadur.fate.v1.lang.type.Type; -import tonkadur.fate.v1.lang.meta.NodeVisitor; +import tonkadur.fate.v1.lang.meta.ComputationVisitor; import tonkadur.fate.v1.lang.meta.RichTextNode; import tonkadur.fate.v1.lang.meta.Computation; @@ -62,10 +62,10 @@ public class ValueToRichText extends RichTextNode /**** Accessors ************************************************************/ @Override - public void visit (final NodeVisitor nv) + public void get_visited_by (final ComputationVisitor cv) throws Throwable { - nv.visit_value_to_rich_text(this); + cv.visit_value_to_rich_text(this); } public Computation get_value () diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/VariableReference.java b/src/core/src/tonkadur/fate/v1/lang/computation/VariableReference.java index d8522c2..3424eed 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/VariableReference.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/VariableReference.java @@ -4,7 +4,7 @@ import tonkadur.parser.Origin; import tonkadur.fate.v1.lang.Variable; -import tonkadur.fate.v1.lang.meta.NodeVisitor; +import tonkadur.fate.v1.lang.meta.ComputationVisitor; import tonkadur.fate.v1.lang.meta.Reference; import tonkadur.fate.v1.lang.type.Type; @@ -47,10 +47,10 @@ public class VariableReference extends Reference /**** Accessors ************************************************************/ @Override - public void visit (final NodeVisitor nv) + public void get_visited_by (final ComputationVisitor cv) throws Throwable { - nv.visit_variable_reference(this); + cv.visit_variable_reference(this); } public Variable get_variable () diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/AddElement.java b/src/core/src/tonkadur/fate/v1/lang/instruction/AddElement.java index a3ff50c..792a68f 100644 --- a/src/core/src/tonkadur/fate/v1/lang/instruction/AddElement.java +++ b/src/core/src/tonkadur/fate/v1/lang/instruction/AddElement.java @@ -11,7 +11,7 @@ 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.NodeVisitor; +import tonkadur.fate.v1.lang.meta.InstructionVisitor; import tonkadur.fate.v1.lang.meta.Instruction; import tonkadur.fate.v1.lang.meta.Computation; @@ -126,10 +126,10 @@ public class AddElement extends Instruction /**** Accessors ************************************************************/ @Override - public void visit (final NodeVisitor nv) + public void get_visited_by (final InstructionVisitor iv) throws Throwable { - nv.visit_add_element(this); + iv.visit_add_element(this); } public Computation get_collection () diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/Assert.java b/src/core/src/tonkadur/fate/v1/lang/instruction/Assert.java index 8e7dbc5..2770fa1 100644 --- a/src/core/src/tonkadur/fate/v1/lang/instruction/Assert.java +++ b/src/core/src/tonkadur/fate/v1/lang/instruction/Assert.java @@ -10,7 +10,7 @@ import tonkadur.fate.v1.error.InvalidTypeException; import tonkadur.fate.v1.lang.type.Type; -import tonkadur.fate.v1.lang.meta.NodeVisitor; +import tonkadur.fate.v1.lang.meta.InstructionVisitor; import tonkadur.fate.v1.lang.meta.Instruction; import tonkadur.fate.v1.lang.meta.Computation; @@ -65,10 +65,10 @@ public class Assert extends Instruction /**** Accessors ************************************************************/ @Override - public void visit (final NodeVisitor nv) + public void get_visited_by (final InstructionVisitor iv) throws Throwable { - nv.visit_assert(this); + iv.visit_assert(this); } public Computation get_condition () diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/Clear.java b/src/core/src/tonkadur/fate/v1/lang/instruction/Clear.java index e414e19..5d036fa 100644 --- a/src/core/src/tonkadur/fate/v1/lang/instruction/Clear.java +++ b/src/core/src/tonkadur/fate/v1/lang/instruction/Clear.java @@ -9,7 +9,7 @@ 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.NodeVisitor; +import tonkadur.fate.v1.lang.meta.InstructionVisitor; import tonkadur.fate.v1.lang.meta.Instruction; import tonkadur.fate.v1.lang.meta.Computation; @@ -67,10 +67,10 @@ public class Clear extends Instruction /**** Accessors ************************************************************/ @Override - public void visit (final NodeVisitor nv) + public void get_visited_by (final InstructionVisitor iv) throws Throwable { - nv.visit_clear(this); + iv.visit_clear(this); } public Computation get_collection () diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/CondInstruction.java b/src/core/src/tonkadur/fate/v1/lang/instruction/CondInstruction.java index 1fd1bce..15c6fa4 100644 --- a/src/core/src/tonkadur/fate/v1/lang/instruction/CondInstruction.java +++ b/src/core/src/tonkadur/fate/v1/lang/instruction/CondInstruction.java @@ -13,7 +13,7 @@ import tonkadur.fate.v1.error.InvalidTypeException; import tonkadur.fate.v1.lang.type.Type; -import tonkadur.fate.v1.lang.meta.NodeVisitor; +import tonkadur.fate.v1.lang.meta.InstructionVisitor; import tonkadur.fate.v1.lang.meta.Instruction; import tonkadur.fate.v1.lang.meta.Computation; @@ -71,10 +71,10 @@ public class CondInstruction extends Instruction /**** Accessors ************************************************************/ @Override - public void visit (final NodeVisitor nv) + public void get_visited_by (final InstructionVisitor iv) throws Throwable { - nv.visit_cond_instruction(this); + iv.visit_cond_instruction(this); } public List<Cons<Computation, Instruction>> get_branches () diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/Display.java b/src/core/src/tonkadur/fate/v1/lang/instruction/Display.java index 24fc27d..5e95601 100644 --- a/src/core/src/tonkadur/fate/v1/lang/instruction/Display.java +++ b/src/core/src/tonkadur/fate/v1/lang/instruction/Display.java @@ -8,7 +8,7 @@ import tonkadur.parser.Origin; import tonkadur.fate.v1.lang.type.Type; -import tonkadur.fate.v1.lang.meta.NodeVisitor; +import tonkadur.fate.v1.lang.meta.InstructionVisitor; import tonkadur.fate.v1.lang.meta.Instruction; import tonkadur.fate.v1.lang.meta.RichTextNode; @@ -41,10 +41,10 @@ public class Display extends Instruction /**** Accessors ************************************************************/ @Override - public void visit (final NodeVisitor nv) + public void get_visited_by (final InstructionVisitor iv) throws Throwable { - nv.visit_display(this); + iv.visit_display(this); } public RichTextNode get_content () diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/EventCall.java b/src/core/src/tonkadur/fate/v1/lang/instruction/EventCall.java index e9bf5f9..887e08b 100644 --- a/src/core/src/tonkadur/fate/v1/lang/instruction/EventCall.java +++ b/src/core/src/tonkadur/fate/v1/lang/instruction/EventCall.java @@ -18,7 +18,7 @@ import tonkadur.fate.v1.lang.Event; import tonkadur.fate.v1.lang.type.Type; -import tonkadur.fate.v1.lang.meta.NodeVisitor; +import tonkadur.fate.v1.lang.meta.InstructionVisitor; import tonkadur.fate.v1.lang.meta.Instruction; import tonkadur.fate.v1.lang.meta.Computation; @@ -137,10 +137,10 @@ public class EventCall extends Instruction /**** Accessors ************************************************************/ @Override - public void visit (final NodeVisitor nv) + public void get_visited_by (final InstructionVisitor iv) throws Throwable { - nv.visit_event_call(this); + iv.visit_event_call(this); } public Event get_event () diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/IfElseInstruction.java b/src/core/src/tonkadur/fate/v1/lang/instruction/IfElseInstruction.java index c07a8d6..1fcbb01 100644 --- a/src/core/src/tonkadur/fate/v1/lang/instruction/IfElseInstruction.java +++ b/src/core/src/tonkadur/fate/v1/lang/instruction/IfElseInstruction.java @@ -10,7 +10,7 @@ import tonkadur.fate.v1.error.InvalidTypeException; import tonkadur.fate.v1.lang.type.Type; -import tonkadur.fate.v1.lang.meta.NodeVisitor; +import tonkadur.fate.v1.lang.meta.InstructionVisitor; import tonkadur.fate.v1.lang.meta.Instruction; import tonkadur.fate.v1.lang.meta.Computation; @@ -73,10 +73,10 @@ public class IfElseInstruction extends Instruction /**** Accessors ************************************************************/ @Override - public void visit (final NodeVisitor nv) + public void get_visited_by (final InstructionVisitor iv) throws Throwable { - nv.visit_if_else_instruction(this); + iv.visit_if_else_instruction(this); } public Computation get_condition () diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/IfInstruction.java b/src/core/src/tonkadur/fate/v1/lang/instruction/IfInstruction.java index 7dfe376..12a64d4 100644 --- a/src/core/src/tonkadur/fate/v1/lang/instruction/IfInstruction.java +++ b/src/core/src/tonkadur/fate/v1/lang/instruction/IfInstruction.java @@ -10,7 +10,7 @@ import tonkadur.fate.v1.error.InvalidTypeException; import tonkadur.fate.v1.lang.type.Type; -import tonkadur.fate.v1.lang.meta.NodeVisitor; +import tonkadur.fate.v1.lang.meta.InstructionVisitor; import tonkadur.fate.v1.lang.meta.Instruction; import tonkadur.fate.v1.lang.meta.Computation; @@ -69,10 +69,10 @@ public class IfInstruction extends Instruction /**** Accessors ************************************************************/ @Override - public void visit (final NodeVisitor nv) + public void get_visited_by (final InstructionVisitor iv) throws Throwable { - nv.visit_if_instruction(this); + iv.visit_if_instruction(this); } public Computation get_condition () diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/InstructionList.java b/src/core/src/tonkadur/fate/v1/lang/instruction/InstructionList.java index 658fa58..132289f 100644 --- a/src/core/src/tonkadur/fate/v1/lang/instruction/InstructionList.java +++ b/src/core/src/tonkadur/fate/v1/lang/instruction/InstructionList.java @@ -4,7 +4,7 @@ import java.util.List; import tonkadur.parser.Origin; -import tonkadur.fate.v1.lang.meta.NodeVisitor; +import tonkadur.fate.v1.lang.meta.InstructionVisitor; import tonkadur.fate.v1.lang.meta.Instruction; public class InstructionList extends Instruction @@ -31,10 +31,10 @@ public class InstructionList extends Instruction /**** Accessors ************************************************************/ @Override - public void visit (final NodeVisitor nv) + public void get_visited_by (final InstructionVisitor iv) throws Throwable { - nv.visit_instruction_list(this); + iv.visit_instruction_list(this); } public List<Instruction> get_instructions () diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/MacroCall.java b/src/core/src/tonkadur/fate/v1/lang/instruction/MacroCall.java index 3588f65..c3c3b44 100644 --- a/src/core/src/tonkadur/fate/v1/lang/instruction/MacroCall.java +++ b/src/core/src/tonkadur/fate/v1/lang/instruction/MacroCall.java @@ -18,7 +18,7 @@ import tonkadur.fate.v1.lang.Macro; import tonkadur.fate.v1.lang.type.Type; -import tonkadur.fate.v1.lang.meta.NodeVisitor; +import tonkadur.fate.v1.lang.meta.InstructionVisitor; import tonkadur.fate.v1.lang.meta.Instruction; import tonkadur.fate.v1.lang.meta.Computation; @@ -137,10 +137,10 @@ public class MacroCall extends Instruction /**** Accessors ************************************************************/ @Override - public void visit (final NodeVisitor nv) + public void get_visited_by (final InstructionVisitor iv) throws Throwable { - nv.visit_macro_call(this); + iv.visit_macro_call(this); } public Macro get_macro () diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/PlayerChoice.java b/src/core/src/tonkadur/fate/v1/lang/instruction/PlayerChoice.java index fdebb80..1f40c8a 100644 --- a/src/core/src/tonkadur/fate/v1/lang/instruction/PlayerChoice.java +++ b/src/core/src/tonkadur/fate/v1/lang/instruction/PlayerChoice.java @@ -6,7 +6,7 @@ import tonkadur.parser.Origin; import tonkadur.fate.v1.lang.type.Type; -import tonkadur.fate.v1.lang.meta.NodeVisitor; +import tonkadur.fate.v1.lang.meta.InstructionVisitor; import tonkadur.fate.v1.lang.meta.Instruction; import tonkadur.fate.v1.lang.meta.RichTextNode; @@ -38,10 +38,10 @@ public class PlayerChoice extends Instruction /**** Accessors ************************************************************/ @Override - public void visit (final NodeVisitor nv) + public void get_visited_by (final InstructionVisitor iv) throws Throwable { - nv.visit_player_choice(this); + iv.visit_player_choice(this); } public RichTextNode get_text () diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/PlayerChoiceList.java b/src/core/src/tonkadur/fate/v1/lang/instruction/PlayerChoiceList.java index f9841fd..79a2570 100644 --- a/src/core/src/tonkadur/fate/v1/lang/instruction/PlayerChoiceList.java +++ b/src/core/src/tonkadur/fate/v1/lang/instruction/PlayerChoiceList.java @@ -4,7 +4,7 @@ import java.util.List; import tonkadur.parser.Origin; -import tonkadur.fate.v1.lang.meta.NodeVisitor; +import tonkadur.fate.v1.lang.meta.InstructionVisitor; import tonkadur.fate.v1.lang.meta.Instruction; public class PlayerChoiceList extends Instruction @@ -31,10 +31,10 @@ public class PlayerChoiceList extends Instruction /**** Accessors ************************************************************/ @Override - public void visit (final NodeVisitor nv) + public void get_visited_by (final InstructionVisitor iv) throws Throwable { - nv.visit_player_choice_list(this); + iv.visit_player_choice_list(this); } public List<Instruction> get_choices () diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/RemoveAllOfElement.java b/src/core/src/tonkadur/fate/v1/lang/instruction/RemoveAllOfElement.java index f8568a0..0aeb614 100644 --- a/src/core/src/tonkadur/fate/v1/lang/instruction/RemoveAllOfElement.java +++ b/src/core/src/tonkadur/fate/v1/lang/instruction/RemoveAllOfElement.java @@ -11,9 +11,10 @@ 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.NodeVisitor; +import tonkadur.fate.v1.lang.meta.InstructionVisitor; import tonkadur.fate.v1.lang.meta.Instruction; import tonkadur.fate.v1.lang.meta.Computation; +import tonkadur.fate.v1.lang.meta.Reference; public class RemoveAllOfElement extends Instruction { @@ -21,7 +22,7 @@ public class RemoveAllOfElement extends Instruction /**** MEMBERS **************************************************************/ /***************************************************************************/ protected final Computation element; - protected final Computation collection; + protected final Reference collection; /***************************************************************************/ /**** PROTECTED ************************************************************/ @@ -31,7 +32,7 @@ public class RemoveAllOfElement extends Instruction ( final Origin origin, final Computation element, - final Computation collection + final Reference collection ) { super(origin); @@ -48,7 +49,7 @@ public class RemoveAllOfElement extends Instruction ( final Origin origin, final Computation element, - final Computation collection + final Reference collection ) throws InvalidTypeException, @@ -126,10 +127,20 @@ public class RemoveAllOfElement extends Instruction /**** Accessors ************************************************************/ @Override - public void visit (final NodeVisitor nv) + public void get_visited_by (final InstructionVisitor iv) throws Throwable { - nv.visit_remove_all_of_element(this); + iv.visit_remove_all_of_element(this); + } + + public Computation get_element () + { + return element; + } + + public Reference get_collection () + { + return collection; } /**** Misc. ****************************************************************/ diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/RemoveElement.java b/src/core/src/tonkadur/fate/v1/lang/instruction/RemoveElement.java index d02e3b2..b067e9d 100644 --- a/src/core/src/tonkadur/fate/v1/lang/instruction/RemoveElement.java +++ b/src/core/src/tonkadur/fate/v1/lang/instruction/RemoveElement.java @@ -11,7 +11,7 @@ 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.NodeVisitor; +import tonkadur.fate.v1.lang.meta.InstructionVisitor; import tonkadur.fate.v1.lang.meta.Instruction; import tonkadur.fate.v1.lang.meta.Computation; @@ -126,10 +126,10 @@ public class RemoveElement extends Instruction /**** Accessors ************************************************************/ @Override - public void visit (final NodeVisitor nv) + public void get_visited_by (final InstructionVisitor iv) throws Throwable { - nv.visit_remove_element(this); + iv.visit_remove_element(this); } public Computation get_element () 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 fefe8d8..6ea696d 100644 --- a/src/core/src/tonkadur/fate/v1/lang/instruction/SequenceCall.java +++ b/src/core/src/tonkadur/fate/v1/lang/instruction/SequenceCall.java @@ -2,7 +2,7 @@ package tonkadur.fate.v1.lang.instruction; import tonkadur.parser.Origin; -import tonkadur.fate.v1.lang.meta.NodeVisitor; +import tonkadur.fate.v1.lang.meta.InstructionVisitor; import tonkadur.fate.v1.lang.meta.Instruction; public class SequenceCall extends Instruction @@ -25,10 +25,10 @@ public class SequenceCall extends Instruction /**** Accessors ************************************************************/ @Override - public void visit (final NodeVisitor nv) + public void get_visited_by (final InstructionVisitor iv) throws Throwable { - nv.visit_sequence_call(this); + iv.visit_sequence_call(this); } public String get_sequence_name () diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/SetValue.java b/src/core/src/tonkadur/fate/v1/lang/instruction/SetValue.java index 0ea9a98..6a7db6f 100644 --- a/src/core/src/tonkadur/fate/v1/lang/instruction/SetValue.java +++ b/src/core/src/tonkadur/fate/v1/lang/instruction/SetValue.java @@ -10,7 +10,7 @@ import tonkadur.fate.v1.error.InvalidTypeException; import tonkadur.fate.v1.lang.type.Type; -import tonkadur.fate.v1.lang.meta.NodeVisitor; +import tonkadur.fate.v1.lang.meta.InstructionVisitor; import tonkadur.fate.v1.lang.meta.Instruction; import tonkadur.fate.v1.lang.meta.Computation; @@ -104,10 +104,10 @@ public class SetValue extends Instruction /**** Accessors ************************************************************/ @Override - public void visit (final NodeVisitor nv) + public void get_visited_by (final InstructionVisitor iv) throws Throwable { - nv.visit_set_value(this); + iv.visit_set_value(this); } public Computation get_value () 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 f7dbcd3..67aaa52 100644 --- a/src/core/src/tonkadur/fate/v1/lang/meta/Computation.java +++ b/src/core/src/tonkadur/fate/v1/lang/meta/Computation.java @@ -26,6 +26,12 @@ public abstract class Computation extends Node /**** PUBLIC ***************************************************************/ /***************************************************************************/ /**** Accessors ************************************************************/ + public void get_visited_by (final ComputationVisitor cv) + throws Throwable + { + + } + public Type get_type () { return type; diff --git a/src/core/src/tonkadur/fate/v1/lang/meta/ComputationVisitor.java b/src/core/src/tonkadur/fate/v1/lang/meta/ComputationVisitor.java new file mode 100644 index 0000000..9223c7b --- /dev/null +++ b/src/core/src/tonkadur/fate/v1/lang/meta/ComputationVisitor.java @@ -0,0 +1,58 @@ +package tonkadur.fate.v1.lang.meta; + +import tonkadur.fate.v1.lang.computation.*; + +public interface ComputationVisitor +{ + public void visit_at_reference (final AtReference n) + throws Throwable; + + public void visit_cast (final Cast n) + throws Throwable; + + public void visit_cond_value (final CondValue n) + throws Throwable; + + public void visit_constant (final Constant n) + throws Throwable; + + public void visit_count_operator (final CountOperator n) + throws Throwable; + + public void visit_field_reference (final FieldReference n) + throws Throwable; + + public void visit_if_else_value (final IfElseValue n) + throws Throwable; + + public void visit_is_member_operator (final IsMemberOperator n) + throws Throwable; + + public void visit_macro_value_call (final MacroValueCall n) + throws Throwable; + + public void visit_newline (final Newline n) + throws Throwable; + + public void visit_operation (final Operation n) + throws Throwable; + + public void visit_paragraph (final Paragraph n) + throws Throwable; + + public void visit_parameter_reference (final ParameterReference n) + throws Throwable; + + public void visit_ref_operator (final RefOperator n) + throws Throwable; + + public void visit_text_with_effect (final TextWithEffect n) + throws Throwable; + + public void visit_value_to_rich_text (final ValueToRichText n) + throws Throwable; + + public void visit_variable_reference (final VariableReference n) + throws Throwable; + +} diff --git a/src/core/src/tonkadur/fate/v1/lang/meta/Instruction.java b/src/core/src/tonkadur/fate/v1/lang/meta/Instruction.java index f77206a..457c355 100644 --- a/src/core/src/tonkadur/fate/v1/lang/meta/Instruction.java +++ b/src/core/src/tonkadur/fate/v1/lang/meta/Instruction.java @@ -29,6 +29,12 @@ public abstract class Instruction extends Node /**** PUBLIC ***************************************************************/ /***************************************************************************/ /**** Accessors ************************************************************/ + public void get_visited_by (final InstructionVisitor iv) + throws Throwable + { + + } + public void link_parent (final Instruction parent) { parent.child = this; diff --git a/src/core/src/tonkadur/fate/v1/lang/meta/InstructionVisitor.java b/src/core/src/tonkadur/fate/v1/lang/meta/InstructionVisitor.java new file mode 100644 index 0000000..5f78fc0 --- /dev/null +++ b/src/core/src/tonkadur/fate/v1/lang/meta/InstructionVisitor.java @@ -0,0 +1,55 @@ +package tonkadur.fate.v1.lang.meta; + +import tonkadur.fate.v1.lang.instruction.*; + +public interface InstructionVisitor +{ + /* Instruction Nodes */ + public void visit_add_element (final AddElement ae) + throws Throwable; + + public void visit_assert (final Assert a) + throws Throwable; + + public void visit_clear (final Clear c) + throws Throwable; + + public void visit_cond_instruction (final CondInstruction ci) + throws Throwable; + + public void visit_display (final Display n) + throws Throwable; + + public void visit_event_call (final EventCall n) + throws Throwable; + + public void visit_if_else_instruction (final IfElseInstruction n) + throws Throwable; + + public void visit_if_instruction (final IfInstruction n) + throws Throwable; + + public void visit_instruction_list (final InstructionList n) + throws Throwable; + + public void visit_macro_call (final MacroCall n) + throws Throwable; + + public void visit_player_choice (final PlayerChoice n) + throws Throwable; + + public void visit_player_choice_list (final PlayerChoiceList n) + throws Throwable; + + public void visit_remove_all_of_element (final RemoveAllOfElement n) + throws Throwable; + + public void visit_remove_element (final RemoveElement n) + throws Throwable; + + public void visit_sequence_call (final SequenceCall n) + throws Throwable; + + public void visit_set_value (final SetValue n) + throws Throwable; +} diff --git a/src/core/src/tonkadur/fate/v1/lang/meta/Node.java b/src/core/src/tonkadur/fate/v1/lang/meta/Node.java index 86299b8..e5317d9 100644 --- a/src/core/src/tonkadur/fate/v1/lang/meta/Node.java +++ b/src/core/src/tonkadur/fate/v1/lang/meta/Node.java @@ -22,12 +22,6 @@ public abstract class Node /**** PUBLIC ***************************************************************/ /***************************************************************************/ /**** Accessors ************************************************************/ - public void visit (final NodeVisitor nv) - throws Throwable - { - - } - public Origin get_origin () { return origin; diff --git a/src/core/src/tonkadur/fate/v1/lang/meta/NodeVisitor.java b/src/core/src/tonkadur/fate/v1/lang/meta/NodeVisitor.java deleted file mode 100644 index f294da5..0000000 --- a/src/core/src/tonkadur/fate/v1/lang/meta/NodeVisitor.java +++ /dev/null @@ -1,114 +0,0 @@ -package tonkadur.fate.v1.lang.meta; - -import tonkadur.fate.v1.lang.World; - -import tonkadur.fate.v1.lang.instruction.*; -import tonkadur.fate.v1.lang.computation.*; - -public interface NodeVisitor -{ - public void visit_world (final World w) - throws Throwable; - - /* Instruction Nodes */ - public void visit_add_element (final AddElement ae) - throws Throwable; - - public void visit_assert (final Assert a) - throws Throwable; - - public void visit_clear (final Clear c) - throws Throwable; - - public void visit_cond_instruction (final CondInstruction ci) - throws Throwable; - - public void visit_display (final Display n) - throws Throwable; - - public void visit_event_call (final EventCall n) - throws Throwable; - - public void visit_if_else_instruction (final IfElseInstruction n) - throws Throwable; - - public void visit_if_instruction (final IfInstruction n) - throws Throwable; - - public void visit_instruction_list (final InstructionList n) - throws Throwable; - - public void visit_macro_call (final MacroCall n) - throws Throwable; - - public void visit_player_choice (final PlayerChoice n) - throws Throwable; - - public void visit_player_choice_list (final PlayerChoiceList n) - throws Throwable; - - public void visit_remove_all_of_element (final RemoveAllOfElement n) - throws Throwable; - - public void visit_remove_element (final RemoveElement n) - throws Throwable; - - public void visit_sequence_call (final SequenceCall n) - throws Throwable; - - public void visit_set_value (final SetValue n) - throws Throwable; - - /* Valued Nodes */ - public void visit_at_reference (final AtReference n) - throws Throwable; - - public void visit_cast (final Cast n) - throws Throwable; - - public void visit_cond_value (final CondValue n) - throws Throwable; - - public void visit_constant (final Constant n) - throws Throwable; - - public void visit_count_operator (final CountOperator n) - throws Throwable; - - public void visit_field_reference (final FieldReference n) - throws Throwable; - - public void visit_if_else_value (final IfElseValue n) - throws Throwable; - - public void visit_is_member_operator (final IsMemberOperator n) - throws Throwable; - - public void visit_macro_value_call (final MacroValueCall n) - throws Throwable; - - public void visit_newline (final Newline n) - throws Throwable; - - public void visit_operation (final Operation n) - throws Throwable; - - public void visit_paragraph (final Paragraph n) - throws Throwable; - - public void visit_parameter_reference (final ParameterReference n) - throws Throwable; - - public void visit_ref_operator (final RefOperator n) - throws Throwable; - - public void visit_text_with_effect (final TextWithEffect n) - throws Throwable; - - public void visit_value_to_rich_text (final ValueToRichText n) - throws Throwable; - - public void visit_variable_reference (final VariableReference n) - throws Throwable; - -} 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 f25f3f7..830cd03 100644 --- a/src/core/src/tonkadur/fate/v1/lang/type/CollectionType.java +++ b/src/core/src/tonkadur/fate/v1/lang/type/CollectionType.java @@ -59,6 +59,11 @@ public class CollectionType extends Type return content_type; } + public boolean is_set () + { + return is_set; + } + /**** Compatibility ********************************************************/ @Override public boolean can_be_used_as (final Type t) 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 817403e..ebfc865 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 @@ -1,34 +1,49 @@ package tonkadur.wyrd.v1.compiler.fate.v1; +import java.util.List; +import java.util.ArrayList; + import tonkadur.error.Error; import tonkadur.wyrd.v1.lang.meta.Computation; +import tonkadur.wyrd.v1.lang.meta.Instruction; + +import tonkadur.wyrd.v1.lang.computation.Ref; +import tonkadur.wyrd.v1.lang.computation.ValueOf; import tonkadur.wyrd.v1.lang.World; -public class ComputationCompiler extends FateVisitor +import tonkadur.wyrd.v1.compiler.util.AnonymousVariableManager; + +public class ComputationCompiler +implements tonkadur.fate.v1.lang.meta.ComputationVisitor { protected final MacroManager macro_manager; protected final AnonymousVariableManager anonymous_variables; protected final World wyrd_world; protected final List<Instruction> pre_computation_instructions; protected final List<Ref> allocated_variables; - protected Computation result; + protected final boolean expect_ref; + protected Computation result_as_computation; + protected Ref result_as_ref; public ComputationCompiler ( final MacroManager macro_manager, final AnonymousVariableManager anonymous_variables, - final World wyrd_world + final World wyrd_world, + final boolean expect_ref ) { this.macro_manager = macro_manager; this.anonymous_variables = anonymous_variables; this.wyrd_world = wyrd_world; + this.expect_ref = expect_ref; allocated_variables = new ArrayList<Ref>(); pre_computation_instructions = new ArrayList<Instruction>(); - result = null; + result_as_ref = null; + result_as_computation = null; } public List<Instruction> get_pre_instructions () @@ -38,7 +53,32 @@ public class ComputationCompiler extends FateVisitor public Computation get_computation () { - return result; + if (result_as_computation != null) + { + return result_as_computation; + } + else + { + result_as_computation = new ValueOf(result_as_ref); + + return result_as_computation; + } + } + + public Ref get_ref () + { + return result_as_ref; + } + + protected void generate_ref () + { + final Ref result; + + result = anonymous_variables.reserve(result_as_computation.get_type()); + + allocated_variables.add(result); + + result_as_ref = result; } public void free_anonymous_variables () @@ -56,7 +96,7 @@ public class ComputationCompiler extends FateVisitor ) throws Throwable { - throw new UnhandledASTElementException(); + /* TODO: implement */ } @Override @@ -66,7 +106,7 @@ public class ComputationCompiler extends FateVisitor ) throws Throwable { - throw new UnhandledASTElementException(); + /* TODO: implement */ } @Override @@ -76,7 +116,7 @@ public class ComputationCompiler extends FateVisitor ) throws Throwable { - throw new UnhandledASTElementException(); + /* TODO: implement */ } @Override @@ -86,7 +126,7 @@ public class ComputationCompiler extends FateVisitor ) throws Throwable { - throw new UnhandledASTElementException(); + /* TODO: implement */ } @Override @@ -96,7 +136,7 @@ public class ComputationCompiler extends FateVisitor ) throws Throwable { - throw new UnhandledASTElementException(); + /* TODO: implement */ } @Override @@ -106,7 +146,7 @@ public class ComputationCompiler extends FateVisitor ) throws Throwable { - throw new UnhandledASTElementException(); + /* TODO: implement */ } @Override @@ -116,7 +156,7 @@ public class ComputationCompiler extends FateVisitor ) throws Throwable { - throw new UnhandledASTElementException(); + /* TODO: implement */ } @Override @@ -126,7 +166,7 @@ public class ComputationCompiler extends FateVisitor ) throws Throwable { - throw new UnhandledASTElementException(); + /* TODO: implement */ } @Override @@ -136,7 +176,7 @@ public class ComputationCompiler extends FateVisitor ) throws Throwable { - throw new UnhandledASTElementException(); + /* TODO: implement */ } @Override @@ -146,7 +186,7 @@ public class ComputationCompiler extends FateVisitor ) throws Throwable { - throw new UnhandledASTElementException(); + /* TODO: implement */ } @Override @@ -156,7 +196,7 @@ public class ComputationCompiler extends FateVisitor ) throws Throwable { - throw new UnhandledASTElementException(); + /* TODO: implement */ } @Override @@ -166,7 +206,7 @@ public class ComputationCompiler extends FateVisitor ) throws Throwable { - throw new UnhandledASTElementException(); + /* TODO: implement */ } @Override @@ -176,7 +216,7 @@ public class ComputationCompiler extends FateVisitor ) throws Throwable { - throw new UnhandledASTElementException(); + /* TODO: implement */ } @Override @@ -186,7 +226,7 @@ public class ComputationCompiler extends FateVisitor ) throws Throwable { - throw new UnhandledASTElementException(); + /* TODO: implement */ } @Override @@ -196,7 +236,7 @@ public class ComputationCompiler extends FateVisitor ) throws Throwable { - throw new UnhandledASTElementException(); + /* TODO: implement */ } @Override @@ -206,7 +246,7 @@ public class ComputationCompiler extends FateVisitor ) throws Throwable { - throw new UnhandledASTElementException(); + /* TODO: implement */ } @Override @@ -216,6 +256,6 @@ public class ComputationCompiler extends FateVisitor ) throws Throwable { - throw new UnhandledASTElementException(); + /* TODO: implement */ } } diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/FateVisitor.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/FateVisitor.java deleted file mode 100644 index f6af43d..0000000 --- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/FateVisitor.java +++ /dev/null @@ -1,298 +0,0 @@ -package tonkadur.wyrd.v1.compiler.fate.v1; - -import tonkadur.wyrd.v1.error.UnhandledASTElementException; - -import tonkadur.fate.v1.lang.meta.NodeVisitor; - -public abstract class FateVisitor implements NodeVisitor -{ - /* Instruction Nodes */ - public void visit_add_element - ( - final tonkadur.fate.v1.lang.instruction.AddElement ae - ) - throws Throwable - { - throw new UnhandledASTElementException(); - } - - public void visit_assert (final tonkadur.fate.v1.lang.instruction.Assert a) - throws Throwable - { - throw new UnhandledASTElementException(); - } - - public void visit_clear (final tonkadur.fate.v1.lang.instruction.Clear c) - throws Throwable - { - throw new UnhandledASTElementException(); - } - - public void visit_cond_instruction - ( - final tonkadur.fate.v1.lang.instruction.CondInstruction ci - ) - throws Throwable - { - throw new UnhandledASTElementException(); - } - - public void visit_display (final tonkadur.fate.v1.lang.instruction.Display n) - throws Throwable - { - throw new UnhandledASTElementException(); - } - - public void visit_event_call - ( - final tonkadur.fate.v1.lang.instruction.EventCall n - ) - throws Throwable - { - throw new UnhandledASTElementException(); - } - - public void visit_if_else_instruction - ( - final tonkadur.fate.v1.lang.instruction.IfElseInstruction n - ) - throws Throwable - { - throw new UnhandledASTElementException(); - } - - public void visit_if_instruction - ( - final tonkadur.fate.v1.lang.instruction.IfInstruction n - ) - throws Throwable - { - throw new UnhandledASTElementException(); - } - - public void visit_instruction_list - ( - final tonkadur.fate.v1.lang.instruction.InstructionList n - ) - throws Throwable - { - throw new UnhandledASTElementException(); - } - - public void visit_macro_call - ( - final tonkadur.fate.v1.lang.instruction.MacroCall n - ) - throws Throwable - { - throw new UnhandledASTElementException(); - } - - public void visit_player_choice - ( - final tonkadur.fate.v1.lang.instruction.PlayerChoice n - ) - throws Throwable - { - throw new UnhandledASTElementException(); - } - - public void visit_player_choice_list - ( - final tonkadur.fate.v1.lang.instruction.PlayerChoiceList n - ) - throws Throwable - { - throw new UnhandledASTElementException(); - } - - public void visit_remove_all_of_element - ( - final tonkadur.fate.v1.lang.instruction.RemoveAllOfElement n - ) - throws Throwable - { - throw new UnhandledASTElementException(); - } - - public void visit_remove_element - ( - final tonkadur.fate.v1.lang.instruction.RemoveElement n - ) - throws Throwable - { - throw new UnhandledASTElementException(); - } - - public void visit_sequence_call - ( - final tonkadur.fate.v1.lang.instruction.SequenceCall n - ) - throws Throwable - { - throw new UnhandledASTElementException(); - } - - public void visit_set_value - ( - final tonkadur.fate.v1.lang.instruction.SetValue n - ) - throws Throwable - { - throw new UnhandledASTElementException(); - } - - /* Valued Nodes */ - public void visit_at_reference - ( - final tonkadur.fate.v1.lang.computation.AtReference n - ) - throws Throwable - { - throw new UnhandledASTElementException(); - } - - public void visit_cast - ( - final tonkadur.fate.v1.lang.computation.Cast n - ) - throws Throwable - { - throw new UnhandledASTElementException(); - } - - public void visit_cond_value - ( - final tonkadur.fate.v1.lang.computation.CondValue n - ) - throws Throwable - { - throw new UnhandledASTElementException(); - } - - public void visit_constant - ( - final tonkadur.fate.v1.lang.computation.Constant n - ) - throws Throwable - { - throw new UnhandledASTElementException(); - } - - public void visit_count_operator - ( - final tonkadur.fate.v1.lang.computation.CountOperator n - ) - throws Throwable - { - throw new UnhandledASTElementException(); - } - - public void visit_field_reference - ( - final tonkadur.fate.v1.lang.computation.FieldReference n - ) - throws Throwable - { - throw new UnhandledASTElementException(); - } - - public void visit_if_else_value - ( - final tonkadur.fate.v1.lang.computation.IfElseValue n - ) - throws Throwable - { - throw new UnhandledASTElementException(); - } - - public void visit_is_member_operator - ( - final tonkadur.fate.v1.lang.computation.IsMemberOperator n - ) - throws Throwable - { - throw new UnhandledASTElementException(); - } - - public void visit_macro_value_call - ( - final tonkadur.fate.v1.lang.computation.MacroValueCall n - ) - throws Throwable - { - throw new UnhandledASTElementException(); - } - - public void visit_newline - ( - final tonkadur.fate.v1.lang.computation.Newline n - ) - throws Throwable - { - throw new UnhandledASTElementException(); - } - - public void visit_operation - ( - final tonkadur.fate.v1.lang.computation.Operation n - ) - throws Throwable - { - throw new UnhandledASTElementException(); - } - - public void visit_paragraph - ( - final tonkadur.fate.v1.lang.computation.Paragraph n - ) - throws Throwable - { - throw new UnhandledASTElementException(); - } - - public void visit_parameter_reference - ( - final tonkadur.fate.v1.lang.computation.ParameterReference n - ) - throws Throwable - { - throw new UnhandledASTElementException(); - } - - public void visit_ref_operator - ( - final tonkadur.fate.v1.lang.computation.RefOperator n - ) - throws Throwable - { - throw new UnhandledASTElementException(); - } - - public void visit_text_with_effect - ( - final tonkadur.fate.v1.lang.computation.TextWithEffect n - ) - throws Throwable - { - throw new UnhandledASTElementException(); - } - - public void visit_value_to_rich_text - ( - final tonkadur.fate.v1.lang.computation.ValueToRichText n - ) - throws Throwable - { - throw new UnhandledASTElementException(); - } - - public void visit_variable_reference - ( - final tonkadur.fate.v1.lang.computation.VariableReference n - ) - throws Throwable - { - throw new UnhandledASTElementException(); - } -} 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 d9162bd..914a836 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 @@ -33,13 +33,19 @@ import tonkadur.wyrd.v1.lang.instruction.IfElseInstruction; import tonkadur.wyrd.v1.lang.instruction.NOP; import tonkadur.wyrd.v1.lang.instruction.Remove; import tonkadur.wyrd.v1.lang.instruction.ResolveChoices; +import tonkadur.wyrd.v1.lang.instruction.SequenceCall; import tonkadur.wyrd.v1.lang.instruction.SetValue; import tonkadur.wyrd.v1.lang.instruction.While; -import tonkadur.wyrd.v1.compiler.util.BinarySearch; import tonkadur.wyrd.v1.compiler.util.AnonymousVariableManager; +import tonkadur.wyrd.v1.compiler.util.BinarySearch; +import tonkadur.wyrd.v1.compiler.util.InsertAt; +import tonkadur.wyrd.v1.compiler.util.IterativeSearch; +import tonkadur.wyrd.v1.compiler.util.RemoveAllOf; +import tonkadur.wyrd.v1.compiler.util.RemoveAt; -public class InstructionCompiler extends FateVisitor +public class InstructionCompiler +implements tonkadur.fate.v1.lang.meta.InstructionVisitor { protected final AnonymousVariableManager anonymous_variables; protected final World wyrd_world; @@ -78,14 +84,18 @@ public class InstructionCompiler extends FateVisitor return result; } - protected ComputationCompiler new_computation_compiler () + protected ComputationCompiler new_computation_compiler + ( + final boolean expect_ref + ) { return new ComputationCompiler ( macro_manager, anonymous_variables, - wyrd_world + wyrd_world, + expect_ref ); } @@ -135,16 +145,16 @@ public class InstructionCompiler extends FateVisitor * <insert_at ...> * ) */ + /* final Ref element_as_ref, collection_as_ref, collection_size_as_ref; final Ref element_found, element_index, collection_size, next_index; final ComputationCompiler element_compiler, reference_compiler; final Type element_type; final List<Instruction> while_body, else_branch; - /**** Getting the Element as a ref ****/ - element_compiler = new_computation_compiler(); + element_compiler = new_computation_compiler(false); - ae.get_element().visit(element_compiler); + ae.get_element().get_visited_by(element_compiler); result.addAll(element_compiler.get_pre_instructions()); @@ -157,21 +167,14 @@ public class InstructionCompiler extends FateVisitor new SetValue(element_as_ref, element_compiler.get_computation()) ); - /**** Getting the Collection as a ref ****/ - reference_compiler = new_computation_compiler(); + reference_compiler = new_computation_compiler(true); - ae.get_collection().visit(reference_compiler); + ae.get_collection().get_visited_by(reference_compiler); result.addAll(reference_compiler.get_pre_instructions()); - if (!(reference_compiler.get_computation() instanceof Ref)) - { - /* TODO: error. */ - } - - collection_as_ref = (Ref) reference_compiler.get_computation(); + collection_as_ref = reference_compiler.get_ref(); - /**** Finding the element in the collection ****/ element_found = anonymous_variable.reserve(Type.BOOLEAN); element_index = anonymous_variable.reserve(Type.INT); collection_size = anonymous_variable.reserve(Type.INT); @@ -309,6 +312,7 @@ public class InstructionCompiler extends FateVisitor reference_compiler.free_anonymous_variables(); element_compiler.free_anonymous_variables(); + */ } protected void add_element_to_list @@ -330,20 +334,15 @@ public class InstructionCompiler extends FateVisitor final Ref collection_as_ref; final ComputationCompiler element_compiler, reference_compiler; - element_compiler = new_computation_compiler(); + element_compiler = new_computation_compiler(false); - ae.get_element().visit(element_compiler); + ae.get_element().get_visited_by(element_compiler); - reference_compiler = new_computation_compiler(); + reference_compiler = new_computation_compiler(true); - ae.get_collection().visit(reference_compiler); + ae.get_collection().get_visited_by(reference_compiler); - if (!(reference_compiler.get_computation() instanceof Ref)) - { - /* TODO: error. */ - } - - collection_as_ref = (Ref) reference_compiler.get_computation(); + collection_as_ref = reference_compiler.get_ref(); result.addAll(reference_compiler.get_pre_instructions()); result.addAll(element_compiler.get_pre_instructions()); @@ -358,10 +357,11 @@ public class InstructionCompiler extends FateVisitor ( new Cast ( - new Size(reference_compiler.get_computation()), + new Size(collection_as_ref), Type.STRING ) - ) + ), + element_compiler.get_computation().get_type() ), element_compiler.get_computation() ) @@ -415,9 +415,9 @@ public class InstructionCompiler extends FateVisitor */ final ComputationCompiler cc; - cc = new_computation_compiler(); + cc = new_computation_compiler(false); - a.get_condition().visit(cc); + a.get_condition().get_visited_by(cc); result.addAll(cc.get_pre_instructions()); result.add(new Assert(cc.get_computation())); @@ -435,24 +435,20 @@ public class InstructionCompiler extends FateVisitor * Wyrd: * <clear collection> */ + /* final ComputationCompiler reference_compiler; final Ref iterator, collection_ref; final List<Instruction> while_body; - reference_compiler = new_computation_compiler(); + reference_compiler = new_computation_compiler(true); - c.get_collection().visit(reference_compiler); + c.get_collection().get_visited_by(reference_compiler); result.addAll(reference_compiler.get_pre_instructions()); iterator = anonymous_variables.reserve(Type.INT); - if (!(reference_compiler.get_computation() instanceof Ref)) - { - /* TODO: error. */ - } - - collection_ref = (Ref) reference_compiler.get_computation(); + collection_ref = reference_compiler.get_ref(); while_body.add ( @@ -493,6 +489,7 @@ public class InstructionCompiler extends FateVisitor anonymous_variables.release(iterator); reference_compiler.free_anonymous_variables(); + */ } @Override @@ -527,7 +524,7 @@ public class InstructionCompiler extends FateVisitor List<Instruction> previous_else_branch; List<Instruction> current_else_branch; - previous_else_branch = results; + previous_else_branch = result; for ( @@ -544,9 +541,9 @@ public class InstructionCompiler extends FateVisitor current_else_branch = new ArrayList<Instruction>(); ic = new_instruction_compiler(); - cc = new_computation_compiler(); + cc = new_computation_compiler(false); - branch.get_car().visit(cc); + branch.get_car().get_visited_by(cc); previous_else_branch.addAll(cc.get_pre_instructions()); previous_else_branch.add @@ -564,7 +561,7 @@ public class InstructionCompiler extends FateVisitor cc.free_anonymous_variables(); } - previous_else_branch.add(Collections.singleton(new NOP())); + previous_else_branch.add(new NOP()); } @Override @@ -578,12 +575,12 @@ public class InstructionCompiler extends FateVisitor */ final ComputationCompiler cc; - cc = new_computation_compiler(); + cc = new_computation_compiler(false); - n.get_content.visit(cc); + n.get_content().get_visited_by(cc); result.addAll(cc.get_pre_instructions()); - result.add(new Display(cc.get_computation())); + result.add(new Display(Collections.singletonList(cc.get_computation()))); cc.free_anonymous_variables(); } @@ -614,9 +611,9 @@ public class InstructionCompiler extends FateVisitor { final ComputationCompiler cc; - cc = new_computation_compiler(); + cc = new_computation_compiler(false); - fate_computation.visit(cc); + fate_computation.get_visited_by(cc); result.addAll(cc.get_pre_instructions()); @@ -624,10 +621,7 @@ public class InstructionCompiler extends FateVisitor parameters.add(cc.get_computation()); } - result.add - ( - new EventCall(n.get_event().get_name(), cc.get_computation()) - ); + result.add(new EventCall(n.get_event().get_name(), parameters)); for (final ComputationCompiler cc: cc_list) { @@ -651,13 +645,13 @@ public class InstructionCompiler extends FateVisitor final InstructionCompiler if_true_ic; final InstructionCompiler if_false_ic; - cc = new_computation_compiler(); + cc = new_computation_compiler(false); if_true_ic = new_instruction_compiler(); if_false_ic = new_instruction_compiler(); - n.get_condition.visit(cc); - n.get_if_true().visit(if_true_ic); - n.get_if_false().visit(if_false_ic); + n.get_condition().get_visited_by(cc); + n.get_if_true().get_visited_by(if_true_ic); + n.get_if_false().get_visited_by(if_false_ic); result.addAll(cc.get_pre_instructions()); result.add @@ -688,11 +682,11 @@ public class InstructionCompiler extends FateVisitor final ComputationCompiler cc; final InstructionCompiler if_true_ic; - cc = new_computation_compiler(); + cc = new_computation_compiler(false); if_true_ic = new_instruction_compiler(); - n.get_condition.visit(cc); - n.get_if_true().visit(if_true_ic); + n.get_condition().get_visited_by(cc); + n.get_if_true().get_visited_by(if_true_ic); result.addAll(cc.get_pre_instructions()); result.add @@ -723,14 +717,14 @@ public class InstructionCompiler extends FateVisitor for ( final tonkadur.fate.v1.lang.meta.Instruction fate_instruction: - n.get_content() + n.get_instructions() ) { final InstructionCompiler ic; ic = new_instruction_compiler(); - fate_instruction.visit(ic); + fate_instruction.get_visited_by(ic); result.addAll(ic.get_result()); } @@ -748,12 +742,11 @@ public class InstructionCompiler extends FateVisitor * * Wyrd <content of macro with c0 ... cn> */ - final tonkadur.fate.v1.lang.meta.Instruction fate_macro_root; final List<ComputationCompiler> cc_list; - final List<Computation> parameters; + final List<Ref> parameters; cc_list = new ArrayList<ComputationCompiler>(); - parameters = new ArrayList<Computation>(); + parameters = new ArrayList<Ref>(); for ( @@ -763,27 +756,24 @@ public class InstructionCompiler extends FateVisitor { final ComputationCompiler cc; - cc = new_computation_compiler(); + cc = new_computation_compiler(true); - fate_computation.visit(cc); + fate_computation.get_visited_by(cc); result.addAll(cc.get_pre_instructions()); cc_list.add(cc); - parameters.add(cc.get_computation()); + parameters.add(cc.get_ref()); } - fate_macro_root = - macro_manager.push_context(n.get_name(), cc.get_computation()); - - fate_macro_root.visit(this); + macro_manager.push(n.get_macro(), parameters); + n.get_macro().get_root().get_visited_by(this); + macro_manager.pop(); for (final ComputationCompiler cc: cc_list) { cc.free_anonymous_variables(); } - - macro_manager.pop_context(); } @Override @@ -801,10 +791,10 @@ public class InstructionCompiler extends FateVisitor final ComputationCompiler cc; final InstructionCompiler ic; - cc = new_computation_compiler(); + cc = new_computation_compiler(false); ic = new_instruction_compiler(); - n.get_text().visit(cc); + n.get_text().get_visited_by(cc); result.addAll(cc.get_pre_instructions()); @@ -814,7 +804,7 @@ public class InstructionCompiler extends FateVisitor n.get_effects() ) { - fate_instruction.visit(ic); + fate_instruction.get_visited_by(ic); } result.add(new AddChoice(cc.get_computation(), ic.get_result())); @@ -844,10 +834,10 @@ public class InstructionCompiler extends FateVisitor n.get_choices() ) { - fate_instruction.visit(this); + fate_instruction.get_visited_by(this); } - fate_instruction.add(new ResolveChoices()); + result.add(new ResolveChoices()); } @Override @@ -862,228 +852,121 @@ public class InstructionCompiler extends FateVisitor * (remove_all_of element collection) * * Wyrd: - * (declare_variable int .index) - * (declare_variable int .limit) * (declare_variable <element_type> .elem) - * (declare_variable int .found) - * (set .index 0) - * (set .limit (- (size collection) 1)) - * (set .elem element) ;; avoid re-computing element - * (set .found 0) - * (while (< .index .limit) - * (ifelse (= (var .found) 0) - * ( - * (nop) - * ) - * ( - * (ifelse (= (var .elem) (var collection[.index])) - * (set .found (+ (var .found) 1)) - * (nop) - * ) - * (set - * collection[.index] - * (var collection[(+ (var .index) (var .found))]) - * ) - * ) + * (declare_variable int .collection_size) + * + * (set .elem element) + * (set .collection_size (size collection)) + * + * <if collection is a list: + * <remove_all (var .elem) (var .collection_size) collection> + * > + * <if collection is a set: + * (declare_variable bool .found) + * (declare_variable int .index) + * + * <binary_search + * (var .elem) + * (var .collection_size) + * collection + * .found + * .index + * > + * (ifelse (var .found) + * <remove_at (var .index) (var .collection_size) collection> + * (nop) * ) - * (set .index (+ (var .index) 1)) - * ) - * (while (> (var .found) 0) - * (set .found (- (var .found) 1)) - * (remove collection[(- (var .limit) (var .found))]) - * ) + * > */ final ComputationCompiler elem_cc, collection_cc; - final Ref index, limit, elem, found; - final Ref collection_as_ref; - final List<Instruction> while_body, while_body2, if_false_body; + final Ref elem, collection_size, collection; - elem_cc = new_computation_compiler(); - collection_cc = new_computation_compiler(); + elem_cc = new_computation_compiler(false); + collection_cc = new_computation_compiler(true); - while_body = new ArrayList<Instruction>(); - while_body2 = new ArrayList<Instruction>(); - if_false_body = new ArrayList<Instruction>(); + elem = anonymous_variables.reserve(elem_cc.get_computation().get_type()); + collection_size = anonymous_variables.reserve(Type.INT); - /* Get element with a minimum of anonymous variables */ - n.get_element().visit(elem_cc); + n.get_element().get_visited_by(elem_cc); + n.get_collection().get_visited_by(collection_cc); result.addAll(elem_cc.get_pre_instructions()); + result.addAll(collection_cc.get_pre_instructions()); - elem = anonymous_variable.reserve(elem_cc.get_computation().get_type()); + collection = collection_cc.get_ref(); result.add(new SetValue(elem, elem_cc.get_computation())); + result.add(new SetValue(collection_size, new Size(collection))); elem_cc.free_anonymous_variables(); - /****/ - - n.get_collection().visit(collection_cc); - if (!(collection_cc.get_computation() instanceof Ref)) + if + ( + ( + (tonkadur.fate.v1.lang.type.CollectionType) + n.get_collection().get_type() + ).is_set() + ) { - /* TODO: error. */ - } + final Computation value_of_elem, value_of_collection_size; + final Ref index, found; - result.addAll(collection_cc.get_pre_instructions()); - - collection_as_ref = (Ref) collection_cc.get_computation(); + index = anonymous_variables.reserve(Type.INT); + found = anonymous_variables.reserve(Type.BOOLEAN); - index = anonymous_variable.reserve(Type.INT); - limit = anonymous_variable.reserve(Type.INT); - found = anonymous_variable.reserve(Type.INT); + value_of_elem = new ValueOf(elem); + value_of_collection_size = new ValueOf(collection_size); - result.addAll(collection_cc.get_pre_instructions()); - - result.add(new SetValue(index, new Constant(Type.INT, "0"))); - result.add - ( - new SetValue + result.addAll ( - limit, - Operation.minus + BinarySearch.generate ( - new Size(collection_as_ref), - new Constant(Type.INT, "1") + anonymous_variables, + value_of_elem, + value_of_collection_size, + collection, + found, + index ) - ) - ); - result.add(new SetValue(found, new Constant(Type.INT, "0"))); - - if_false_body.add - ( - new IfElseInstruction - ( - Operation.equals - ( - new ValueOf(elem), - new ValueOf - ( - new RelativeRef - ( - collection_as_ref, - Collections.singletonList - ( - new Cast(new ValueOf(index), Type.STRING) - ) - ) - ) - ), - Collections.singletonList - ( - new SetValue - ( - found, - Operation.plus - ( - new ValueOf(found), - new Constant(Type.INT, "1") - ) - ) - ), - new NOP() - ) - ); + ); - if_false_body.add - ( - new SetValue + result.add ( - new RelativeRef - ( - collection_as_ref, - Collections.singletonList - ( - new Cast(new ValueOf(index), Type.STRING) - ) - ), - new ValueOf + new IfElseInstruction ( - new RelativeRef + new ValueOf(found), + RemoveAt.generate ( - collection_as_ref, - Collections.singletonList - ( - new Cast - ( - Operation.plus(new ValueOf(index), new ValueOf(found)), - Type.STRING - ) - ) - ) + anonymous_variables, + index, + value_of_collection_size, + collection + ), + Collections.singletonList(new NOP()) ) - ) - ); - - while_body.add - ( - new IfElseInstruction - ( - Operation.equal(new ValueOf(found), new Constant(Type.INT, "0")), - Collections.singletonList(new NOP()), - if_false_body - ) - ); - - while_body.add - ( - new SetValue - ( - index, - Operation.plus(new ValueOf(index), new Constant(Type.INT, "1")) - ) - ); - - result.add - ( - new While - ( - Operation.less_than(new ValueOf(index), new ValueOf(limit)), - while_body - ) - ); - - while_body2.add - ( - new SetValue - ( - found, - Operation.minus(new ValueOf(found), new Constant(Type.INT, "1")) - ) - ); + ); - while_body2.add - ( - new Remove + anonymous_variables.release(index); + anonymous_variables.release(found); + } + else + { + result.addAll ( - new RelativeRef + RemoveAllOf.generate ( - collection_as_ref, - Collections.singletonList - ( - new Cast - ( - Operation.minus(new ValueOf(limit), new ValueOf(found)), - Type.STRING - ) - ) + anonymous_variables, + new ValueOf(elem), + new ValueOf(collection_size), + collection ) - ) - ); - - result.add - ( - new While - ( - Operation.greater_than - ( - new ValueOf(found), - new Constant(Type.INT, "0") - ), - while_body2 - ) - ); + ); + } collection_cc.free_anonymous_variables(); + + anonymous_variables.release(elem); + anonymous_variables.release(collection_size); } @Override @@ -1098,242 +981,126 @@ public class InstructionCompiler extends FateVisitor * (remove_element element collection) * * Wyrd: - * (declare_variable int .index) - * (declare_variable int .limit) * (declare_variable <element_type> .elem) + * (declare_variable int .collection_size) * (declare_variable boolean .found) - * (declare_variable int .next) - * (set .index 0) - * (set .limit (- (size collection) 1)) - * (set .elem element) ;; avoid re-computing element - * (set .found false) - * (while (< .index .limit) - * (set .next (+ (var index) 1)) - * (ifelse (var .found) - * ( - * (set collection[.index] (var collection[.next])) - * ) - * (ifelse (= (var .elem) (var collection[.index])) - * (;; if_true_body - * (set .found true) - * (set collection[.index] (var collection[.next])) - * ) - * (nop) - * ) - * ) - * (set .index (var .next)) - * ) - * (ifelse (or (var .found) (= (var .elem) (var collection[.index]))) - * (remove collection[.limit]) + * (declare_variable int .index) + * + * (set .elem element) + * (set .collection_size (size collection)) + * + * <if collection is a set: + * <BinarySearch + * (var .elem) + * (var .collection_size) + * collection + * .found + * .index + * > + * > + * <if collection is a list: + * <IterativeSearch + * (var .elem) + * (var .collection_size) + * collection + * .found + * .index + * > + * > + * + * (if (var .found) + * <remove_at (var index) (var .collection_size) collection> * (nop) * ) */ final ComputationCompiler elem_cc, collection_cc; - final Ref index, limit, elem, found, next; - final Ref collection_as_ref; - final List<Instruction> while_body, if_true_body; + final Ref elem, collection_size, found, index; + final Ref collection; + final Computation value_of_collection_size; - elem_cc = new_computation_compiler(); - collection_cc = new_computation_compiler(); + elem_cc = new_computation_compiler(false); + collection_cc = new_computation_compiler(true); - while_body = new ArrayList<Instruction>(); - if_true_body = new ArrayList<Instruction>(); + elem = anonymous_variables.reserve(elem_cc.get_computation().get_type()); + collection_size = anonymous_variables.reserve(Type.INT); + found = anonymous_variables.reserve(Type.BOOLEAN); + index = anonymous_variables.reserve(Type.INT); - /* Minimize variable usage for element ***********/ - n.get_element().visit(elem_cc); + n.get_element().get_visited_by(elem_cc); + n.get_collection().get_visited_by(collection_cc); result.addAll(elem_cc.get_pre_instructions()); - - elem = anonymous_variable.reserve(elem_cc.get_computation().get_type()); - - result.add(new SetValue(elem, elem_cc.get_computation())); - - elem_cc.free_anonymous_variables(); - /***********/ - - n.get_collection().visit(collection_cc); - result.addAll(collection_cc.get_pre_instructions()); - if (!(collection_cc.get_computation() instanceof Ref)) - { - /* TODO: error. */ - } + collection = collection_cc.get_ref(); - collection_as_ref = (Ref) collection_cc.get_computation(); + value_of_collection_size = new ValueOf(collection_size); - index = anonymous_variable.reserve(Type.INT); - limit = anonymous_variable.reserve(Type.INT); - found = anonymous_variable.reserve(Type.BOOLEAN); - next = anonymous_variable.reserve(Type.INT); + result.add(new SetValue(elem, elem_cc.get_computation())); + result.add(new SetValue(collection_size, new Size(collection))); - result.add(new SetValue(index, new Constant(Type.INT, "0"))); - result.add - ( - new SetValue - ( - limit, - Operation.minus - ( - new Size(collection_as_ref), - new Constant(Type.INT, "1") - ) - ) - ); - result.add(new SetValue(found, Constant.FALSE)); + elem_cc.free_anonymous_variables(); - if_true_branch.add(new SetValue(found, Constant.TRUE)); - if_true_branch.add + if ( - new SetValue ( - /* collection[.index] */ - new RelativeRef - ( - collection_as_ref, - Collections.singletonList - ( - new Cast(newValueOf(index), Type.STRING) - ) - ), - /* (var collection[.next]) */ - new ValueOf - ( - new RelativeRef - ( - collection_as_ref, - Collections.singletonList - ( - new Cast(new ValueOf(next), Type.STRING) - ) - ) - ) - ) - ); - - while_body.add - ( - new SetValue + (tonkadur.fate.v1.lang.type.CollectionType) + n.get_collection().get_type() + ).is_set() + ) + { + result.addAll ( - next, - Operation.plus + BinarySearch.generate ( - new ValueOf(index), - new Constant(Type.INT, "1") + anonymous_variables, + new ValueOf(elem), + value_of_collection_size, + collection, + found, + index ) - ) - ); - - while_body.add - ( - new IfElseInstruction + ); + } + else + { + result.addAll ( - new ValueOf(found), - Collections.singletonList + IterativeSearch.generate ( - new SetValue - ( - new RelativeRef - ( - collection_as_ref, - Collections.singletonList - ( - new Cast(newValueOf(index), Type.STRING) - ) - ), - new ValueOf - ( - new RelativeRef - ( - collection_as_ref, - Collections.singletonList - ( - new Cast(new ValueOf(next), Type.STRING) - ) - ) - ) - ) - ), - Collections.singletonList - ( - new IfElseInstruction - ( - Operation.equals - ( - new ValueOf(elem), - new ValueOf - ( - new RelativeRef - ( - collection_as_ref, - Collections.singletonList - ( - new Cast(newValueOf(index), Type.STRING) - ) - ) - ) - ), - if_true_branch, - Collections.singleton(new NOP()) - ) + anonymous_variables, + new ValueOf(elem), + value_of_collection_size, + collection, + found, + index ) - ) - ); + ); + } - result.add - ( - new While - ( - Operation.less_than(new ValueOf(index), new ValueOf(limit)), - while_body - ) - ); + anonymous_variables.release(elem); result.add ( new IfElseInstruction ( - Operation.or - ( - new ValueOf(found), - Operation.equals - ( - new ValueOf(elem), - new ValueOf - ( - new RelativeRef - ( - collection_as_ref, - Collections.singletonList - ( - new Cast(newValueOf(index), Type.STRING) - ) - ) - ) - ) - ), - new Remove + new ValueOf(found), + RemoveAt.generate ( - new RelativeRef - ( - collection_as_ref, - Collections.singletonList - ( - new Cast(newValueOf(limit), Type.STRING) - ) - ) + anonymous_variables, + index, + value_of_collection_size, + collection ), - new NOP() + Collections.singletonList(new NOP()) ) ); - collection_cc.free_anonymous_variables(); - anonymous_variables.release(index); - anonymous_variables.release(limit); - anonymous_variables.release(elem); anonymous_variables.release(found); - anonymous_variables.release(next); + anonymous_variables.release(collection_size); + + collection_cc.free_anonymous_variables(); } @Override @@ -1363,21 +1130,21 @@ public class InstructionCompiler extends FateVisitor */ final ComputationCompiler value_cc, ref_cc; - value_cc = new_computation_compiler(); - ref_cc = new_computation_compiler(); + value_cc = new_computation_compiler(false); + ref_cc = new_computation_compiler(true); - n.get_value().visit(value_cc); + n.get_value().get_visited_by(value_cc); result.addAll(value_cc.get_pre_instructions()); - n.get_reference().visit(ref_cc); + n.get_reference().get_visited_by(ref_cc); result.addAll(ref_cc.get_pre_instructions()); result.add ( - new SetValue(ref_cc.get_computation(), value_cc.get_computation()) + new SetValue(ref_cc.get_ref(), value_cc.get_computation()) ); - element_cc.free_anonymous_variables(); + value_cc.free_anonymous_variables(); ref_cc.free_anonymous_variables(); } } diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/MacroManager.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/MacroManager.java new file mode 100644 index 0000000..29256e0 --- /dev/null +++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/MacroManager.java @@ -0,0 +1,50 @@ +package tonkadur.wyrd.v1.compiler.fate.v1; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Stack; + +import tonkadur.wyrd.v1.lang.computation.Ref; + +public class MacroManager +{ + protected final Stack<Map<String, Ref>> context_stack; + + public MacroManager () + { + context_stack = new Stack<Map<String, Ref>>(); + } + + public void pop () + { + context_stack.pop(); + } + + public void push + ( + tonkadur.fate.v1.lang.Macro macro, + final List<Ref> parameter_refs + ) + { + final Iterator<Ref> pri; + final Iterator<tonkadur.fate.v1.lang.meta.TypedEntryList.TypedEntry> pre; + final Map<String, Ref> parameters; + + parameters = new HashMap<String, Ref>(); + + pri = parameter_refs.iterator(); + pre = macro.get_parameters().get_entries().iterator(); + + while (pri.hasNext()) + { + parameters.put(pre.next().get_name(), pri.next()); + } + } + + public Ref get_parameter_ref (final String parameter) + { + return context_stack.peek().get(parameter); + } +} diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/util/BinarySearch.java b/src/core/src/tonkadur/wyrd/v1/compiler/util/BinarySearch.java index f16537f..6857e58 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/util/BinarySearch.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/util/BinarySearch.java @@ -29,8 +29,8 @@ public class BinarySearch /* * (Computation <E> element) - * (declare_variable global <List E> collection) * (Computation int collection_size) + * (declare_variable global <List E> collection) * (declare_variable global boolean result_found) * (declare_variable global index result_index) * @@ -70,8 +70,8 @@ public class BinarySearch ( final AnonymousVariableManager anonymous_variables, final Computation target, - final Ref collection, final Computation collection_size, + final Ref collection, final Ref result_was_found, final Ref result_index ) diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/util/IterativeSearch.java b/src/core/src/tonkadur/wyrd/v1/compiler/util/IterativeSearch.java index aa62bbd..5ce409d 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/util/IterativeSearch.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/util/IterativeSearch.java @@ -28,8 +28,8 @@ public class IterativeSearch /* * (Computation <E> target) - * (declare_variable global <List E> collection) * (Computation int collection_size) + * (declare_variable global <List E> collection) * (declare_variable global boolean result_found) * (declare_variable global index result_index) * @@ -51,8 +51,8 @@ public class IterativeSearch ( final AnonymousVariableManager anonymous_variables, final Computation target, - final Ref collection, final Computation collection_size, + final Ref collection, final Ref result_was_found, final Ref result_index ) diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/util/RemoveAll.java b/src/core/src/tonkadur/wyrd/v1/compiler/util/RemoveAllOf.java index 699f18d..78d81ad 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/util/RemoveAll.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/util/RemoveAllOf.java @@ -22,10 +22,10 @@ import tonkadur.wyrd.v1.lang.instruction.Remove; import tonkadur.wyrd.v1.lang.instruction.SetValue; import tonkadur.wyrd.v1.lang.instruction.While; -public class RemoveAll +public class RemoveAllOf { /* Utility Class */ - private RemoveAll () {} + private RemoveAllOf () {} /* * (Computation <E> element) diff --git a/src/core/src/tonkadur/wyrd/v1/lang/World.java b/src/core/src/tonkadur/wyrd/v1/lang/World.java index 3cb0397..e8e86ba 100644 --- a/src/core/src/tonkadur/wyrd/v1/lang/World.java +++ b/src/core/src/tonkadur/wyrd/v1/lang/World.java @@ -39,6 +39,11 @@ public class World global_instructions = new ArrayList<Instruction>(); } + public void add_required_extension (final String name) + { + required_extensions.add(name); + } + public DictType get_dict_type (final String name) { return dict_types.get(name); |


