| summaryrefslogtreecommitdiff | 
diff options
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); | 


