[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 :     : +field ( n1 n2 "name" -- n3 ) \ X:structures plus-field
41 :     create-interpret/compile over , +
42 :     interpretation>
43 :     @ do-field, @ perform
44 :     <interpretation
45 :     compilation>
46 :     @ do-field, @ cell+ @ compile, ,
47 :     <compilation ;
48 :    
49 :     : extend-structure ( n "name" -- struct-sys n ) \ Gforth
50 :     \g extend an existing structure
51 :     >r 0 value lastxt >body r> ;
52 :    
53 :     : begin-structure ( "name" -- struct-sys 0 ) \ X:structures
54 :     0 extend-structure ;
55 :    
56 :     : end-structure ( struct-sys +n -- ) \ X:structures
57 :     swap ! ;
58 :    
59 :     : cfield: ( u1 "name" -- u2 ) \ X:structures
60 :     1 +field ;
61 :    
62 :     : field: ( u1 "name" -- u2 ) \ X:structures
63 :     aligned cell +field ;
64 :    
65 :     : 2field: ( u1 "name" -- u2 ) \ gforth
66 :     aligned 2 cells +field ;
67 :    
68 :     : ffield: ( u1 "name" -- u2 ) \ X:structures
69 :     faligned 1 floats +field ;
70 :    
71 :     : sffield: ( u1 "name" -- u2 ) \ X:structures
72 :     sfaligned 1 sfloats +field ;
73 :    
74 :     : dffield: ( u1 "name" -- u2 ) \ X:structures
75 :     dfaligned 1 dfloats +field ;

CVS Admin

Powered by ViewCVS 1.0-dev
(Powered by ViewCVS)

ViewCVS and CVS Help