Thanks, Ladislav

so my reading - Object has local context
  local context could be GC'd if not referenced
  (self) below provide the reference

Thanks,
-z


--- [EMAIL PROTECTED] wrote:
> 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/
> >
> >
> 


__________________________________________________
Do You Yahoo!?
Kick off your party with Yahoo! Invites.
http://invites.yahoo.com/

Reply via email to