# New Ticket Created by Vasily Chekalkin
# Please include the string: [perl #56630]
# in the subject line of all future correspondence about this issue.
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=56630 >
Hello.
Current Junction.pir contains a lot of code for creating operator
overrides. Proposed patch replaces all this code with simple macro
substitutions.
--
Bacek.
commit c7406e1ef7ce485200718ac880c880373f29d016
Author: Vasily Chekalkin <[EMAIL PROTECTED](none)>
Date: Sun Jul 6 11:31:27 2008 +1000
Use macros for generate overrides
diff --git a/languages/perl6/src/classes/Junction.pir b/languages/perl6/src/classes/Junction.pir
index 5efcd6f..96bb31d 100644
--- a/languages/perl6/src/classes/Junction.pir
+++ b/languages/perl6/src/classes/Junction.pir
@@ -412,1017 +412,129 @@ call_loop_end:
.end
-=item C<postfix:++(...)>
+=item C<MAKE_UNARY(OP)>
-Override postfix increment for junctions.
+Macro for creating override unary ops for junctions.
=cut
-.sub 'postfix:++' :multi('Junction')
+.macro MAKE_UNARY(OP)
+.sub .OP :multi('Junction')
.param pmc j
- $P0 = find_global 'postfix:++'
- .return unary_junction_helper($P0, j)
+ $P0 = find_global .OP
+ .return '!unary_junction_helper'($P0, j)
.end
+.endm
+.MAKE_UNARY('postfix:++')
+.MAKE_UNARY('postfix:--')
+.MAKE_UNARY('prefix:++')
+.MAKE_UNARY('prefix:--')
+.MAKE_UNARY('prefix:!')
+.MAKE_UNARY('prefix:+')
+.MAKE_UNARY('prefix:-')
+.MAKE_UNARY('prefix:~')
+.MAKE_UNARY('prefix:?')
+.MAKE_UNARY('prefix:=')
+.MAKE_UNARY('prefix:~^')
+.MAKE_UNARY('prefix:+^')
+.MAKE_UNARY('prefix:?^')
-=item C<postfix:--(...)>
-Override postfix decrement for junctions.
+=item C<MAKE_BINARY(OP)>
-=cut
-
-.sub 'postfix:--' :multi('Junction')
- .param pmc j
- $P0 = find_global 'postfix:--'
- .return unary_junction_helper($P0, j)
-.end
-
-
-=item C<prefix:++(...)>
-
-Override prefix increment for junctions.
-
-=cut
-
-.sub 'prefix:++' :multi('Junction')
- .param pmc j
- $P0 = find_global 'prefix:++'
- .return unary_junction_helper($P0, j)
-.end
-
-
-=item C<prefix:--(...)>
-
-Override prefix decrement for junctions.
-
-=cut
-
-.sub 'prefix:--' :multi('Junction')
- .param pmc j
- $P0 = find_global 'prefix:--'
- .return unary_junction_helper($P0, j)
-.end
-
-
-=item C<prefix:!(...)>
-
-Override not for junctions.
-
-=cut
-
-.sub 'prefix:!' :multi('Junction')
- .param pmc j
- $P0 = find_global 'prefix:!'
- .return unary_junction_helper($P0, j)
-.end
-
-
-=item C<prefix:+(...)>
-
-Override numification for junctions.
-
-=cut
-
-.sub 'prefix:+' :multi('Junction')
- .param pmc j
- $P0 = find_global 'prefix:+'
- .return unary_junction_helper($P0, j)
-.end
-
-
-=item C<prefix:-(...)>
-
-Override negation for junctions.
-
-=cut
-
-.sub 'prefix:-' :multi('Junction')
- .param pmc j
- $P0 = find_global 'prefix:-'
- .return unary_junction_helper($P0, j)
-.end
-
-
-=item C<prefix:~(...)>
-
-Override stringification for junctions.
-
-=cut
-
-.sub 'prefix:~' :multi('Junction')
- .param pmc j
- $P0 = find_global 'prefix:~'
- .return unary_junction_helper($P0, j)
-.end
-
-
-=item C<prefix:?(...)>
-
-Override boolification for junctions.
-
-=cut
-
-.sub 'prefix:?' :multi('Junction')
- .param pmc j
- $P0 = find_global 'prefix:?'
- .return unary_junction_helper($P0, j)
-.end
-
-
-=item C<prefix:=(...)>
-
-Override iteration for junctions.
+Macro for creating override binary ops for junctions.
=cut
-.sub 'prefix:=' :multi('Junction')
- .param pmc j
- $P0 = find_global 'prefix:='
- .return unary_junction_helper($P0, j)
-.end
-
-
-=item C<prefix:~^(...)>
-
-Override string bitwise negation for junctions.
-
-=cut
-
-.sub 'prefix:~^' :multi('Junction')
- .param pmc j
- $P0 = find_global 'prefix:~^'
- .return unary_junction_helper($P0, j)
-.end
-
-
-=item C<prefix:+^(...)>
-
-Override numeric bitwise negation for junctions.
-
-=cut
-
-.sub 'prefix:+^' :multi('Junction')
- .param pmc j
- $P0 = find_global 'prefix:+^'
- .return unary_junction_helper($P0, j)
-.end
-
-
-=item C<prefix:?^(...)>
-
-Override boolean bitwise negation for junctions.
-
-=cut
-
-.sub 'prefix:?^' :multi('Junction')
- .param pmc j
- $P0 = find_global 'prefix:?^'
- .return unary_junction_helper($P0, j)
-.end
-
-
-=item C<infix:**(...)>
-
-Override exponentiation for junctions.
-
-=cut
-
-.sub 'infix:**' :multi('Junction','Junction')
+.macro MAKE_BINARY(OP)
+.sub .OP :multi('Junction','Junction')
.param pmc j1
.param pmc j2
- $P0 = find_global 'infix:**'
- .return infix_junction_helper($P0, j1, j2)
+ $P0 = find_global .OP
+ .return '!binary_junction_helper'($P0, j1, j2)
.end
-.sub 'infix:**' :multi('Junction',_)
+.sub .OP :multi('Junction',_)
.param pmc j
.param pmc x
- $P0 = find_global 'infix:**'
- .return infix_junction_helper($P0, j, x)
+ $P0 = find_global .OP
+ .return '!binary_junction_helper'($P0, j, x)
.end
-.sub 'infix:**' :multi(_,'Junction')
+.sub .OP :multi(_,'Junction')
.param pmc x
.param pmc j
- $P0 = find_global 'infix:**'
- .return infix_junction_helper($P0, j, x, 1)
+ $P0 = find_global .OP
+ .return '!binary_junction_helper'($P0, j, x, 1)
.end
+.endm
+.MAKE_BINARY('infix:**')
+.MAKE_BINARY('infix:%')
+.MAKE_BINARY('infix:/')
+.MAKE_BINARY('infix:*')
+.MAKE_BINARY('infix:+&')
+.MAKE_BINARY('infix:+<')
+.MAKE_BINARY('infix:+>')
+.MAKE_BINARY('infix:div')
+.MAKE_BINARY('infix:mod')
+.MAKE_BINARY('infix:~&')
+.MAKE_BINARY('infix:~<')
+.MAKE_BINARY('infix:~>')
+.MAKE_BINARY('infix:?&')
+.MAKE_BINARY('infix:+')
+.MAKE_BINARY('infix:-')
+.MAKE_BINARY('infix:x')
+.MAKE_BINARY('infix:xx')
+.MAKE_BINARY('infix:~')
-=item C<infix:%(...)>
-
-Override modulo for junctions.
-
-=cut
-
-.sub 'infix:%' :multi('Junction','Junction')
- .param pmc j1
- .param pmc j2
- $P0 = find_global 'infix:%'
- .return infix_junction_helper($P0, j1, j2)
-.end
-.sub 'infix:%' :multi('Junction',_)
- .param pmc j
- .param pmc x
- $P0 = find_global 'infix:%'
- .return infix_junction_helper($P0, j, x)
-.end
+=item C<MAKE_COMPARRISION(OP)>
-.sub 'infix:%' :multi(_,'Junction')
- .param pmc x
- .param pmc j
- $P0 = find_global 'infix:%'
- .return infix_junction_helper($P0, j, x, 1)
-.end
-
-
-=item C<infix:/(...)>
-
-Override division for junctions.
+Macro for creating comparrision override for junctions.
=cut
-.sub 'infix:/' :multi('Junction','Junction')
+.macro MAKE_COMPARRISION(OP)
+.sub .OP :multi('Junction','Junction')
.param pmc j1
.param pmc j2
- $P0 = find_global 'infix:/'
- .return infix_junction_helper($P0, j1, j2)
+ $P0 = find_global .OP
+ .return '!comparrision_junction_helper'($P0, j1, j2, 0)
.end
-.sub 'infix:/' :multi('Junction',_)
+.sub .OP :multi('Junction',_)
.param pmc j
.param pmc x
- $P0 = find_global 'infix:/'
- .return infix_junction_helper($P0, j, x)
+ $P0 = find_global .OP
+ .return '!comparrision_junction_helper'($P0, j, x, 0)
.end
-.sub 'infix:/' :multi(_,'Junction')
+.sub .OP :multi(_,'Junction')
.param pmc x
.param pmc j
- $P0 = find_global 'infix:/'
- .return infix_junction_helper($P0, j, x, 1)
-.end
-
-
-=item C<infix:*(...)>
-
-Override multiply for junctions.
-
-=cut
-
-.sub 'infix:*' :multi('Junction','Junction')
- .param pmc j1
- .param pmc j2
- $P0 = find_global 'infix:*'
- .return infix_junction_helper($P0, j1, j2)
-.end
-
-.sub 'infix:*' :multi('Junction',_)
- .param pmc j
- .param pmc x
- $P0 = find_global 'infix:*'
- .return infix_junction_helper($P0, j, x)
+ $P0 = find_global .OP
+ .return '!comparrision_junction_helper'($P0, j, x, 1)
.end
+.endm
-.sub 'infix:*' :multi(_,'Junction')
- .param pmc x
- .param pmc j
- $P0 = find_global 'infix:*'
- .return infix_junction_helper($P0, j, x, 1)
-.end
-
-
-=item C<infix:+&(...)>
-
-Override numeric bitwise and for junctions.
-
-=cut
-
-.sub 'infix:+&' :multi('Junction','Junction')
- .param pmc j1
- .param pmc j2
- $P0 = find_global 'infix:+&'
- .return infix_junction_helper($P0, j1, j2)
-.end
-
-.sub 'infix:+&' :multi('Junction',_)
- .param pmc j
- .param pmc x
- $P0 = find_global 'infix:+&'
- .return infix_junction_helper($P0, j, x)
-.end
-
-.sub 'infix:+&' :multi(_,'Junction')
- .param pmc x
- .param pmc j
- $P0 = find_global 'infix:+&'
- .return infix_junction_helper($P0, j, x, 1)
-.end
-
-
-=item C<infix:+<(...)>
-
-Override numeric left shift for junctions.
-
-=cut
-
-.sub 'infix:+<' :multi('Junction','Junction')
- .param pmc j1
- .param pmc j2
- $P0 = find_global 'infix:+<'
- .return infix_junction_helper($P0, j1, j2)
-.end
-
-.sub 'infix:+<' :multi('Junction',_)
- .param pmc j
- .param pmc x
- $P0 = find_global 'infix:+<'
- .return infix_junction_helper($P0, j, x)
-.end
-
-.sub 'infix:+<' :multi(_,'Junction')
- .param pmc x
- .param pmc j
- $P0 = find_global 'infix:+<'
- .return infix_junction_helper($P0, j, x, 1)
-.end
-
-
-=item C<infix:+>(...)>
-
-Override numeric right shift for junctions.
-
-=cut
-
-.sub 'infix:+>' :multi('Junction','Junction')
- .param pmc j1
- .param pmc j2
- $P0 = find_global 'infix:+>'
- .return infix_junction_helper($P0, j1, j2)
-.end
-
-.sub 'infix:+>' :multi('Junction',_)
- .param pmc j
- .param pmc x
- $P0 = find_global 'infix:+>'
- .return infix_junction_helper($P0, j, x)
-.end
-
-.sub 'infix:+>' :multi(_,'Junction')
- .param pmc x
- .param pmc j
- $P0 = find_global 'infix:+>'
- .return infix_junction_helper($P0, j, x, 1)
-.end
-
-
-=item C<infix:div(...)>
-
-Override div for junctions.
-
-=cut
-
-.sub 'infix:div' :multi('Junction','Junction')
- .param pmc j1
- .param pmc j2
- $P0 = find_global 'infix:div'
- .return infix_junction_helper($P0, j1, j2)
-.end
-
-.sub 'infix:div' :multi('Junction',_)
- .param pmc j
- .param pmc x
- $P0 = find_global 'infix:div'
- .return infix_junction_helper($P0, j, x)
-.end
-
-.sub 'infix:div' :multi(_,'Junction')
- .param pmc x
- .param pmc j
- $P0 = find_global 'infix:div'
- .return infix_junction_helper($P0, j, x, 1)
-.end
-
-
-=item C<infix:mod(...)>
-
-Override mod for junctions.
-
-=cut
-
-.sub 'infix:mod' :multi('Junction','Junction')
- .param pmc j1
- .param pmc j2
- $P0 = find_global 'infix:mod'
- .return infix_junction_helper($P0, j1, j2)
-.end
-
-.sub 'infix:mod' :multi('Junction',_)
- .param pmc j
- .param pmc x
- $P0 = find_global 'infix:mod'
- .return infix_junction_helper($P0, j, x)
-.end
-
-.sub 'infix:mod' :multi(_,'Junction')
- .param pmc x
- .param pmc j
- $P0 = find_global 'infix:mod'
- .return infix_junction_helper($P0, j, x, 1)
-.end
-
-
-=item C<infix:~&(...)>
-
-Override buffer bitwise and for junctions.
-
-=cut
-
-.sub 'infix:~&' :multi('Junction','Junction')
- .param pmc j1
- .param pmc j2
- $P0 = find_global 'infix:~&'
- .return infix_junction_helper($P0, j1, j2)
-.end
-
-.sub 'infix:~&' :multi('Junction',_)
- .param pmc j
- .param pmc x
- $P0 = find_global 'infix:~&'
- .return infix_junction_helper($P0, j, x)
-.end
-
-.sub 'infix:~&' :multi(_,'Junction')
- .param pmc x
- .param pmc j
- $P0 = find_global 'infix:~&'
- .return infix_junction_helper($P0, j, x, 1)
-.end
-
-
-=item C<infix:~<(...)>
-
-Override buffer bitwise left shift for junctions.
-
-=cut
-
-.sub 'infix:~<' :multi('Junction','Junction')
- .param pmc j1
- .param pmc j2
- $P0 = find_global 'infix:~<'
- .return infix_junction_helper($P0, j1, j2)
-.end
-
-.sub 'infix:~<' :multi('Junction',_)
- .param pmc j
- .param pmc x
- $P0 = find_global 'infix:~<'
- .return infix_junction_helper($P0, j, x)
-.end
-
-.sub 'infix:~<' :multi(_,'Junction')
- .param pmc x
- .param pmc j
- $P0 = find_global 'infix:~<'
- .return infix_junction_helper($P0, j, x, 1)
-.end
-
-
-=item C<infix:~>(...)>
-
-Override buffer bitwise right shift for junctions.
-
-=cut
-
-.sub 'infix:~>' :multi('Junction','Junction')
- .param pmc j1
- .param pmc j2
- $P0 = find_global 'infix:~>'
- .return infix_junction_helper($P0, j1, j2)
-.end
-
-.sub 'infix:~>' :multi('Junction',_)
- .param pmc j
- .param pmc x
- $P0 = find_global 'infix:~>'
- .return infix_junction_helper($P0, j, x)
-.end
-
-.sub 'infix:~>' :multi(_,'Junction')
- .param pmc x
- .param pmc j
- $P0 = find_global 'infix:~>'
- .return infix_junction_helper($P0, j, x, 1)
-.end
-
-
-=item C<infix:?&(...)>
-
-Override boolean bitwise and for junctions.
-
-=cut
-
-.sub 'infix:?&' :multi('Junction','Junction')
- .param pmc j1
- .param pmc j2
- $P0 = find_global 'infix:?&'
- .return infix_junction_helper($P0, j1, j2)
-.end
-
-.sub 'infix:?&' :multi('Junction',_)
- .param pmc j
- .param pmc x
- $P0 = find_global 'infix:?&'
- .return infix_junction_helper($P0, j, x)
-.end
-
-.sub 'infix:?&' :multi(_,'Junction')
- .param pmc x
- .param pmc j
- $P0 = find_global 'infix:?&'
- .return infix_junction_helper($P0, j, x, 1)
-.end
-
-
-=item C<infix:+(...)>
-
-Override addition for junctions.
-
-=cut
-
-.sub 'infix:+' :multi('Junction','Junction')
- .param pmc j1
- .param pmc j2
- $P0 = find_global 'infix:+'
- .return infix_junction_helper($P0, j1, j2)
-.end
-
-.sub 'infix:+' :multi('Junction',_)
- .param pmc j
- .param pmc x
- $P0 = find_global 'infix:+'
- .return infix_junction_helper($P0, j, x)
-.end
-
-.sub 'infix:+' :multi(_,'Junction')
- .param pmc x
- .param pmc j
- $P0 = find_global 'infix:+'
- .return infix_junction_helper($P0, j, x, 1)
-.end
-
-
-=item C<infix:-(...)>
-
-Override subtraction for junctions.
-
-=cut
-
-.sub 'infix:-' :multi('Junction','Junction')
- .param pmc j1
- .param pmc j2
- $P0 = find_global 'infix:-'
- .return infix_junction_helper($P0, j1, j2)
-.end
-
-.sub 'infix:-' :multi('Junction',_)
- .param pmc j
- .param pmc x
- $P0 = find_global 'infix:-'
- .return infix_junction_helper($P0, j, x)
-.end
-
-.sub 'infix:-' :multi(_,'Junction')
- .param pmc x
- .param pmc j
- $P0 = find_global 'infix:-'
- .return infix_junction_helper($P0, j, x, 1)
-.end
-
-
-=item C<infix:x(...)>
-
-Override repeat for junctions.
-
-=cut
-
-.sub 'infix:x' :multi('Junction','Junction')
- .param pmc j1
- .param pmc j2
- $P0 = find_global 'infix:x'
- .return infix_junction_helper($P0, j1, j2)
-.end
-
-.sub 'infix:x' :multi('Junction',_)
- .param pmc j
- .param pmc x
- $P0 = find_global 'infix:x'
- .return infix_junction_helper($P0, j, x)
-.end
-
-.sub 'infix:x' :multi(_,'Junction')
- .param pmc x
- .param pmc j
- $P0 = find_global 'infix:x'
- .return infix_junction_helper($P0, j, x, 1)
-.end
-
-
-=item C<infix:xx(...)>
-
-Override array repeat for junctions.
-
-=cut
-
-.sub 'infix:xx' :multi('Junction','Junction')
- .param pmc j1
- .param pmc j2
- $P0 = find_global 'infix:xx'
- .return infix_junction_helper($P0, j1, j2)
-.end
-
-.sub 'infix:xx' :multi('Junction',_)
- .param pmc j
- .param pmc x
- $P0 = find_global 'infix:xx'
- .return infix_junction_helper($P0, j, x)
-.end
-
-.sub 'infix:xx' :multi(_,'Junction')
- .param pmc x
- .param pmc j
- $P0 = find_global 'infix:xx'
- .return infix_junction_helper($P0, j, x, 1)
-.end
-
-
-=item C<infix:~(...)>
-
-Override concatenation for junctions.
-
-=cut
-
-.sub 'infix:~' :multi('Junction','Junction')
- .param pmc j1
- .param pmc j2
- $P0 = find_global 'infix:~'
- .return infix_junction_helper($P0, j1, j2)
-.end
-
-.sub 'infix:~' :multi('Junction',_)
- .param pmc j
- .param pmc x
- $P0 = find_global 'infix:~'
- .return infix_junction_helper($P0, j, x)
-.end
-
-.sub 'infix:~' :multi(_,'Junction')
- .param pmc x
- .param pmc j
- $P0 = find_global 'infix:~'
- .return infix_junction_helper($P0, j, x, 1)
-.end
-
-
-=item C<infix:==(...)>
-
-Override numerical equality for junctions.
-
-=cut
-
-.sub 'infix:==' :multi('Junction','Junction')
- .param pmc j1
- .param pmc j2
- $P0 = find_global "infix:=="
- .return junction_comparrison_helper($P0, j1, j2, 0)
-.end
-
-.sub 'infix:==' :multi('Junction',_)
- .param pmc j
- .param pmc x
- $P0 = find_global "infix:=="
- .return junction_comparrison_helper($P0, j, x, 0)
-.end
-
-.sub 'infix:==' :multi(_,'Junction')
- .param pmc x
- .param pmc j
- $P0 = find_global "infix:=="
- .return junction_comparrison_helper($P0, j, x, 1)
-.end
-
-
-=item C<infix:!=(...)>
-
-Override numerical inequality for junctions.
-
-=cut
-
-.sub 'infix:!=' :multi('Junction','Junction')
- .param pmc j1
- .param pmc j2
- $P0 = find_global "infix:!="
- .return junction_comparrison_helper($P0, j1, j2, 0)
-.end
-
-.sub 'infix:!=' :multi('Junction',_)
- .param pmc j
- .param pmc x
- $P0 = find_global "infix:!="
- .return junction_comparrison_helper($P0, j, x, 0)
-.end
-
-.sub 'infix:!=' :multi(_,'Junction')
- .param pmc x
- .param pmc j
- $P0 = find_global "infix:!="
- .return junction_comparrison_helper($P0, j, x, 1)
-.end
-
-
-=item C<infix:>(...)>
-
-Override numerical greater than for junctions.
-
-=cut
-
-.sub 'infix:>' :multi('Junction','Junction')
- .param pmc j1
- .param pmc j2
- $P0 = find_global "infix:>"
- .return junction_comparrison_helper($P0, j1, j2, 0)
-.end
-
-.sub 'infix:>' :multi('Junction',_)
- .param pmc j
- .param pmc x
- $P0 = find_global "infix:>"
- .return junction_comparrison_helper($P0, j, x, 0)
-.end
-
-.sub 'infix:>' :multi(_,'Junction')
- .param pmc x
- .param pmc j
- $P0 = find_global "infix:>"
- .return junction_comparrison_helper($P0, j, x, 1)
-.end
-
-
-=item C<infix:<(...)>
-
-Override numerical less than for junctions.
-
-=cut
-
-.sub 'infix:<' :multi('Junction','Junction')
- .param pmc j1
- .param pmc j2
- $P0 = find_global "infix:<"
- .return junction_comparrison_helper($P0, j1, j2, 0)
-.end
-
-.sub 'infix:<' :multi('Junction',_)
- .param pmc j
- .param pmc x
- $P0 = find_global "infix:<"
- .return junction_comparrison_helper($P0, j, x, 0)
-.end
-
-.sub 'infix:<' :multi(_,'Junction')
- .param pmc x
- .param pmc j
- $P0 = find_global "infix:<"
- .return junction_comparrison_helper($P0, j, x, 1)
-.end
-
-
-=item C<infix:>=(...)>
-
-Override numerical greater than or equal to for junctions.
-
-=cut
-
-.sub 'infix:>=' :multi('Junction','Junction')
- .param pmc j1
- .param pmc j2
- $P0 = find_global "infix:>="
- .return junction_comparrison_helper($P0, j1, j2, 0)
-.end
-
-.sub 'infix:>=' :multi('Junction',_)
- .param pmc j
- .param pmc x
- $P0 = find_global "infix:>="
- .return junction_comparrison_helper($P0, j, x, 0)
-.end
-
-.sub 'infix:>=' :multi(_,'Junction')
- .param pmc x
- .param pmc j
- $P0 = find_global "infix:>="
- .return junction_comparrison_helper($P0, j, x, 1)
-.end
-
-
-=item C<infix:<=(...)>
-
-Override numerical less than or equal to for junctions.
-
-=cut
-
-.sub 'infix:<=' :multi('Junction','Junction')
- .param pmc j1
- .param pmc j2
- $P0 = find_global "infix:<="
- .return junction_comparrison_helper($P0, j1, j2, 0)
-.end
-
-.sub 'infix:<=' :multi('Junction',_)
- .param pmc j
- .param pmc x
- $P0 = find_global "infix:<="
- .return junction_comparrison_helper($P0, j, x, 0)
-.end
-
-.sub 'infix:<=' :multi(_,'Junction')
- .param pmc x
- .param pmc j
- $P0 = find_global "infix:<="
- .return junction_comparrison_helper($P0, j, x, 1)
-.end
-
-
-=item C<infix:eq(...)>
-
-Override string equality for junctions.
-
-=cut
-
-.sub 'infix:eq' :multi('Junction','Junction')
- .param pmc j1
- .param pmc j2
- $P0 = find_global "infix:eq"
- .return junction_comparrison_helper($P0, j1, j2, 0)
-.end
-
-.sub 'infix:eq' :multi('Junction',_)
- .param pmc j
- .param pmc x
- $P0 = find_global "infix:eq"
- .return junction_comparrison_helper($P0, j, x, 0)
-.end
-
-.sub 'infix:eq' :multi(_,'Junction')
- .param pmc x
- .param pmc j
- $P0 = find_global "infix:eq"
- .return junction_comparrison_helper($P0, j, x, 1)
-.end
-
-
-=item C<infix:ne(...)>
-
-Override string inequality for junctions.
-
-=cut
-
-.sub 'infix:ne' :multi('Junction','Junction')
- .param pmc j1
- .param pmc j2
- $P0 = find_global "infix:ne"
- .return junction_comparrison_helper($P0, j1, j2, 0)
-.end
-
-.sub 'infix:ne' :multi('Junction',_)
- .param pmc j
- .param pmc x
- $P0 = find_global "infix:ne"
- .return junction_comparrison_helper($P0, j, x, 0)
-.end
-
-.sub 'infix:ne' :multi(_,'Junction')
- .param pmc x
- .param pmc j
- $P0 = find_global "infix:ne"
- .return junction_comparrison_helper($P0, j, x, 1)
-.end
-
-
-=item C<infix:lt(...)>
-
-Override string less than for junctions.
-
-=cut
-
-.sub 'infix:lt' :multi('Junction','Junction')
- .param pmc j1
- .param pmc j2
- $P0 = find_global "infix:lt"
- .return junction_comparrison_helper($P0, j1, j2, 0)
-.end
-
-.sub 'infix:lt' :multi('Junction',_)
- .param pmc j
- .param pmc x
- $P0 = find_global "infix:lt"
- .return junction_comparrison_helper($P0, j, x, 0)
-.end
-
-.sub 'infix:lt' :multi(_,'Junction')
- .param pmc x
- .param pmc j
- $P0 = find_global "infix:lt"
- .return junction_comparrison_helper($P0, j, x, 1)
-.end
-
-
-=item C<infix:gt(...)>
-
-Override string greater than for junctions.
-
-=cut
-
-.sub 'infix:gt' :multi('Junction','Junction')
- .param pmc j1
- .param pmc j2
- $P0 = find_global "infix:gt"
- .return junction_comparrison_helper($P0, j1, j2, 0)
-.end
-
-.sub 'infix:gt' :multi('Junction',_)
- .param pmc j
- .param pmc x
- $P0 = find_global "infix:gt"
- .return junction_comparrison_helper($P0, j, x, 0)
-.end
-
-.sub 'infix:gt' :multi(_,'Junction')
- .param pmc x
- .param pmc j
- $P0 = find_global "infix:gt"
- .return junction_comparrison_helper($P0, j, x, 1)
-.end
-
-
-=item C<infix:le(...)>
-
-Override string less than or equal for junctions.
-
-=cut
-
-.sub 'infix:le' :multi('Junction','Junction')
- .param pmc j1
- .param pmc j2
- $P0 = find_global "infix:le"
- .return junction_comparrison_helper($P0, j1, j2, 0)
-.end
-
-.sub 'infix:le' :multi('Junction',_)
- .param pmc j
- .param pmc x
- $P0 = find_global "infix:le"
- .return junction_comparrison_helper($P0, j, x, 0)
-.end
-
-.sub 'infix:le' :multi(_,'Junction')
- .param pmc x
- .param pmc j
- $P0 = find_global "infix:le"
- .return junction_comparrison_helper($P0, j, x, 1)
-.end
-
-
-=item C<infix:ge(...)>
-
-Override string greater than or equal for junctions.
-
-=cut
-
-.sub 'infix:ge' :multi('Junction','Junction')
- .param pmc j1
- .param pmc j2
- $P0 = find_global "infix:ge"
- .return junction_comparrison_helper($P0, j1, j2, 0)
-.end
-
-.sub 'infix:ge' :multi('Junction',_)
- .param pmc j
- .param pmc x
- $P0 = find_global "infix:ge"
- .return junction_comparrison_helper($P0, j, x, 0)
-.end
-
-.sub 'infix:ge' :multi(_,'Junction')
- .param pmc x
- .param pmc j
- $P0 = find_global "infix:ge"
- .return junction_comparrison_helper($P0, j, x, 1)
-.end
+.MAKE_COMPARRISION('infix:==')
+.MAKE_COMPARRISION('infix:!=')
+.MAKE_COMPARRISION('infix:>')
+.MAKE_COMPARRISION('infix:<')
+.MAKE_COMPARRISION('infix:>=')
+.MAKE_COMPARRISION('infix:<=')
+.MAKE_COMPARRISION('infix:eq')
+.MAKE_COMPARRISION('infix:ne')
+.MAKE_COMPARRISION('infix:lt')
+.MAKE_COMPARRISION('infix:gt')
+.MAKE_COMPARRISION('infix:le')
+.MAKE_COMPARRISION('infix:ge')
# Helper sub for applying non-comparative infixes to junctions.
-.sub infix_junction_helper :anon
+.sub '!binary_junction_helper'
.param pmc op_sub
.param pmc j
.param pmc x
@@ -1480,7 +592,7 @@ nv_loop_end:
.end
# Helper sub for junction comparrisons.
-.sub junction_comparrison_helper :anon
+.sub '!comparrision_junction_helper'
.param pmc op_func
.param pmc j
.param pmc x
@@ -1540,7 +652,7 @@ ret_false:
# Helper sub for implementing unary operators.
-.sub unary_junction_helper :anon
+.sub '!unary_junction_helper'
.param pmc op_sub
.param pmc j