File:
[gforth] /
gforth /
kernel /
Attic /
special.fs
Revision
1.11:
download - view:
text,
annotated -
select for diffs
Thu May 6 21:33:37 1999 UTC (24 years, 7 months ago) by
crook
Branches:
MAIN
CVS tags:
HEAD
Major re-write of manual sections concerning text interpreter and
defining words. Much fine-tuning of other sections. The manual is
``nearly finished'' -- at least, all the major pieces of work that
I envisaged for the first mods (which were only going to take a
couple of weeks...). The manual has grown from 127 pages to 192
which is good news in terms of content but bad news in terms of the
time it takes to print out on my HP550C DeskJet.
Other changes are just tweaks to glossary entries.
1: \ words with non-default and non-immediate compilation semantics
2:
3: \ Copyright (C) 1996,1998 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 2
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, write to the Free Software
19: \ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20:
21: \ this file comes last, because these words override cross' words.
22:
23: create s"-buffer /line chars allot
24: has? compiler 0=
25: [IF] : s" [ELSE] :noname [THEN]
26: [char] " parse
27: /line min >r s"-buffer r@ cmove
28: s"-buffer r> ;
29: has? compiler [IF]
30: :noname [char] " parse postpone SLiteral ;
31: interpret/compile: S" ( compilation 'ccc"' -- ; run-time -- c-addr u ) \ core,file s-quote
32: \G Compilation: Parse a string @i{ccc} delimited by a @code{"}
33: \G (double quote). At run-time, return the length, @i{u}, and the
34: \G start address, @i{c-addr} of the string. Interpretation: parse
35: \G the string as before, and return @i{c-addr}, @i{u}. The
36: \G string is stored in a temporary buffer which may be overwritten
37: \G by subsequent uses of @code{S"}.
38: [THEN]
39:
40: has? compiler [IF]
41: : [IS] ( compilation "name" -- ; run-time xt -- ) \ possibly-gforth bracket-is
42: ' >body postpone ALiteral postpone ! ; immediate restrict
43:
44: :noname ' >body ! ;
45: ' [IS]
46: interpret/compile: IS ( xt "name" -- ) \ gforth
47:
48: :noname ' >body @ ;
49: :noname ' >body postpone ALiteral postpone @ ;
50: interpret/compile: What's ( "name" -- addr ) \ gforth
51:
52: :noname [char] " parse type ;
53: :noname postpone (.") ," align ;
54: interpret/compile: ." ( compilation 'ccc"' -- ; run-time -- ) \ core dot-quote
55: \G Compilation: Parse a string @i{ccc} delimited by a " (double
56: \G quote). At run-time, display the string. Interpretation semantics
57: \G for this word are undefined in ANS Forth. Gforth's interpretation
58: \G semantics are to display the string. This is the simplest way to
59: \G display a string from within a definition; see examples below.
60:
61: \ DOES> 17mar93py
62:
63: :noname
64: dodoes, here !does ]
65: defstart :-hook ;
66: :noname
67: ;-hook ?struc
68: [ has? xconds [IF] ] exit-like [ [THEN] ]
69: postpone (does>) dodoes,
70: defstart :-hook ;
71: interpret/compile: DOES> ( compilation colon-sys1 -- colon-sys2 ; run-time nest-sys -- ) \ core does
72:
73: ' IS Alias TO ( w "name" -- ) \ core-ext
74: immediate
75:
76: [THEN]
77:
78: has? compiler [IF]
79: : interpret/compile? ( xt -- flag )
80: >does-code ['] S" >does-code = ;
81: [ELSE]
82: : interpret/compile?
83: false ;
84: [THEN]
85:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>