# 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