Mercurial > hg > Others > Rakudo
annotate src/core.c/Junction.pm6 @ 0:c341f82e7ad7 default tip
Rakudo branch in cr.ie.u-ryukyu.ac.jp
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 26 Dec 2019 16:50:27 +0900 |
parents | |
children |
rev | line source |
---|---|
0
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1 my class Junction { # declared in BOOTSTRAP |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2 # class Junction is Mu |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3 # has Mu $!storage; # elements of Junction |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
4 # has str $!type; # type of Junction |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
5 # Both of these are also accessed directly inside optimizer when |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
6 # optimizing param typechecks with where clauses |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
7 |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
8 method !SET-SELF(\type,\values) { |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
9 nqp::stmts( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
10 ($!type = type), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
11 nqp::if( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
12 nqp::iseq_s($!type,"any") |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
13 || nqp::iseq_s($!type,"all") |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
14 || nqp::iseq_s($!type,"none") |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
15 || nqp::iseq_s($!type,"one"), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
16 nqp::stmts( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
17 ($!storage := nqp::if( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
18 nqp::isconcrete( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
19 $_ := nqp::getattr(values.map({nqp::decont($_)}).eager.list,List,'$!reified')), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
20 $_, |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
21 nqp::create(IterationBuffer))), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
22 self |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
23 ), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
24 Failure.new("Junction can only have 'any', 'all', 'none', 'one' type") |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
25 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
26 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
27 } |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
28 |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
29 # Swap 2 Junctions in place if they need to be for an infix operation |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
30 # on the two Junctions. Returns a truthy (0|1)value if the Junctions |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
31 # were of the same type and can be merged. |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
32 method INFIX-TWO(Junction:U: Junction:D \a, Junction:D \b) { |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
33 nqp::if( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
34 nqp::iseq_s( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
35 (my \atype := nqp::getattr(nqp::decont(a),Junction,'$!type')), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
36 (my \btype := nqp::getattr(nqp::decont(b),Junction,'$!type')) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
37 ), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
38 nqp::isne_s(atype,"one"), # same |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
39 nqp::if( # not same |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
40 (nqp::iseq_s(btype,"all") || nqp::iseq_s(btype,"none")) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
41 && (nqp::iseq_s(atype,"any") || nqp::iseq_s(atype,"one")), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
42 nqp::stmts( # need to be swapped |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
43 nqp::bindattr( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
44 (my \ajunc := nqp::clone(nqp::decont(b))), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
45 Junction, |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
46 '$!storage', |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
47 nqp::getattr(nqp::decont(a),Junction,'$!storage') |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
48 ), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
49 nqp::bindattr( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
50 (my \bjunc := nqp::clone(nqp::decont(a))), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
51 Junction, |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
52 '$!storage', |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
53 nqp::getattr(nqp::decont(b),Junction,'$!storage') |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
54 ), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
55 (a = ajunc), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
56 (b = bjunc), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
57 0 # not same, now swapped |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
58 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
59 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
60 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
61 } |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
62 |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
63 proto method new(|) {*} |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
64 multi method new(Junction: \values, Str :$type!) { |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
65 nqp::create(Junction)!SET-SELF($type,values) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
66 } |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
67 multi method new(Junction: Str:D \type, \values) { |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
68 nqp::create(Junction)!SET-SELF(type,values) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
69 } |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
70 |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
71 multi method defined(Junction:D:) { |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
72 nqp::hllbool( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
73 nqp::stmts( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
74 (my int $elems = nqp::elems($!storage)), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
75 (my int $i), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
76 nqp::if( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
77 nqp::iseq_s($!type,'any'), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
78 nqp::stmts( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
79 nqp::while( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
80 nqp::islt_i($i,$elems) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
81 && nqp::isfalse(nqp::atpos($!storage,$i).defined), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
82 ($i = nqp::add_i($i,1)) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
83 ), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
84 nqp::islt_i($i,$elems) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
85 ), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
86 nqp::if( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
87 nqp::iseq_s($!type,'all'), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
88 nqp::stmts( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
89 nqp::while( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
90 nqp::islt_i($i,$elems) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
91 && nqp::atpos($!storage,$i).defined, |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
92 ($i = nqp::add_i($i,1)) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
93 ), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
94 nqp::iseq_i($i,$elems) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
95 ), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
96 nqp::if( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
97 nqp::iseq_s($!type,'none'), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
98 nqp::stmts( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
99 nqp::while( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
100 nqp::islt_i($i,$elems) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
101 && nqp::isfalse(nqp::atpos($!storage,$i).defined), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
102 ($i = nqp::add_i($i,1)) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
103 ), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
104 nqp::iseq_i($i,$elems) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
105 ), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
106 nqp::stmts( # $!type eq 'one' |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
107 (my int $seen = 0), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
108 ($i = nqp::sub_i($i,1)), # increment in condition |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
109 nqp::while( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
110 nqp::islt_i(($i = nqp::add_i($i,1)),$elems) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
111 && nqp::isle_i($seen,1), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
112 nqp::if( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
113 nqp::atpos($!storage,$i).defined, |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
114 ($seen = nqp::add_i($seen,1)) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
115 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
116 ), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
117 nqp::iseq_i($seen,1) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
118 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
119 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
120 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
121 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
122 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
123 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
124 } |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
125 |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
126 multi method Bool(Junction:D:) { |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
127 nqp::hllbool( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
128 nqp::stmts( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
129 (my int $elems = nqp::elems($!storage)), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
130 (my int $i), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
131 nqp::if( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
132 nqp::iseq_s($!type,'any'), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
133 nqp::stmts( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
134 nqp::while( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
135 nqp::islt_i($i,$elems) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
136 && nqp::isfalse(nqp::atpos($!storage,$i)), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
137 ($i = nqp::add_i($i,1)) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
138 ), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
139 nqp::islt_i($i,$elems) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
140 ), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
141 nqp::if( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
142 nqp::iseq_s($!type,'all'), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
143 nqp::stmts( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
144 nqp::while( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
145 nqp::islt_i($i,$elems) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
146 && nqp::atpos($!storage,$i), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
147 ($i = nqp::add_i($i,1)) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
148 ), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
149 nqp::iseq_i($i,$elems) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
150 ), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
151 nqp::if( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
152 nqp::iseq_s($!type,'none'), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
153 nqp::stmts( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
154 nqp::while( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
155 nqp::islt_i($i,$elems) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
156 && nqp::isfalse(nqp::atpos($!storage,$i)), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
157 ($i = nqp::add_i($i,1)) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
158 ), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
159 nqp::iseq_i($i,$elems) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
160 ), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
161 nqp::stmts( # $!type eq 'one' |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
162 (my int $seen = 0), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
163 ($i = nqp::sub_i($i,1)), # increment in condition |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
164 nqp::while( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
165 nqp::islt_i(($i = nqp::add_i($i,1)),$elems) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
166 && nqp::isle_i($seen,1), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
167 nqp::if( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
168 nqp::atpos($!storage,$i), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
169 ($seen = nqp::add_i($seen,1)) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
170 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
171 ), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
172 nqp::iseq_i($seen,1) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
173 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
174 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
175 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
176 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
177 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
178 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
179 } |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
180 |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
181 multi method ACCEPTS(Junction:U: Mu:D \topic) { |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
182 nqp::hllbool(nqp::istype(topic, Junction)); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
183 } |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
184 multi method ACCEPTS(Junction:U: Any \topic) { |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
185 nqp::hllbool(nqp::istype(topic, Junction)); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
186 } |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
187 multi method ACCEPTS(Junction:D: Mu \topic) { |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
188 nqp::hllbool( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
189 nqp::stmts( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
190 (my int $elems = nqp::elems($!storage)), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
191 (my int $i), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
192 nqp::if( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
193 nqp::iseq_s($!type,'any'), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
194 nqp::stmts( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
195 nqp::while( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
196 nqp::islt_i($i,$elems) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
197 && nqp::isfalse(nqp::atpos($!storage,$i).ACCEPTS(topic)), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
198 ($i = nqp::add_i($i,1)) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
199 ), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
200 nqp::islt_i($i,$elems) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
201 ), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
202 nqp::if( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
203 nqp::iseq_s($!type,'all'), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
204 nqp::stmts( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
205 nqp::while( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
206 nqp::islt_i($i,$elems) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
207 && nqp::atpos($!storage,$i).ACCEPTS(topic), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
208 ($i = nqp::add_i($i,1)) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
209 ), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
210 nqp::iseq_i($i,$elems) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
211 ), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
212 nqp::if( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
213 nqp::iseq_s($!type,'none'), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
214 nqp::stmts( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
215 nqp::while( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
216 nqp::islt_i($i,$elems) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
217 && nqp::isfalse( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
218 nqp::atpos($!storage,$i).ACCEPTS(topic) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
219 ), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
220 ($i = nqp::add_i($i,1)) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
221 ), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
222 nqp::iseq_i($i,$elems) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
223 ), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
224 nqp::stmts( # $!type eq 'one' |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
225 (my int $seen), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
226 ($i = nqp::sub_i($i,1)), # increment in condition |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
227 nqp::while( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
228 nqp::islt_i(($i = nqp::add_i($i,1)),$elems) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
229 && nqp::isle_i($seen,1), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
230 nqp::if( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
231 nqp::atpos($!storage,$i).ACCEPTS(topic), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
232 ($seen = nqp::add_i($seen,1)) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
233 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
234 ), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
235 nqp::iseq_i($seen,1) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
236 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
237 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
238 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
239 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
240 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
241 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
242 } |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
243 |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
244 multi method Str(Junction:D:) { |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
245 nqp::stmts( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
246 (my \storage := nqp::bindattr( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
247 (my \junction := nqp::clone(self)), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
248 Junction, |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
249 '$!storage', |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
250 nqp::clone(nqp::getattr(self,Junction,'$!storage')) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
251 )), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
252 (my int $elems = nqp::elems(storage)), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
253 (my int $i = -1), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
254 nqp::while( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
255 nqp::islt_i(($i = nqp::add_i($i,1)),$elems), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
256 nqp::unless( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
257 nqp::istype(nqp::atpos(storage,$i),Str), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
258 nqp::bindpos(storage,$i,nqp::atpos(storage,$i).Str) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
259 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
260 ), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
261 junction |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
262 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
263 } |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
264 |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
265 multi method gist(Junction:D:) { |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
266 my int $elems = nqp::elems($!storage); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
267 my int $i = -1; |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
268 my $gists := nqp::setelems(nqp::list_s,$elems); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
269 nqp::bindpos_s($gists,$i,nqp::atpos($!storage,$i).gist) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
270 while nqp::islt_i(++$i,$elems); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
271 $!type ~ '(' ~ nqp::join(', ',$gists) ~ ')' |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
272 } |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
273 |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
274 multi method perl(Junction:D:) { |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
275 my int $elems = nqp::elems($!storage); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
276 my int $i = -1; |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
277 my $perls := nqp::setelems(nqp::list_s,$elems); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
278 nqp::bindpos_s($perls,$i,nqp::atpos($!storage,$i).perl) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
279 while nqp::islt_i(++$i,$elems); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
280 $!type ~ '(' ~ nqp::join(', ',$perls) ~ ')' |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
281 } |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
282 |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
283 method CALL-ME(|c) { |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
284 self.AUTOTHREAD( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
285 -> $obj, |c { $obj(|c) }, |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
286 self, |c); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
287 } |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
288 |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
289 method sink(Junction:D: --> Nil) { |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
290 my int $elems = nqp::elems($!storage); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
291 my int $i = -1; |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
292 nqp::atpos($!storage,$i).sink while nqp::islt_i(++$i,$elems); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
293 } |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
294 |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
295 # Helper method for handling those cases where auto-threading doesn't cut it. |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
296 # Call the given Callable with each of the Junction values, and return a |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
297 # Junction with the results of the calls. |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
298 method THREAD(&call) { |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
299 my \storage := nqp::getattr(self,Junction,'$!storage'); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
300 my int $i = -1; |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
301 my int $elems = nqp::elems(storage); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
302 my \result := nqp::setelems(nqp::list,$elems); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
303 nqp::while( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
304 nqp::islt_i(++$i,$elems), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
305 nqp::bindpos(result,$i,call(nqp::atpos(storage,$i))) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
306 ); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
307 nqp::p6bindattrinvres(nqp::clone(self),Junction,'$!storage',result) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
308 } |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
309 |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
310 method AUTOTHREAD(&call, |args) { |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
311 my \positionals := nqp::getattr(nqp::decont(args),Capture,'@!list'); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
312 |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
313 sub thread_junction(int $pos) { |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
314 my \junction := nqp::decont(nqp::atpos(positionals, $pos)); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
315 my \storage := nqp::getattr(junction,Junction,'$!storage'); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
316 my int $elems = nqp::elems(storage); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
317 my \result := nqp::setelems(nqp::list,$elems); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
318 my int $i = -1; |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
319 nqp::while( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
320 nqp::islt_i(($i = nqp::add_i($i,1)),$elems), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
321 # Next line is Officially Naughty, since captures are |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
322 # meant to be immutable. But hey, it's our capture to |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
323 # be naughty with... |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
324 nqp::stmts( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
325 nqp::bindpos(positionals,$pos,nqp::atpos(storage,$i)), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
326 nqp::bindpos(result,$i,call(|args)) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
327 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
328 ); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
329 nqp::p6bindattrinvres( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
330 nqp::clone(junction),Junction,'$!storage',result) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
331 } |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
332 |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
333 # Look for a junctional arg in the positionals. |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
334 # we have to autothread the first all or none junction before |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
335 # doing any one or any junctions. |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
336 my int $first_any_one = -1; |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
337 my int $elems = nqp::elems(positionals); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
338 my int $i = -1; |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
339 while nqp::islt_i(++$i,$elems) { |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
340 |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
341 # Junctional positional argument? |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
342 my Mu $arg := nqp::atpos(positionals, $i); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
343 if nqp::istype($arg,Junction) { |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
344 my str $type = nqp::getattr_s(nqp::decont($arg),Junction,'$!type'); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
345 nqp::iseq_s($type,'any') || nqp::iseq_s($type,'one') |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
346 ?? $first_any_one == -1 |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
347 ?? ($first_any_one = $i) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
348 !! Nil |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
349 !! return thread_junction($i); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
350 } |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
351 } |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
352 return thread_junction($first_any_one) if $first_any_one >= 0; |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
353 |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
354 # Otherwise, look for one in the nameds. |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
355 my \nameds := nqp::getattr(nqp::decont(args), Capture, '%!hash'); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
356 my \iter := nqp::iterator(nameds); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
357 while iter { |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
358 if nqp::istype(nqp::iterval(nqp::shift(iter)),Junction) { |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
359 my \junction := nqp::decont(nqp::iterval(iter)); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
360 my \storage := nqp::getattr(junction,Junction,'$!storage'); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
361 my int $elems = nqp::elems(storage); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
362 my \result := nqp::setelems(nqp::list,$elems); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
363 my int $i = -1; |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
364 |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
365 while nqp::islt_i(++$i,$elems) { |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
366 # also naughty, like above |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
367 nqp::bindkey(nameds, |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
368 nqp::iterkey_s(iter),nqp::atpos(storage,$i)); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
369 nqp::bindpos(result,$i,call(|args)); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
370 } |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
371 |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
372 my \threaded := nqp::clone(nqp::decont(junction)); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
373 nqp::bindattr(threaded,Junction,'$!storage',result); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
374 return threaded; |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
375 } |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
376 } |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
377 |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
378 # If we get here, wasn't actually anything to autothread. |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
379 call(|args); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
380 } |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
381 } |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
382 |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
383 proto sub any(|) is pure {*} |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
384 #multi sub any(@values) { @values.any } # this breaks S02-literals/radix.t |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
385 multi sub any(+values) { values.any } |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
386 |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
387 proto sub all(|) is pure {*} |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
388 multi sub all(@values) { @values.all } |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
389 multi sub all(+values) { values.all } |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
390 |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
391 proto sub one(|) is pure {*} |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
392 multi sub one(@values) { @values.one } |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
393 multi sub one(+values) { values.one } |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
394 |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
395 proto sub none(|) is pure {*} |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
396 multi sub none(@values) { @values.none } |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
397 multi sub none(+values) { values.none } |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
398 |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
399 proto sub infix:<|>(|) is pure {*} |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
400 multi sub infix:<|>(+values) { values.any } |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
401 |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
402 proto sub infix:<&>(|) is pure {*} |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
403 multi sub infix:<&>(+values) { values.all } |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
404 |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
405 proto sub infix:<^>(|) is pure {*} |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
406 multi sub infix:<^>(+values) is pure { values.one } |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
407 |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
408 multi sub infix:<~>(Str:D $a, Junction:D $b) { |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
409 nqp::if( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
410 $a, |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
411 nqp::stmts( # something to concat with |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
412 (my \storage := nqp::bindattr( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
413 (my \junction := nqp::clone($b)), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
414 Junction, |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
415 '$!storage', |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
416 nqp::clone(nqp::getattr($b,Junction,'$!storage')) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
417 )), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
418 (my int $elems = nqp::elems(storage)), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
419 (my int $i = -1), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
420 nqp::while( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
421 nqp::islt_i(($i = nqp::add_i($i,1)),$elems), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
422 nqp::bindpos(storage,$i, |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
423 nqp::if( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
424 nqp::istype((my \value := nqp::atpos(storage,$i)),Junction), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
425 infix:<~>($a,value), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
426 nqp::concat($a,nqp::if(nqp::istype(value,Str),value,value.Str)) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
427 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
428 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
429 ), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
430 junction |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
431 ), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
432 $b.Str # nothing to concat with |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
433 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
434 } |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
435 |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
436 multi sub infix:<~>(Junction:D $a, Str:D $b) { |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
437 nqp::if( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
438 $b, |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
439 nqp::stmts( # something to concat with |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
440 (my \storage := nqp::bindattr( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
441 (my \junction := nqp::clone($a)), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
442 Junction, |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
443 '$!storage', |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
444 nqp::clone(nqp::getattr($a,Junction,'$!storage')) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
445 )), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
446 (my int $elems = nqp::elems(storage)), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
447 (my int $i = -1), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
448 nqp::while( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
449 nqp::islt_i(($i = nqp::add_i($i,1)),$elems), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
450 nqp::bindpos(storage,$i, |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
451 nqp::if( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
452 nqp::istype((my \value := nqp::atpos(storage,$i)),Junction), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
453 infix:<~>(value,$b), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
454 nqp::concat(nqp::if(nqp::istype(value,Str),value,value.Str),$b) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
455 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
456 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
457 ), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
458 junction |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
459 ), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
460 $a.Str # nothing to concat with |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
461 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
462 } |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
463 |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
464 multi sub infix:<~>(Junction:D \a, Junction:D \b) { |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
465 nqp::stmts( # basic setup |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
466 (my int $mergable = Junction.INFIX-TWO(my $a = a, my $b = b)), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
467 (my \astor := nqp::getattr(nqp::decont($a),Junction,'$!storage')), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
468 (my \bstor := nqp::getattr(nqp::decont($b),Junction,'$!storage')), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
469 (my int $aelems = nqp::elems(astor)), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
470 (my int $belems = nqp::elems(bstor)), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
471 (my int $i = -1), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
472 (my \seen := nqp::hash), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
473 (my \outer := nqp::bindattr( # outer eigenstates |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
474 (my \junction := nqp::clone(nqp::decont($a))), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
475 Junction, |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
476 '$!storage', |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
477 nqp::if( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
478 $mergable, |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
479 nqp::list, |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
480 nqp::setelems(nqp::list,$aelems) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
481 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
482 )), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
483 nqp::while( # outer loop |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
484 nqp::islt_i(($i = nqp::add_i($i,1)),$aelems), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
485 nqp::stmts( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
486 (my \aval := nqp::if( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
487 nqp::istype(nqp::atpos(astor,$i),Str), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
488 nqp::atpos(astor,$i), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
489 nqp::atpos(astor,$i).Str |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
490 )), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
491 (my int $j = -1), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
492 nqp::if( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
493 $mergable, |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
494 nqp::while( # merge eigenstates |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
495 nqp::islt_i(($j = nqp::add_i($j,1)),$belems), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
496 nqp::unless( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
497 nqp::existskey( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
498 seen, |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
499 (my \concat := nqp::concat( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
500 aval, |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
501 nqp::if( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
502 nqp::istype(nqp::atpos(bstor,$j),Str), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
503 nqp::atpos(bstor,$j), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
504 nqp::atpos(bstor,$j).Str, |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
505 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
506 )) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
507 ), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
508 nqp::bindkey( # new one, remember |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
509 seen,nqp::push(outer,concat),1) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
510 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
511 ), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
512 nqp::stmts( # cannot merge eigenstates |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
513 (my \inner := nqp::bindattr( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
514 nqp::bindpos(outer,$i,nqp::clone(nqp::decont($b))), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
515 Junction, |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
516 '$!storage', |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
517 nqp::setelems(nqp::list,$belems) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
518 )), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
519 nqp::while( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
520 nqp::islt_i(($j = nqp::add_i($j,1)),$belems), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
521 nqp::bindpos( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
522 inner, |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
523 $j, |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
524 nqp::concat( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
525 aval, |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
526 nqp::if( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
527 nqp::istype(nqp::atpos(bstor,$j),Str), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
528 nqp::atpos(bstor,$j), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
529 nqp::atpos(bstor,$j).Str, |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
530 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
531 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
532 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
533 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
534 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
535 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
536 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
537 ), |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
538 junction |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
539 ) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
540 } |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
541 |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
542 nqp::p6setautothreader( -> |c { |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
543 Junction.AUTOTHREAD(|c) |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
544 } ); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
545 Mu.HOW.setup_junction_fallback(Junction, -> $name, |c { |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
546 Junction.AUTOTHREAD( |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
547 -> \obj, |c { obj."$name"(|c) }, |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
548 |c); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
549 } ); |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
550 |
c341f82e7ad7
Rakudo branch in cr.ie.u-ryukyu.ac.jp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
551 # vim: ft=perl6 expandtab sw=4 |