Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Replacing _many_ copy-pasted code in Junction with macro substitutions. #157

Closed
p6rt opened this issue Jul 6, 2008 · 6 comments
Closed
Labels

Comments

@p6rt
Copy link

p6rt commented Jul 6, 2008

Migrated from rt.perl.org#56630 (status was 'rejected')

Searchable as RT56630$

@p6rt
Copy link
Author

p6rt commented Jul 6, 2008

From @bacek

Hello.

Current Junction.pir contains a lot of code for creating operator
overrides. Proposed patch replaces all this code with simple macro
substitutions.

--
Bacek.

@p6rt
Copy link
Author

p6rt commented Jul 6, 2008

From @bacek

junction_macro.diff
commit c7406e1ef7ce485200718ac880c880373f29d016
Author: Vasily Chekalkin <bacek@icebolt.(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
 

@p6rt
Copy link
Author

p6rt commented Jul 17, 2008

From @pmichaud

On Sat Jul 05 18​:55​:08 2008, bacek wrote​:

Hello.

Current Junction.pir contains a lot of code for creating operator
overrides. Proposed patch replaces all this code with simple macro
substitutions.

Patch rejected for now. In reality, all of these functions should
probably be removed from Junction.pir altogether, and let them be
handled by the autothreading mechanism in the dispatcher.

In particular, most of the comparison operators currently in
Junction.pir are semantically wrong--they're prematurely collapsing the
result into a non-junctional true/false value. Collapsing to a single
true/false value should happen when a Junction is used in a boolean context.

Pm

@p6rt
Copy link
Author

p6rt commented Jul 17, 2008

The RT System itself - Status changed from 'new' to 'open'

@p6rt
Copy link
Author

p6rt commented Nov 11, 2008

From @bacek

Junctions was recently refactored. This patch is not reasonable anymore.

@p6rt
Copy link
Author

p6rt commented Nov 11, 2008

@bacek - Status changed from 'open' to 'rejected'

@p6rt p6rt closed this as completed Nov 11, 2008
@p6rt p6rt added the patch label Jan 5, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant