From: Leopold Toetsch <[EMAIL PROTECTED]>
Date: Sat, 14 Oct 2006 13:22:07 +0200
Am Samstag, 14. Oktober 2006 04:21 schrieb Bob Rogers:
>
Diffs between last version checked in and current workfile(s):
Index: compilers/pge/PGE/Regex.pir
===================================================================
--- compilers/pge/PGE/Regex.pir (revision 14851)
+++ compilers/pge/PGE/Regex.pir (working copy)
@@ -411,13 +411,17 @@
=cut
.sub "ws"
- .param pmc mob
+ .param pmc passed_mob
.local string target
- .local pmc mfrom, mpos
.local int rep, pos, lastpos
.local string nextchars
.const .Sub corou = "ws_corou"
+ .local pmc mob, mfrom, mpos
+ .lex 'mob', mob
+ .lex 'mfrom', mfrom
+ .lex 'mpos', mpos
nextchars = ""
+ mob = passed_mob
ws_1:
$P0 = get_hll_global ["PGE::Match"], "newfrom"
(mob, target, mfrom, mpos) = $P0(mob)
@@ -441,10 +445,9 @@
if $I1 >= $I0 goto nobacktrack
backtrack:
mpos = pos
- $P0 = corou
- $P0 = clone $P0
+ $P0 = newclosure corou
setattribute mob, "PGE::Match\x0&!corou", $P0
- $P0(mob, mfrom, mpos)
+ ## $P0(mob, mfrom, mpos)
.return (mob)
nobacktrack:
if nextchars == "" goto found
@@ -456,17 +459,24 @@
end:
.return (mob)
.end
-.sub "ws_corou" :anon
- .param pmc mob
- .param pmc mfrom
- .param pmc mpos
- loop:
- .yield (mob)
+.sub "ws_corou" :outer("ws")
+ .local pmc mob, mfrom, mpos
+ .lex 'mob', mob
+ .lex 'mfrom', mfrom
+ .lex 'mpos', mpos
+
+ printerr "woop\n"
+ .local pmc old_mpos
+ null old_mpos
+ if null mpos goto flush
+ old_mpos = clone mpos
dec mpos
- if mpos > mfrom goto loop
+ if mpos <= mfrom goto done
+flush:
null $P0
setattribute mob, "PGE::Match\x0&!corou", $P0
- goto loop
+done:
+ .return (old_mpos)
.end
Index: t/compilers/pge/06-grammar.t
===================================================================
--- t/compilers/pge/06-grammar.t (revision 14851)
+++ t/compilers/pge/06-grammar.t (working copy)
@@ -161,6 +161,11 @@
$S2 = $P0[$I1]
inc $I1
inc n_tests
+ ## printerr "[matching '"
+ ## printerr $S0
+ ## printerr "' versus '"
+ ## printerr $S2
+ ## printerr "']\n"
ok = _match_expr($S0,$S2)
$I3 = todo_tests[n_tests]
if $I3 == 1 goto todo_test
End of diffs.