| \ This contains the same Forth source as mini-oof.fs, but |
\ This contains the same Forth source as mini-oof.fs, but |
| \ also contains glossary information for the manual. |
\ also contains glossary information for the manual. |
| |
|
| : method ( m v -- m' v ) \ mini-oof |
: method ( m v "name" -- m' v ) \ mini-oof |
| \G Define a method. |
\G Define a selector. |
| Create over , swap cell+ swap |
Create over , swap cell+ swap |
| DOES> ( ... o -- ... ) @ over @ + @ execute ; |
DOES> ( ... o -- ... ) @ over @ + @ execute ; |
| |
|
| : var ( m v size -- m v' ) \ mini-oof |
: var ( m v size "name" -- m v' ) \ mini-oof |
| \G Define a variable with @var{size} bytes. |
\G Define a variable with @var{size} bytes. |
| Create over , + |
Create over , + |
| DOES> ( o -- addr ) @ + ; |
DOES> ( o -- addr ) @ + ; |
| |
|
| : class ( class -- class methods vars ) \ mini-oof |
: class ( class -- class selectors vars ) \ mini-oof |
| \G Start the definition of a class. |
\G Start the definition of a class. |
| dup 2@ ; |
dup 2@ ; |
| |
|
| : end-class ( class methods vars -- ) \ mini-oof |
: end-class ( class selectors vars "name" -- ) \ mini-oof |
| \G End the definition of a class. |
\G End the definition of a class. |
| Create here >r , dup , 2 cells ?DO ['] noop , 1 cells +LOOP |
Create here >r , dup , 2 cells ?DO ['] noop , 1 cells +LOOP |
| cell+ dup cell+ r> rot @ 2 cells /string move ; |
cell+ dup cell+ r> rot @ 2 cells /string move ; |
| |
|
| : defines ( xt class "name" -- ) \ mini-oof |
: defines ( xt class "name" -- ) \ mini-oof |
| \G Bind @var{xt} to the method @var{name} in class @var{class}. |
\G Bind @var{xt} to the selector @var{name} in class @var{class}. |
| ' >body @ + ! ; |
' >body @ + ! ; |
| |
|
| : new ( class -- o ) \ mini-oof |
: new ( class -- o ) \ mini-oof |
| here over @ allot swap over ! ; |
here over @ allot swap over ! ; |
| |
|
| : :: ( class "name" -- ) \ mini-oof colon-colon |
: :: ( class "name" -- ) \ mini-oof colon-colon |
| \G Compile the method @var{name} of the class @var{class} (not immediate!). |
\G Compile the method for the selector @var{name} of the class |
| |
\G @var{class} (not immediate!). |
| ' >body @ + @ compile, ; |
' >body @ + @ compile, ; |
| |
|
| Create object ( -- a-addr ) \ mini-oof |
Create object ( -- a-addr ) \ mini-oof |