From 41c53b856944146e5cd1d1713ba11b931790978a Mon Sep 17 00:00:00 2001 From: Nathanael Sensfelder Date: Fri, 14 Aug 2020 00:05:09 +0200 Subject: ... --- .../fate/v1/lang/computation/AddressOperator.java | 61 ++++++++++++++ .../fate/v1/lang/computation/AtReference.java | 6 +- .../src/tonkadur/fate/v1/lang/computation/New.java | 4 +- .../fate/v1/lang/computation/RefOperator.java | 57 ------------- .../fate/v1/lang/meta/ComputationVisitor.java | 2 +- .../tonkadur/fate/v1/lang/type/PointerType.java | 96 ++++++++++++++++++++++ .../src/tonkadur/fate/v1/lang/type/RefType.java | 96 ---------------------- src/core/src/tonkadur/fate/v1/parser/FateLexer.g4 | 2 +- src/core/src/tonkadur/fate/v1/parser/FateParser.g4 | 4 +- .../v1/compiler/fate/v1/ComputationCompiler.java | 26 +++--- .../v1/compiler/fate/v1/InstructionCompiler.java | 91 ++++++++++---------- .../wyrd/v1/compiler/util/BinarySearch.java | 2 + .../src/tonkadur/wyrd/v1/compiler/util/Clear.java | 4 +- .../wyrd/v1/compiler/util/CountOccurrences.java | 4 +- .../tonkadur/wyrd/v1/compiler/util/InsertAt.java | 2 + .../wyrd/v1/compiler/util/RemoveAllOf.java | 8 +- .../tonkadur/wyrd/v1/compiler/util/RemoveAt.java | 2 + .../wyrd/v1/compiler/util/ReverseList.java | 2 + 18 files changed, 245 insertions(+), 224 deletions(-) create mode 100644 src/core/src/tonkadur/fate/v1/lang/computation/AddressOperator.java delete mode 100644 src/core/src/tonkadur/fate/v1/lang/computation/RefOperator.java create mode 100644 src/core/src/tonkadur/fate/v1/lang/type/PointerType.java delete mode 100644 src/core/src/tonkadur/fate/v1/lang/type/RefType.java diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/AddressOperator.java b/src/core/src/tonkadur/fate/v1/lang/computation/AddressOperator.java new file mode 100644 index 0000000..290918a --- /dev/null +++ b/src/core/src/tonkadur/fate/v1/lang/computation/AddressOperator.java @@ -0,0 +1,61 @@ +package tonkadur.fate.v1.lang.computation; + +import tonkadur.parser.Origin; + +import tonkadur.fate.v1.lang.type.PointerType; + +import tonkadur.fate.v1.lang.meta.ComputationVisitor; +import tonkadur.fate.v1.lang.meta.Reference; +import tonkadur.fate.v1.lang.meta.Computation; + +public class AddressOperator extends Computation +{ + /***************************************************************************/ + /**** MEMBERS **************************************************************/ + /***************************************************************************/ + protected final Reference referred; + + /***************************************************************************/ + /**** PROTECTED ************************************************************/ + /***************************************************************************/ + /**** Constructors *********************************************************/ + public AddressOperator (final Origin origin, final Reference referred) + { + super + ( + origin, + new PointerType(origin, referred.get_type(), "auto generated") + ); + this.referred = referred; + } + + /***************************************************************************/ + /**** PUBLIC ***************************************************************/ + /***************************************************************************/ + /**** Accessors ************************************************************/ + @Override + public void get_visited_by (final ComputationVisitor cv) + throws Throwable + { + cv.visit_address_operator(this); + } + + public Reference get_target () + { + return referred; + } + + /**** Misc. ****************************************************************/ + @Override + public String toString () + { + final StringBuilder sb = new StringBuilder(); + + sb.append(origin.toString()); + sb.append("(AddressOf "); + sb.append(referred.get_name()); + sb.append(") "); + + return sb.toString(); + } +} 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 a26d399..bfe7920 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/AtReference.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/AtReference.java @@ -14,7 +14,7 @@ import tonkadur.fate.v1.lang.Variable; import tonkadur.fate.v1.lang.meta.ComputationVisitor; import tonkadur.fate.v1.lang.meta.Reference; -import tonkadur.fate.v1.lang.type.RefType; +import tonkadur.fate.v1.lang.type.PointerType; import tonkadur.fate.v1.lang.type.Type; public class AtReference extends Reference @@ -56,7 +56,7 @@ public class AtReference extends Reference current_type = parent.get_type(); - if (!(current_type instanceof RefType)) + if (!(current_type instanceof PointerType)) { ErrorManager.handle ( @@ -73,7 +73,7 @@ public class AtReference extends Reference } else { - current_type = ((RefType) current_type).get_referenced_type(); + current_type = ((PointerType) current_type).get_referenced_type(); } return new AtReference(origin, current_type, parent); diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/New.java b/src/core/src/tonkadur/fate/v1/lang/computation/New.java index 83eef1f..4f036af 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/New.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/New.java @@ -2,7 +2,7 @@ package tonkadur.fate.v1.lang.computation; import tonkadur.parser.Origin; -import tonkadur.fate.v1.lang.type.RefType; +import tonkadur.fate.v1.lang.type.PointerType; import tonkadur.fate.v1.lang.type.Type; import tonkadur.fate.v1.lang.meta.ComputationVisitor; @@ -21,7 +21,7 @@ public class New extends Computation /**** Constructors *********************************************************/ public New (final Origin origin, final Type t) { - super(origin, new RefType(origin, t, "auto generated")); + super(origin, new PointerType(origin, t, "auto generated")); this.target_type = t; } diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/RefOperator.java b/src/core/src/tonkadur/fate/v1/lang/computation/RefOperator.java deleted file mode 100644 index 54cdaad..0000000 --- a/src/core/src/tonkadur/fate/v1/lang/computation/RefOperator.java +++ /dev/null @@ -1,57 +0,0 @@ -package tonkadur.fate.v1.lang.computation; - -import tonkadur.parser.Origin; - -import tonkadur.fate.v1.lang.type.RefType; - -import tonkadur.fate.v1.lang.meta.ComputationVisitor; -import tonkadur.fate.v1.lang.meta.Reference; -import tonkadur.fate.v1.lang.meta.Computation; - -public class RefOperator extends Computation -{ - /***************************************************************************/ - /**** MEMBERS **************************************************************/ - /***************************************************************************/ - protected final Reference referred; - - /***************************************************************************/ - /**** PROTECTED ************************************************************/ - /***************************************************************************/ - /**** Constructors *********************************************************/ - public RefOperator (final Origin origin, final Reference referred) - { - super(origin, new RefType(origin, referred.get_type(), "auto generated")); - this.referred = referred; - } - - /***************************************************************************/ - /**** PUBLIC ***************************************************************/ - /***************************************************************************/ - /**** Accessors ************************************************************/ - @Override - public void get_visited_by (final ComputationVisitor cv) - throws Throwable - { - cv.visit_ref_operator(this); - } - - public Reference get_target () - { - return referred; - } - - /**** Misc. ****************************************************************/ - @Override - public String toString () - { - final StringBuilder sb = new StringBuilder(); - - sb.append(origin.toString()); - sb.append("(Ref "); - sb.append(referred.get_name()); - sb.append(") "); - - return sb.toString(); - } -} diff --git a/src/core/src/tonkadur/fate/v1/lang/meta/ComputationVisitor.java b/src/core/src/tonkadur/fate/v1/lang/meta/ComputationVisitor.java index 0b992cb..32fcee7 100644 --- a/src/core/src/tonkadur/fate/v1/lang/meta/ComputationVisitor.java +++ b/src/core/src/tonkadur/fate/v1/lang/meta/ComputationVisitor.java @@ -58,7 +58,7 @@ public interface ComputationVisitor public void visit_paragraph (final Paragraph n) throws Throwable; - public void visit_ref_operator (final RefOperator n) + public void visit_address_operator (final AddressOperator n) throws Throwable; public void visit_text_with_effect (final TextWithEffect n) diff --git a/src/core/src/tonkadur/fate/v1/lang/type/PointerType.java b/src/core/src/tonkadur/fate/v1/lang/type/PointerType.java new file mode 100644 index 0000000..b610954 --- /dev/null +++ b/src/core/src/tonkadur/fate/v1/lang/type/PointerType.java @@ -0,0 +1,96 @@ +package tonkadur.fate.v1.lang.type; + +import tonkadur.parser.Origin; + +import tonkadur.fate.v1.lang.meta.DeclaredEntity; + +public class PointerType extends Type +{ + /***************************************************************************/ + /**** MEMBERS **************************************************************/ + /***************************************************************************/ + protected final Type referenced_type; + + /***************************************************************************/ + /**** PUBLIC ***************************************************************/ + /***************************************************************************/ + + /**** Constructors *********************************************************/ + public PointerType + ( + final Origin origin, + final Type referenced_type, + final String name + ) + { + super(origin, null, name); + + this.referenced_type = referenced_type; + } + + /**** Accessors ************************************************************/ + public Type get_referenced_type () + { + return referenced_type; + } + + /**** Compatibility ********************************************************/ + @Override + public boolean can_be_used_as (final Type t) + { + if (t instanceof PointerType) + { + final PointerType dt; + + dt = (PointerType) t; + + return referenced_type.can_be_used_as(dt.referenced_type); + } + + return false; + } + + /* + * This is for the very special case where a type is used despite not being + * even a sub-type of the expected one. Using this rather expensive function, + * the most restrictive shared type will be returned. If no such type exists, + * the ANY time is returned. + */ + @Override + public DeclaredEntity generate_comparable_to (final DeclaredEntity de) + { + final Type resulting_referenced_type; + final PointerType dt; + + if (!(de instanceof PointerType)) + { + return Type.ANY; + } + + dt = (PointerType) de; + resulting_referenced_type = + (Type) referenced_type.generate_comparable_to(dt.referenced_type); + + return new PointerType(get_origin(), resulting_referenced_type, name); + } + + @Override + public Type get_act_as_type () + { + return Type.REF; + } + + /**** Misc. ****************************************************************/ + @Override + public String toString () + { + final StringBuilder sb = new StringBuilder(); + + sb.append("(Pointer to "); + sb.append(referenced_type.toString()); + sb.append(")::"); + sb.append(name); + + return sb.toString(); + } +} diff --git a/src/core/src/tonkadur/fate/v1/lang/type/RefType.java b/src/core/src/tonkadur/fate/v1/lang/type/RefType.java deleted file mode 100644 index 15d9c53..0000000 --- a/src/core/src/tonkadur/fate/v1/lang/type/RefType.java +++ /dev/null @@ -1,96 +0,0 @@ -package tonkadur.fate.v1.lang.type; - -import tonkadur.parser.Origin; - -import tonkadur.fate.v1.lang.meta.DeclaredEntity; - -public class RefType extends Type -{ - /***************************************************************************/ - /**** MEMBERS **************************************************************/ - /***************************************************************************/ - protected final Type referenced_type; - - /***************************************************************************/ - /**** PUBLIC ***************************************************************/ - /***************************************************************************/ - - /**** Constructors *********************************************************/ - public RefType - ( - final Origin origin, - final Type referenced_type, - final String name - ) - { - super(origin, null, name); - - this.referenced_type = referenced_type; - } - - /**** Accessors ************************************************************/ - public Type get_referenced_type () - { - return referenced_type; - } - - /**** Compatibility ********************************************************/ - @Override - public boolean can_be_used_as (final Type t) - { - if (t instanceof RefType) - { - final RefType dt; - - dt = (RefType) t; - - return referenced_type.can_be_used_as(dt.referenced_type); - } - - return false; - } - - /* - * This is for the very special case where a type is used despite not being - * even a sub-type of the expected one. Using this rather expensive function, - * the most restrictive shared type will be returned. If no such type exists, - * the ANY time is returned. - */ - @Override - public DeclaredEntity generate_comparable_to (final DeclaredEntity de) - { - final Type resulting_referenced_type; - final RefType dt; - - if (!(de instanceof RefType)) - { - return Type.ANY; - } - - dt = (RefType) de; - resulting_referenced_type = - (Type) referenced_type.generate_comparable_to(dt.referenced_type); - - return new RefType(get_origin(), resulting_referenced_type, name); - } - - @Override - public Type get_act_as_type () - { - return Type.REF; - } - - /**** Misc. ****************************************************************/ - @Override - public String toString () - { - final StringBuilder sb = new StringBuilder(); - - sb.append("(Ref to "); - sb.append(referenced_type.toString()); - sb.append(")::"); - sb.append(name); - - return sb.toString(); - } -} diff --git a/src/core/src/tonkadur/fate/v1/parser/FateLexer.g4 b/src/core/src/tonkadur/fate/v1/parser/FateLexer.g4 index ae3763d..6fcb44b 100644 --- a/src/core/src/tonkadur/fate/v1/parser/FateLexer.g4 +++ b/src/core/src/tonkadur/fate/v1/parser/FateLexer.g4 @@ -76,7 +76,7 @@ PLAYER_CHOICE_KW: L_PAREN ('choice'|'user'US'choice'|'player'US'choice') SEP+; PLUS_KW: L_PAREN ('plus'|'+') SEP+; POWER_KW: L_PAREN ('power'|'^'|'**'|'pow') SEP+; RANDOM_KW: L_PAREN ('random'|'rand'|'rnd') SEP+; -REF_KW: L_PAREN (('ref'('erence'?))|'ptr') SEP+; +REF_KW: L_PAREN (((('ref'('erence'?))|'ptr'|'pointer')(US'to')?)|('address'(US'of'))) SEP+; REMOVE_ALL_KW: L_PAREN 'remove'US'all' SEP+; REVERSE_KW: L_PAREN 'reverse'(US'list')? SEP+; REMOVE_ONE_KW: L_PAREN 'remove'US'one' SEP+; diff --git a/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 b/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 index 66ffb0f..fffe6a3 100644 --- a/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 +++ b/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 @@ -1482,7 +1482,7 @@ returns [Type result] ); $result = - new RefType + new PointerType ( start_origin, ($type.result), @@ -2349,7 +2349,7 @@ returns [Computation result] | REF_KW value_reference WS* R_PAREN { $result = - new RefOperator + new AddressOperator ( CONTEXT.get_origin_at ( 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 afd53c2..ac24ae7 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 @@ -13,6 +13,7 @@ import tonkadur.wyrd.v1.lang.meta.Computation; import tonkadur.wyrd.v1.lang.meta.Instruction; import tonkadur.wyrd.v1.lang.type.Type; +import tonkadur.wyrd.v1.lang.type.PointerType; import tonkadur.wyrd.v1.lang.instruction.SetValue; @@ -25,8 +26,8 @@ import tonkadur.wyrd.v1.compiler.util.CountOccurrences; import tonkadur.wyrd.v1.lang.computation.*; - import tonkadur.wyrd.v1.lang.World; +import tonkadur.wyrd.v1.lang.Register; public class ComputationCompiler implements tonkadur.fate.v1.lang.meta.ComputationVisitor @@ -84,7 +85,7 @@ implements tonkadur.fate.v1.lang.meta.ComputationVisitor { if (result_as_address == null) { - System.err.println("[P] Missing generate_ref()!"); + System.err.println("[P] Missing generate_address()!"); } return result_as_address; @@ -133,9 +134,9 @@ implements tonkadur.fate.v1.lang.meta.ComputationVisitor } @Override - public void visit_at_address + public void visit_at_reference ( - final tonkadur.fate.v1.lang.computation.AtAddress n + final tonkadur.fate.v1.lang.computation.AtReference n ) throws Throwable { @@ -155,9 +156,9 @@ implements tonkadur.fate.v1.lang.meta.ComputationVisitor ( compiler, ( - (tonkadur.fate.v1.lang.type.AddressType) + (tonkadur.fate.v1.lang.type.PointerType) n.get_parent().get_type() - ).get_addressd_type() + ).get_referenced_type() ) ); } @@ -258,8 +259,7 @@ implements tonkadur.fate.v1.lang.meta.ComputationVisitor else { final Iterator> it; - final Register result_register; - final Address result_address; + final Register result; Cons next; List new_value, new_cond; Instruction prev_branch; @@ -442,9 +442,9 @@ implements tonkadur.fate.v1.lang.meta.ComputationVisitor } @Override - public void visit_field_address + public void visit_field_reference ( - final tonkadur.fate.v1.lang.computation.FieldAddress n + final tonkadur.fate.v1.lang.computation.FieldReference n ) throws Throwable { @@ -536,7 +536,7 @@ implements tonkadur.fate.v1.lang.meta.ComputationVisitor ( new SetValue ( - if_else_result.get_addresss(), + if_else_result.get_address(), if_false_cc.get_computation() ) ); @@ -597,7 +597,7 @@ implements tonkadur.fate.v1.lang.meta.ComputationVisitor n.get_collection().get_visited_by(collection_compiler); n.get_element().get_visited_by(element_compiler); - collection_compiler.generate_ref(); + collection_compiler.generate_address(); assimilate(collection_compiler); assimilate(element_compiler); @@ -1260,7 +1260,7 @@ implements tonkadur.fate.v1.lang.meta.ComputationVisitor assimilate(n_cc); - result_as_computation = n_cc.get_address() + result_as_computation = n_cc.get_address(); } @Override 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 f088c1d..04a7bcd 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 @@ -1,6 +1,7 @@ package tonkadur.wyrd.v1.compiler.fate.v1; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.List; @@ -9,6 +10,7 @@ import tonkadur.error.Error; import tonkadur.functional.Cons; import tonkadur.wyrd.v1.lang.World; +import tonkadur.wyrd.v1.lang.Register; import tonkadur.wyrd.v1.lang.meta.Computation; import tonkadur.wyrd.v1.lang.meta.Instruction; @@ -158,8 +160,8 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor compiler.registers().release(element_index); compiler.registers().release(collection_size); - element_compiler.release_variables(); - address_compiler.release_variables(); + element_compiler.release_registers(); + address_compiler.release_registers(); } protected void add_element_to_list @@ -220,8 +222,8 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor ) ); - address_compiler.release_variables(); - element_compiler.release_variables(); + address_compiler.release_registers(); + element_compiler.release_registers(); } @Override @@ -306,8 +308,8 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor new Assert(cond_cc.get_computation(), msg_cc.get_computation()) ); - cond_cc.release_variables(); - msg_cc.release_variables(); + cond_cc.release_registers(); + msg_cc.release_registers(); } @Override @@ -344,7 +346,7 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor ) ); - address_compiler.release_variables(); + address_compiler.release_registers(); } public void visit_reverse_list @@ -383,7 +385,7 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor ) ); - address_compiler.release_variables(); + address_compiler.release_registers(); } @Override @@ -496,7 +498,7 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor previous_else_branch = current_branch; - cc.release_variables(); + cc.release_registers(); } result.add(compiler.assembler().merge(previous_else_branch)); @@ -524,7 +526,7 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor result.add(new Display(cc.get_computation())); - cc.release_variables(); + cc.release_registers(); } @Override @@ -536,7 +538,7 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor cc = new ComputationCompiler(compiler); - n.get_address().get_visited_by(cc); + n.get_reference().get_visited_by(cc); if (cc.has_init()) { @@ -550,14 +552,14 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor System.err.println ( "[P] Argument in (free " - + n.get_address() + + n.get_reference() + ") did not compile to a address." ); } result.add(new Remove(target)); - cc.release_variables(); + cc.release_registers(); } @Override @@ -625,7 +627,7 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor } compiler.assembler().pop_context_label("breakable"); - cc.release_variables(); + cc.release_registers(); } @Override @@ -681,7 +683,7 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor ); compiler.assembler().pop_context_label("breakable"); - cc.release_variables(); + cc.release_registers(); } @Override @@ -758,7 +760,7 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor } compiler.assembler().pop_context_label("breakable"); - cc.release_variables(); + cc.release_registers(); } @Override @@ -789,7 +791,7 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor index = compiler.registers().reserve(Type.INT); collection_size = compiler.registers().reserve(Type.INT); - result.add(new SetValue(index, Constant.ZERO)); + result.add(new SetValue(index.get_address(), Constant.ZERO)); n.get_collection().get_visited_by(cc); @@ -932,8 +934,8 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor compiler.registers().release(collection_size); - index_cc.release_variables(); - collection_cc.release_variables(); + index_cc.release_registers(); + collection_cc.release_registers(); } @@ -1030,7 +1032,7 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor previous_else_branch = current_branch; - cc.release_variables(); + cc.release_registers(); } result.add(compiler.assembler().merge(previous_else_branch)); @@ -1080,7 +1082,7 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor for (final ComputationCompiler cc: cc_list) { - cc.release_variables(); + cc.release_registers(); } } @@ -1125,7 +1127,7 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor ) ); - cc.release_variables(); + cc.release_registers(); } @Override @@ -1165,7 +1167,7 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor ) ); - cc.release_variables(); + cc.release_registers(); } @Override @@ -1300,7 +1302,7 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor ) ); - cc.release_variables(); + cc.release_registers(); } @Override @@ -1421,14 +1423,13 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor ).is_set() ) { - final Computation value_of_elem, value_of_collection_size; + final Computation value_of_elem; final Register index, found; index = compiler.registers().reserve(Type.INT); found = compiler.registers().reserve(Type.BOOLEAN); value_of_elem = new ValueOf(elem); - value_of_collection_size = new ValueOf(collection_size); result.add ( @@ -1437,14 +1438,14 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor compiler.registers(), compiler.assembler(), new ValueOf(elem), - value_of_collection_size, + collection_size.get_value(), collection, found.get_address(), index.get_address() ) ); - elem_cc.release_variables(); + elem_cc.release_registers(); result.add ( @@ -1458,7 +1459,7 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor compiler.registers(), compiler.assembler(), index.get_address(), - value_of_collection_size, + collection_size.get_value(), collection ) ) @@ -1476,15 +1477,15 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor compiler.registers(), compiler.assembler(), new ValueOf(elem), - new ValueOf(collection_size), + collection_size.get_value(), collection ) ); - elem_cc.release_variables(); + elem_cc.release_registers(); } - collection_cc.release_variables(); + collection_cc.release_registers(); compiler.registers().release(collection_size); } @@ -1536,7 +1537,6 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor final ComputationCompiler elem_cc, collection_cc; final Register collection_size, found, index; final Address elem, collection; - final Computation value_of_collection_size; elem_cc = new ComputationCompiler(compiler); collection_cc = new ComputationCompiler(compiler); @@ -1563,12 +1563,13 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor elem = elem_cc.get_address(); collection = collection_cc.get_address(); - value_of_collection_size = new ValueOf(collection_size); - - result.add(new SetValue(elem, elem_cc.get_computation())); - result.add(new SetValue(collection_size, new Size(collection))); + result.add(new SetValue(elem.get_address(), elem_cc.get_computation())); + result.add + ( + new SetValue(collection_size.get_address(), new Size(collection)) + ); - elem_cc.release_variables(); + elem_cc.release_registers(); if ( @@ -1585,7 +1586,7 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor compiler.registers(), compiler.assembler(), new ValueOf(elem), - value_of_collection_size, + collection_size.get_value(), collection, found.get_address(), index.get_address() @@ -1601,7 +1602,7 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor compiler.registers(), compiler.assembler(), new ValueOf(elem), - value_of_collection_size, + collection_size.get_value(), collection, found.get_address(), index.get_address() @@ -1617,7 +1618,7 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor ( compiler.registers(), compiler.assembler(), - new ValueOf(found), + new ValueOf(found.get_address()), RemoveAt.generate ( compiler.registers(), @@ -1633,7 +1634,7 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor compiler.registers().release(found); compiler.registers().release(collection_size); - collection_cc.release_variables(); + collection_cc.release_registers(); } @Override @@ -1691,7 +1692,7 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor result.add(value_cc.get_init()); } - n.get_address().get_visited_by(address_cc); + n.get_reference().get_visited_by(address_cc); if (address_cc.has_init()) { @@ -1703,7 +1704,7 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor new SetValue(address_cc.get_address(), value_cc.get_computation()) ); - value_cc.release_variables(); - address_cc.release_variables(); + value_cc.release_registers(); + address_cc.release_registers(); } } 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 b17104a..b08a376 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/util/BinarySearch.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/util/BinarySearch.java @@ -4,6 +4,8 @@ import java.util.List; import java.util.ArrayList; import java.util.Collections; +import tonkadur.wyrd.v1.lang.Register; + import tonkadur.wyrd.v1.lang.type.Type; import tonkadur.wyrd.v1.lang.meta.Instruction; diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/util/Clear.java b/src/core/src/tonkadur/wyrd/v1/compiler/util/Clear.java index 9ec6b4f..cb0929c 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/util/Clear.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/util/Clear.java @@ -4,6 +4,8 @@ import java.util.List; import java.util.ArrayList; import java.util.Collections; +import tonkadur.wyrd.v1.lang.Register; + import tonkadur.wyrd.v1.lang.type.Type; import tonkadur.wyrd.v1.lang.type.MapType; @@ -60,8 +62,6 @@ public class Clear iterator = registers.reserve(Type.INT); - value_of_iterator = new ValueOf(iterator); - /* (set .iterator collection_size) */ result.add(new SetValue(iterator.get_address(), collection_size)); diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/util/CountOccurrences.java b/src/core/src/tonkadur/wyrd/v1/compiler/util/CountOccurrences.java index 1f8571a..5fb9fce 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/util/CountOccurrences.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/util/CountOccurrences.java @@ -3,6 +3,8 @@ package tonkadur.wyrd.v1.compiler.util; import java.util.List; import java.util.ArrayList; +import tonkadur.wyrd.v1.lang.Register; + import tonkadur.wyrd.v1.lang.type.Type; import tonkadur.wyrd.v1.lang.meta.Computation; @@ -73,7 +75,7 @@ public class CountOccurrences ( new SetValue ( - index.get_addresss(), + index.get_address(), Operation.minus(index.get_value(), Constant.ONE) ) ); diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/util/InsertAt.java b/src/core/src/tonkadur/wyrd/v1/compiler/util/InsertAt.java index fa3a112..7894330 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/util/InsertAt.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/util/InsertAt.java @@ -4,6 +4,8 @@ import java.util.List; import java.util.ArrayList; import java.util.Collections; +import tonkadur.wyrd.v1.lang.Register; + import tonkadur.wyrd.v1.lang.type.Type; import tonkadur.wyrd.v1.lang.meta.Instruction; diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/util/RemoveAllOf.java b/src/core/src/tonkadur/wyrd/v1/compiler/util/RemoveAllOf.java index 43716a1..e8daadf 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/util/RemoveAllOf.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/util/RemoveAllOf.java @@ -4,6 +4,8 @@ import java.util.List; import java.util.ArrayList; import java.util.Collections; +import tonkadur.wyrd.v1.lang.Register; + import tonkadur.wyrd.v1.lang.type.Type; import tonkadur.wyrd.v1.lang.meta.Computation; @@ -108,7 +110,11 @@ public class RemoveAllOf /* (set .end (- (collection_size) 1) */ result.add ( - new SetValue(end, Operation.minus(collection_size, Constant.ONE)) + new SetValue + ( + end.get_address(), + Operation.minus(collection_size, Constant.ONE) + ) ); /* diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/util/RemoveAt.java b/src/core/src/tonkadur/wyrd/v1/compiler/util/RemoveAt.java index c5fb725..d540d67 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/util/RemoveAt.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/util/RemoveAt.java @@ -4,6 +4,8 @@ import java.util.List; import java.util.ArrayList; import java.util.Collections; +import tonkadur.wyrd.v1.lang.Register; + import tonkadur.wyrd.v1.lang.type.Type; import tonkadur.wyrd.v1.lang.type.MapType; diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/util/ReverseList.java b/src/core/src/tonkadur/wyrd/v1/compiler/util/ReverseList.java index d83aff3..2d5e269 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/util/ReverseList.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/util/ReverseList.java @@ -4,6 +4,8 @@ import java.util.List; import java.util.ArrayList; import java.util.Collections; +import tonkadur.wyrd.v1.lang.Register; + import tonkadur.wyrd.v1.lang.type.Type; import tonkadur.wyrd.v1.lang.type.MapType; -- cgit v1.2.3-70-g09d2