[gforth] / gforth / context-struct.fs  

gforth: gforth/context-struct.fs


1 : pazsan 1.1 \ Current object structure
2 :    
3 :     \ Copyright (C) 2012 Free Software Foundation, Inc.
4 :    
5 :     \ This file is part of Gforth.
6 :    
7 :     \ Gforth is free software; you can redistribute it and/or
8 :     \ modify it under the terms of the GNU General Public License
9 :     \ as published by the Free Software Foundation, either version 3
10 :     \ of the License, or (at your option) any later version.
11 :    
12 :     \ This program is distributed in the hope that it will be useful,
13 :     \ but WITHOUT ANY WARRANTY; without even the implied warranty of
14 :     \ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 :     \ GNU General Public License for more details.
16 :    
17 :     \ You should have received a copy of the GNU General Public License
18 :     \ along with this program. If not, see http://www.gnu.org/licenses/.
19 :    
20 :     \ This file is part of the Forth meta object protocol effort
21 :    
22 :     [IFUNDEF] >o
23 :     user op \ object pointer
24 :     : o#+ ( #o -- a ) r> dup cell+ >r @ op @ + ; compile-only
25 :     : >o ( a -- r:a' ) r> op @ >r >r op ! ; compile-only
26 :     : o> ( r:a -- ) r> r> op ! >r ; compile-only
27 :     [THEN]
28 :    
29 :     Variable do-field,
30 :    
31 :     : o+ o#+ [ 0 , ] + ;
32 :    
33 :     : field-context: ( xt-comp xt-int -- ) Create , , DOES> do-field, ! ;
34 :    
35 :     ' lit+ ' + field-context: default-field
36 :     ' o#+ ' o+ field-context: current-field
37 :    
38 :     default-field
39 :    
40 : pazsan 1.2 : context+field ( n1 n2 "name" -- n3 ) \ X:structures plus-field
41 : pazsan 1.1 create-interpret/compile over , +
42 :     interpretation>
43 :     @ do-field, @ perform
44 :     <interpretation
45 :     compilation>
46 :     @ do-field, @ cell+ @ compile, ,
47 :     <compilation ;
48 :    
49 : pazsan 1.2 : context:field ['] context+field IS +field ;

CVS Admin

Powered by ViewCVS 1.0-dev
(Powered by ViewCVS)

ViewCVS and CVS Help