| summaryrefslogtreecommitdiff |
diff options
| author | nsensfel <SpamShield0@noot-noot.org> | 2020-09-09 11:11:21 +0200 |
|---|---|---|
| committer | nsensfel <SpamShield0@noot-noot.org> | 2020-09-09 11:11:21 +0200 |
| commit | 066fcb03884cfdb79b3ff3825064debeb9e73126 (patch) | |
| tree | 7025176d1474e90c28a4649aa61b5a2bf57bd468 | |
| parent | dd6d05fa12e64b133326695f6fa77d8e989d2610 (diff) | |
...
8 files changed, 114 insertions, 314 deletions
diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/MapComputation.java b/src/core/src/tonkadur/fate/v1/lang/computation/MapComputation.java index 9ca1042..d042dd0 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/MapComputation.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/MapComputation.java @@ -10,8 +10,8 @@ import tonkadur.fate.v1.lang.type.CollectionType; import tonkadur.fate.v1.lang.instruction.Map; -import tonkadur.fate.v1.lang.meta.Computation; import tonkadur.fate.v1.lang.meta.ComputationVisitor; +import tonkadur.fate.v1.lang.meta.Computation; import tonkadur.fate.v1.lang.meta.Reference; public class MapComputation extends Computation diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/RemoveAllOfElementComputation.java b/src/core/src/tonkadur/fate/v1/lang/computation/RemoveAllOfElementComputation.java index dc6bdf5..fb6b9da 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/RemoveAllOfElementComputation.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/RemoveAllOfElementComputation.java @@ -10,7 +10,6 @@ import tonkadur.fate.v1.lang.instruction.RemoveAllOfElement; import tonkadur.fate.v1.lang.meta.ComputationVisitor; import tonkadur.fate.v1.lang.meta.Computation; -import tonkadur.fate.v1.lang.meta.Computation; import tonkadur.fate.v1.lang.meta.Reference; public class RemoveAllOfElementComputation extends Computation diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/RemoveElementAtComputation.java b/src/core/src/tonkadur/fate/v1/lang/computation/RemoveElementAtComputation.java index 3bf0104..42e61b7 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/RemoveElementAtComputation.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/RemoveElementAtComputation.java @@ -1,50 +1,43 @@ -package tonkadur.fate.v1.lang.instruction; - -import tonkadur.error.ErrorManager; +package tonkadur.fate.v1.lang.computation; import tonkadur.parser.Origin; +import tonkadur.fate.v1.error.ConflictingTypeException; import tonkadur.fate.v1.error.IncomparableTypeException; 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.instruction.RemoveElementAt; -import tonkadur.fate.v1.lang.meta.InstructionVisitor; -import tonkadur.fate.v1.lang.meta.Instruction; +import tonkadur.fate.v1.lang.meta.ComputationVisitor; import tonkadur.fate.v1.lang.meta.Computation; import tonkadur.fate.v1.lang.meta.Reference; -public class RemoveElementAt extends Instruction +public class RemoveElementAt extends Computation { /***************************************************************************/ /**** MEMBERS **************************************************************/ /***************************************************************************/ - protected final Computation index; - protected final Reference collection; + protected final RemoveElementAt instruction; /***************************************************************************/ /**** PROTECTED ************************************************************/ /***************************************************************************/ /**** Constructors *********************************************************/ - protected RemoveElementAt + protected RemoveElementAtComputation ( - final Origin origin, - final Computation index, - final Reference collection + final RemoveElementAt instruction ) { - super(origin); + super(instruction.get_origin(), instruction.get_collection().get_type()); - this.collection = collection; - this.index = index; + this.instruction = instruction; } /***************************************************************************/ /**** PUBLIC ***************************************************************/ /***************************************************************************/ /**** Constructors *********************************************************/ - public static RemoveElementAt build + public static RemoveElementAtComputation build ( final Origin origin, final Computation index, @@ -54,63 +47,24 @@ public class RemoveElementAt extends Instruction InvalidTypeException, IncomparableTypeException { - final Type collection_type, hint; - - collection_type = collection.get_type(); - - if (!(collection_type instanceof CollectionType)) - { - ErrorManager.handle + return + new RemoveElementAtComputation ( - new InvalidTypeException - ( - collection.get_origin(), - collection.get_type(), - Type.COLLECTION_TYPES - ) + RemoveElementAt.build(origin, index, collection) ); - } - - if (index.get_type().can_be_used_as(Type.INT)) - { - return new RemoveElementAt(origin, index, collection); - } - - hint = - (Type) index.get_type().generate_comparable_to(Type.INT); - - if (hint.equals(Type.ANY)) - { - ErrorManager.handle - ( - new IncomparableTypeException - ( - index.get_origin(), - index.get_type(), - Type.INT - ) - ); - } - - return new RemoveElementAt(origin, index, collection); } /**** Accessors ************************************************************/ @Override - public void get_visited_by (final InstructionVisitor iv) + public void get_visited_by (final ComputationVisitor cv) throws Throwable { - iv.visit_remove_element_at(this); - } - - public Computation get_index () - { - return index; + cv.visit_remove_element_at(this); } - public Reference get_collection () + public RemoveElementAt get_instruction () { - return collection; + return instruction; } /**** Misc. ****************************************************************/ @@ -119,20 +73,8 @@ public class RemoveElementAt extends Instruction { final StringBuilder sb = new StringBuilder(); - sb.append(origin.toString()); - sb.append("(RemoveElementAt"); - sb.append(System.lineSeparator()); - sb.append(System.lineSeparator()); - - sb.append("index:"); - sb.append(System.lineSeparator()); - sb.append(index.toString()); - sb.append(System.lineSeparator()); - sb.append(System.lineSeparator()); - - sb.append("collection:"); - sb.append(System.lineSeparator()); - sb.append(collection.toString()); + sb.append("(ComputationOf "); + sb.append(instruction.toString()); sb.append(")"); diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/RemoveElementComputation.java b/src/core/src/tonkadur/fate/v1/lang/computation/RemoveElementComputation.java index d721614..e3acd4b 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/RemoveElementComputation.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/RemoveElementComputation.java @@ -1,6 +1,4 @@ -package tonkadur.fate.v1.lang.instruction; - -import tonkadur.error.ErrorManager; +package tonkadur.fate.v1.lang.computation; import tonkadur.parser.Origin; @@ -8,134 +6,65 @@ import tonkadur.fate.v1.error.ConflictingTypeException; import tonkadur.fate.v1.error.IncomparableTypeException; 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.instruction.RemoveElement; -import tonkadur.fate.v1.lang.meta.InstructionVisitor; -import tonkadur.fate.v1.lang.meta.Instruction; +import tonkadur.fate.v1.lang.meta.ComputationVisitor; import tonkadur.fate.v1.lang.meta.Computation; +import tonkadur.fate.v1.lang.meta.Reference; -public class RemoveElement extends Instruction +public class RemoveElementComputation extends Computation { /***************************************************************************/ /**** MEMBERS **************************************************************/ /***************************************************************************/ - protected final Computation element; - protected final Computation collection; + protected final RemoveElement instruction; /***************************************************************************/ /**** PROTECTED ************************************************************/ /***************************************************************************/ /**** Constructors *********************************************************/ - protected RemoveElement + protected RemoveElementComputation ( - final Origin origin, - final Computation element, - final Computation collection + final RemoveElement instruction ) { - super(origin); + super(instruction.get_origin(), instruction.get_collection().get_type()); - this.collection = collection; - this.element = element; + this.instruction = instruction; } - /***************************************************************************/ /**** PUBLIC ***************************************************************/ /***************************************************************************/ /**** Constructors *********************************************************/ - public static RemoveElement build + public static RemoveElementComputation build ( final Origin origin, final Computation element, - final Computation collection + final Reference collection ) throws InvalidTypeException, ConflictingTypeException, IncomparableTypeException { - final Type hint; - final Type collection_type; - final CollectionType collection_true_type; - final Type collection_element_type; - - collection_type = collection.get_type(); - - if (!(collection_type instanceof CollectionType)) - { - ErrorManager.handle - ( - new InvalidTypeException - ( - collection.get_origin(), - collection.get_type(), - Type.COLLECTION_TYPES - ) - ); - } - - collection_true_type = (CollectionType) collection_type; - collection_element_type = collection_true_type.get_content_type(); - - if - ( - element.get_type().can_be_used_as(collection_element_type) - || - (element.get_type().try_merging_with(collection_element_type) != null) - ) - { - return new RemoveElement(origin, element, collection); - } - - ErrorManager.handle - ( - new ConflictingTypeException + return + new RemoveElementComputation ( - element.get_origin(), - element.get_type(), - collection_element_type - ) - ); - - hint = - (Type) element.get_type().generate_comparable_to - ( - collection_element_type - ); - - if (hint.equals(Type.ANY)) - { - ErrorManager.handle - ( - new IncomparableTypeException - ( - element.get_origin(), - element.get_type(), - collection_element_type - ) + RemoveElement.build(origin, element, collection) ); - } - - return new RemoveElement(origin, element, collection); } /**** Accessors ************************************************************/ @Override - public void get_visited_by (final InstructionVisitor iv) + public void get_visited_by (final ComputationVisitor cv) throws Throwable { - iv.visit_remove_element(this); + cv.visit_remove_element(this); } - public Computation get_element () + public RemoveElement get_instruction () { - return element; - } - - public Computation get_collection () - { - return collection; + return instruction; } /**** Misc. ****************************************************************/ @@ -144,20 +73,8 @@ public class RemoveElement extends Instruction { final StringBuilder sb = new StringBuilder(); - sb.append(origin.toString()); - sb.append("(RemoveElement"); - sb.append(System.lineSeparator()); - sb.append(System.lineSeparator()); - - sb.append("element:"); - sb.append(System.lineSeparator()); - sb.append(element.toString()); - sb.append(System.lineSeparator()); - sb.append(System.lineSeparator()); - - sb.append("collection:"); - sb.append(System.lineSeparator()); - sb.append(collection.toString()); + sb.append("(ComputationOf "); + sb.append(instruction.toString()); sb.append(")"); diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/ReverseListComputation.java b/src/core/src/tonkadur/fate/v1/lang/computation/ReverseListComputation.java index 59a68e6..e5b6958 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/ReverseListComputation.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/ReverseListComputation.java @@ -1,88 +1,60 @@ -package tonkadur.fate.v1.lang.instruction; - -import java.util.Collections; - -import tonkadur.error.ErrorManager; +package tonkadur.fate.v1.lang.computation; import tonkadur.parser.Origin; 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.instruction.ReverseList; -import tonkadur.fate.v1.lang.meta.InstructionVisitor; -import tonkadur.fate.v1.lang.meta.Instruction; +import tonkadur.fate.v1.lang.meta.ComputationVisitor; import tonkadur.fate.v1.lang.meta.Computation; -public class ReverseList extends Instruction +public class ReverseListComputation extends Computation { /***************************************************************************/ /**** MEMBERS **************************************************************/ /***************************************************************************/ - protected final Computation collection; + protected final ReverseList instruction; /***************************************************************************/ /**** PROTECTED ************************************************************/ /***************************************************************************/ /**** Constructors *********************************************************/ - protected ReverseList + protected ReverseListComputation ( - final Origin origin, - final Computation collection + final ReverseList instruction ) { - super(origin); + super(instruction.get_origin(), instruction.get_collection().get_type()); - this.collection = collection; + this.instruction = instruction; } /***************************************************************************/ /**** PUBLIC ***************************************************************/ /***************************************************************************/ /**** Constructors *********************************************************/ - public static ReverseList build + public static ReverseListComputation build ( final Origin origin, final Computation collection ) throws InvalidTypeException { - final Type t; - - t = collection.get_type(); - - if - ( - !(t instanceof CollectionType) - || ((CollectionType) t).is_set() - ) - { - ErrorManager.handle - ( - new InvalidTypeException - ( - collection.get_origin(), - collection.get_type(), - Collections.singleton(Type.LIST) - ) - ); - } - - return new ReverseList(origin, collection); + return new ReverseListComputation(Shuffe.build(origin, collection)); } /**** Accessors ************************************************************/ @Override - public void get_visited_by (final InstructionVisitor iv) + public void get_visited_by (final ComputationVisitor cv) throws Throwable { - iv.visit_reverse_list(this); + cv.visit_reverse_list(this); } - public Computation get_collection () + public ReverseList get_instruction () { - return collection; + return instruction; } /**** Misc. ****************************************************************/ @@ -91,8 +63,8 @@ public class ReverseList extends Instruction { final StringBuilder sb = new StringBuilder(); - sb.append("(ReverseList "); - sb.append(collection.toString()); + sb.append("(ComputationOf "); + sb.append(instruction.toString()); sb.append(")"); diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/ShuffleComputation.java b/src/core/src/tonkadur/fate/v1/lang/computation/ShuffleComputation.java index ebac30e..d40bdc0 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/ShuffleComputation.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/ShuffleComputation.java @@ -1,40 +1,33 @@ -package tonkadur.fate.v1.lang.instruction; - -import java.util.Collections; - -import tonkadur.error.ErrorManager; +package tonkadur.fate.v1.lang.computation; import tonkadur.parser.Origin; 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.instruction.Shuffle; -import tonkadur.fate.v1.lang.meta.InstructionVisitor; -import tonkadur.fate.v1.lang.meta.Instruction; +import tonkadur.fate.v1.lang.meta.ComputationVisitor; import tonkadur.fate.v1.lang.meta.Computation; -public class Shuffle extends Instruction +public class ShuffleComputation extends Computation { /***************************************************************************/ /**** MEMBERS **************************************************************/ /***************************************************************************/ - protected final Computation collection; + protected final Shuffle instruction; /***************************************************************************/ /**** PROTECTED ************************************************************/ /***************************************************************************/ /**** Constructors *********************************************************/ - protected Shuffle + protected ShuffleComputation ( - final Origin origin, - final Computation collection + final Shuffle instruction ) { - super(origin); + super(instruction.get_origin(), instruction.get_collection().get_type()); - this.collection = collection; + this.instruction = instruction; } /***************************************************************************/ @@ -48,41 +41,20 @@ public class Shuffle extends Instruction ) throws InvalidTypeException { - final Type t; - - t = collection.get_type(); - - if - ( - !(t instanceof CollectionType) - || ((CollectionType) t).is_set() - ) - { - ErrorManager.handle - ( - new InvalidTypeException - ( - collection.get_origin(), - collection.get_type(), - Collections.singleton(Type.LIST) - ) - ); - } - - return new Shuffle(origin, collection); + return new ShuffleComputation(Shuffe.build(origin, collection)); } /**** Accessors ************************************************************/ @Override - public void get_visited_by (final InstructionVisitor iv) + public void get_visited_by (final ComputationVisitor cv) throws Throwable { - iv.visit_shuffle(this); + cv.visit_shuffle(this); } - public Computation get_collection () + public Shuffle get_instruction () { - return collection; + return instruction; } /**** Misc. ****************************************************************/ @@ -91,8 +63,8 @@ public class Shuffle extends Instruction { final StringBuilder sb = new StringBuilder(); - sb.append("(Shuffle "); - sb.append(collection.toString()); + sb.append("(ComputationOf "); + sb.append(instruction.toString()); sb.append(")"); diff --git a/src/core/src/tonkadur/fate/v1/lang/meta/InstructionVisitor.java b/src/core/src/tonkadur/fate/v1/lang/meta/InstructionVisitor.java index 01ff4a4..9a18682 100644 --- a/src/core/src/tonkadur/fate/v1/lang/meta/InstructionVisitor.java +++ b/src/core/src/tonkadur/fate/v1/lang/meta/InstructionVisitor.java @@ -50,9 +50,6 @@ public interface InstructionVisitor public void visit_map (final Map c) throws Throwable; - public void visit_range (final Range c) - throws Throwable; - public void visit_shuffle (final Shuffle c) throws Throwable; diff --git a/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 b/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 index a94736d..1e0c245 100644 --- a/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 +++ b/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 @@ -585,8 +585,8 @@ returns [Instruction result] ( CONTEXT.get_origin_at ( - ($ADD_KW.getLine()), - ($ADD_KW.getCharPositionInLine()) + ($IMP_ADD_KW.getLine()), + ($IMP_ADD_KW.getCharPositionInLine()) ), ($value.result), ($value_reference.result) @@ -600,8 +600,8 @@ returns [Instruction result] ( CONTEXT.get_origin_at ( - ($ADD_AT_KW.getLine()), - ($ADD_AT_KW.getCharPositionInLine()) + ($IMP_ADD_AT_KW.getLine()), + ($IMP_ADD_AT_KW.getCharPositionInLine()) ), ($index.result), ($element.result), @@ -619,8 +619,8 @@ returns [Instruction result] ( CONTEXT.get_origin_at ( - ($ADD_ALL_KW.getLine()), - ($ADD_ALL_KW.getCharPositionInLine()) + ($IMP_ADD_ALL_KW.getLine()), + ($IMP_ADD_ALL_KW.getCharPositionInLine()) ), ($source.result), ($target.result) @@ -669,8 +669,8 @@ returns [Instruction result] ( CONTEXT.get_origin_at ( - ($REMOVE_ONE_KW.getLine()), - ($REMOVE_ONE_KW.getCharPositionInLine()) + ($IMP_REMOVE_ONE_KW.getLine()), + ($IMP_REMOVE_ONE_KW.getCharPositionInLine()) ), ($value.result), ($value_reference.result) @@ -687,8 +687,8 @@ returns [Instruction result] ( CONTEXT.get_origin_at ( - ($REMOVE_AT_KW.getLine()), - ($REMOVE_AT_KW.getCharPositionInLine()) + ($IMP_REMOVE_AT_KW.getLine()), + ($IMP_REMOVE_AT_KW.getCharPositionInLine()) ), ($value.result), ($value_reference.result) @@ -705,8 +705,8 @@ returns [Instruction result] ( CONTEXT.get_origin_at ( - ($REMOVE_ALL_KW.getLine()), - ($REMOVE_ALL_KW.getCharPositionInLine()) + ($IMP_REMOVE_ALL_KW.getLine()), + ($IMP_REMOVE_ALL_KW.getCharPositionInLine()) ), ($value.result), ($value_reference.result) @@ -734,8 +734,8 @@ returns [Instruction result] ( CONTEXT.get_origin_at ( - ($REVERSE_KW.getLine()), - ($REVERSE_KW.getCharPositionInLine()) + ($IMP_REVERSE_KW.getLine()), + ($IMP_REVERSE_KW.getCharPositionInLine()) ), ($value_reference.result) ); @@ -752,8 +752,8 @@ returns [Instruction result] ( CONTEXT.get_origin_at ( - ($MAP_KW.getLine()), - ($MAP_KW.getCharPositionInLine()) + ($IMP_MAP_KW.getLine()), + ($IMP_MAP_KW.getCharPositionInLine()) ), ($value.result), ($inr.result), @@ -772,8 +772,8 @@ returns [Instruction result] ( CONTEXT.get_origin_at ( - ($INDEXED_MAP_KW.getLine()), - ($INDEXED_MAP_KW.getCharPositionInLine()) + ($IMP_INDEXED_MAP_KW.getLine()), + ($IMP_INDEXED_MAP_KW.getCharPositionInLine()) ), ($value.result), ($inr.result), @@ -795,8 +795,8 @@ returns [Instruction result] ( CONTEXT.get_origin_at ( - ($MERGE_KW.getLine()), - ($MERGE_KW.getCharPositionInLine()) + ($IMP_MERGE_KW.getLine()), + ($IMP_MERGE_KW.getCharPositionInLine()) ), ($fun.result), ($init.result), @@ -821,8 +821,8 @@ returns [Instruction result] ( CONTEXT.get_origin_at ( - ($MERGE_KW.getLine()), - ($MERGE_KW.getCharPositionInLine()) + ($IMP_MERGE_KW.getLine()), + ($IMP_MERGE_KW.getCharPositionInLine()) ), ($fun.result), ($init.result), @@ -846,8 +846,8 @@ returns [Instruction result] ( CONTEXT.get_origin_at ( - ($SUB_LIST_KW.getLine()), - ($SUB_LIST_KW.getCharPositionInLine()) + ($IMP_SUB_LIST_KW.getLine()), + ($IMP_SUB_LIST_KW.getCharPositionInLine()) ), ($vstart.result), ($vend.result), @@ -863,8 +863,8 @@ returns [Instruction result] ( CONTEXT.get_origin_at ( - ($FILTER_KW.getLine()), - ($FILTER_KW.getCharPositionInLine()) + ($IMP_FILTER_KW.getLine()), + ($IMP_FILTER_KW.getCharPositionInLine()) ), ($value.result), ($value_reference.result) @@ -882,8 +882,8 @@ returns [Instruction result] ( CONTEXT.get_origin_at ( - ($PARTITION_KW.getLine()), - ($PARTITION_KW.getCharPositionInLine()) + ($IMP_PARTITION_KW.getLine()), + ($IMP_PARTITION_KW.getCharPositionInLine()) ), ($value.result), ($iftrue.result), @@ -898,8 +898,8 @@ returns [Instruction result] ( CONTEXT.get_origin_at ( - ($SORT_KW.getLine()), - ($SORT_KW.getCharPositionInLine()) + ($IMP_SORT_KW.getLine()), + ($IMP_SORT_KW.getCharPositionInLine()) ), ($value.result), ($value_reference.result) @@ -914,8 +914,8 @@ returns [Instruction result] ( CONTEXT.get_origin_at ( - ($SHUFFLE_KW.getLine()), - ($SHUFFLE_KW.getCharPositionInLine()) + ($IMP_SHUFFLE_KW.getLine()), + ($IMP_SHUFFLE_KW.getCharPositionInLine()) ), ($value_reference.result) ); @@ -952,14 +952,15 @@ returns [Instruction result] | IMP_SET_FIELDS_KW value_reference WS* field_value_list WS* R_PAREN { + /* FIXME: this should be a true Fate construct. */ final Origin origin; final List<Instruction> operations; origin = CONTEXT.get_origin_at ( - ($SET_FIELDS_KW.getLine()), - ($SET_FIELDS_KW.getCharPositionInLine()) + ($IMP_SET_FIELDS_KW.getLine()), + ($IMP_SET_FIELDS_KW.getCharPositionInLine()) ); operations = new ArrayList<Instruction>(); @@ -3269,8 +3270,8 @@ returns [Computation result] } | ADD_ALL_KW - source=value_reference WS+ - target=value_reference WS* + sourcer=value_reference WS+ + targetr=value_reference WS* R_PAREN { $result = @@ -3281,8 +3282,8 @@ returns [Computation result] ($ADD_ALL_KW.getLine()), ($ADD_ALL_KW.getCharPositionInLine()) ), - ($source.result), - ($target.result) + ($sourcer.result), + ($targetr.result) ); } |


