Hi Zhang,
the problem is the GC bug. If the bug didn't exist, (self) is
unnecessary. As long, as the GC bug exists, (self) prevents the GC
from collecting O. (for more information you can read Words,
Bindings and Contexts thread)
Regards
Ladislav
>
> hi put up the question just in case i missed something+
>
> seems could remove the (self) under bind/copy to achieve this
> function. or is it required for some reason?
>
>
> -z
>
> --- [EMAIL PROTECTED] wrote:
> > Hi,
> >
> > the latest version (see below) is better (the generated rule
can
> > be used recursively if needed):
> >
> > A-B-rule: func [
> > {Generate an A-B parse rule}
> > A [block!] {A-rule}
> > B [block!] {B-rule}
> > /local o
> > ] [
> > o: make object! [
> > A-rule: A
> > B-rule: B
> > res-rule: none
> > ]
> > bind/copy [
> > (self) ; <=== here
> > [
> > B-rule (res-rule: [to end skip]) |
> > (res-rule: A-rule)
> > ]
> > res-rule
> > ] in o 'self
> > ]
> >
> > {
> > Example:
> >
> > a: [any "a" "b"]
> > b: ["aa"]
> > a-b: a-b-rule a b
> > parse "ab" a-b
> > parse "aab" a-b
> > }
> >
> > not-rule: func [
> > "Generate a not A parse rule"
> > A [block!] {A-rule}
> > /local o
> > ] [
> > o: make object! [
> > A-rule: A
> > res-rule: none
> > ]
> > bind/copy [
> > (self)
> > [
> > A-rule (res-rule: [to end skip]) |
> > (res-rule: [])
> > ]
> > res-rule
> > ] in o 'self
> > ]
> >
> > {
> > Example:
> >
> > a: [any "a" "b"]
> > not-a: not-rule a
> > parse "ab" not-a
> > parse "b" not-a
> > parse "" not-a
> >
> > }
> >
> > > That's brilliant Ladislav. It took a little while to
understand
> > what magic
> > > you put there, and I learnt something as a result.
> > >
> > > I've made a few tests so far and cannot fault it.
> > >
> > > Thanks,
> > > Brett.
> > >
> > >
> > > ----- Original Message -----
> > > From: <[EMAIL PROTECTED]>
> > > To: <[EMAIL PROTECTED]>
> > > Sent: Monday, July 31, 2000 4:06 AM
> > > Subject: [REBOL] Parse does not have "not" match type. Re:
> > >
> > >
> > > > Hi, I think, that Parse has got a bug as in:
> > > >
> > > > >> parse "a" [none skip]
> > > > == true
> > > >
> > > > cc-ing to feedback. Here is a version of A-B-rule, that
should
> > > > work reliably. Test it please.
> > > >
> > > > A-B-rule: func [
> > > > "Generate an A-B parse rule"
> > > > A [block!] {A-rule}
> > > > B [block!] {B-rule}
> > > > /local o
> > > > ] [
> > > > o: make object! [
> > > > A-rule: A
> > > > B-rule: B
> > > > res-rule: none
> > > > ]
> > > > bind/copy [
> > > > (self)
> > > > [
> > > > B-rule (res-rule: [to end skip]) |
> > > > A-rule (res-rule: []) |
> > > > (res-rule: [to end skip])
> > > > ]
> > > > res-rule
> > > > ] in o 'self
> > > > ]
> > > >
> > > >
> > >
> > >
> > >
> >
>
>
> __________________________________________________
> Do You Yahoo!?
> Kick off your party with Yahoo! Invites.
> http://invites.yahoo.com/
>
>