[gforth] / gforth / kernel / Attic / special.fs  

gforth: gforth/kernel/Attic/special.fs

Diff for /gforth/kernel/Attic/special.fs between version 1.3 and 1.12

version 1.3, Sun Aug 31 19:32:31 1997 UTC version 1.12, Mon May 17 15:07:05 1999 UTC
Line 1 
Line 1 
 \ words with non-default and non-immediate compilation semantics  \ words with non-default and non-immediate compilation semantics
   
 \ Copyright (C) 1996 Free Software Foundation, Inc.  \ Copyright (C) 1996,1998 Free Software Foundation, Inc.
   
 \ This file is part of Gforth.  \ This file is part of Gforth.
   
Line 20 
Line 20 
   
 \ this file comes last, because these words override cross' words.  \ this file comes last, because these words override cross' words.
   
   require ./vars.fs
   
 create s"-buffer /line chars allot  create s"-buffer /line chars allot
 :noname    [char] " parse  has? compiler 0=
   [IF] : s" [ELSE] :noname [THEN]
           [char] " parse
     /line min >r s"-buffer r@ cmove      /line min >r s"-buffer r@ cmove
     s"-buffer r> ;      s"-buffer r> ;
   has? compiler [IF]
 :noname    [char] " parse postpone SLiteral ;  :noname    [char] " parse postpone SLiteral ;
 interpret/compile: S" ( compilation 'ccc"' -- ; run-time -- c-addr u )  \ core,file     s-quote  interpret/compile: S" ( compilation 'ccc"' -- ; run-time -- c-addr u )  \ core,file     s-quote
     \G Compilation: Parse a string @i{ccc} delimited by a @code{"}
     \G (double quote). At run-time, return the length, @i{u}, and the
     \G start address, @i{c-addr} of the string. Interpretation: parse
     \G the string as before, and return @i{c-addr}, @i{u}. The
     \G string is stored in a temporary buffer which may be overwritten
     \G by subsequent uses of @code{S"}.
   [THEN]
   
   has? compiler [IF]
 : [IS] ( compilation "name" -- ; run-time xt -- ) \ possibly-gforth bracket-is  : [IS] ( compilation "name" -- ; run-time xt -- ) \ possibly-gforth bracket-is
     ' >body postpone ALiteral postpone ! ; immediate restrict      ' >body postpone ALiteral postpone ! ; immediate restrict
   
 :noname    ' >body ! ;  :noname    ' >body ! ;
 ' [IS]  ' [IS]
 interpret/compile: IS ( addr "name" -- ) \ gforth  interpret/compile: IS ( xt "name" -- ) \ gforth
   
 :noname    ' >body @ ;  :noname    ' >body @ ;
 :noname    ' >body postpone ALiteral postpone @ ;  :noname    ' >body postpone ALiteral postpone @ ;
Line 41 
Line 54 
 :noname    [char] " parse type ;  :noname    [char] " parse type ;
 :noname    postpone (.") ,"  align ;  :noname    postpone (.") ,"  align ;
 interpret/compile: ." ( compilation 'ccc"' -- ; run-time -- )  \ core   dot-quote  interpret/compile: ." ( compilation 'ccc"' -- ; run-time -- )  \ core   dot-quote
     \G Compilation: Parse a string @i{ccc} delimited by a " (double
     \G quote). At run-time, display the string. Interpretation semantics
     \G for this word are undefined in ANS Forth. Gforth's interpretation
     \G semantics are to display the string. This is the simplest way to
     \G display a string from within a definition; see examples below.
   
 \ DOES>                                                17mar93py  \ DOES>                                                17mar93py
   
Line 48 
Line 66 
     dodoes, here !does ]      dodoes, here !does ]
     defstart :-hook ;      defstart :-hook ;
 :noname  :noname
     ;-hook postpone (does>) ?struc dodoes,      ;-hook ?struc
       [ has? xconds [IF] ] exit-like [ [THEN] ]
       postpone (does>) dodoes,
     defstart :-hook ;      defstart :-hook ;
 interpret/compile: DOES>  ( compilation colon-sys1 -- colon-sys2 ; run-time nest-sys -- ) \ core        does  interpret/compile: DOES>  ( compilation colon-sys1 -- colon-sys2 ; run-time nest-sys -- ) \ core        does
   
 ' IS Alias TO ( addr "name" -- ) \ core-ext  ' IS Alias TO ( w "name" -- ) \ core-ext
 immediate  immediate
   
   
 doer? :docon [IF]  
 : docon: ( -- addr )    \ gforth  
     \G the code address of a @code{CONSTANT}  
     ['] bl >code-address ;  
 [THEN]  
   
 : docol: ( -- addr )    \ gforth  
     \G the code address of a colon definition  
     ['] on >code-address ;  
 \ !! mark on  
   
 doer? :dovar [IF]  
 : dovar: ( -- addr )    \ gforth  
     \G the code address of a @code{CREATE}d word  
     \ in rom-applications variable might be implemented with constant  
     \ use really a created word!  
     ['] ??? >code-address ;  
 [THEN]  
   
 doer? :douser [IF]  
 : douser: ( -- addr )   \ gforth  
     \G the code address of a @code{USER} variable  
     ['] sp0 >code-address ;  
 [THEN]  
   
 doer? :dodefer [IF]  
 : dodefer: ( -- addr )  \ gforth  
     \G the code address of a @code{defer}ed word  
     ['] source >code-address ;  
 [THEN]  
   
 doer? :dofield [IF]  
 : dofield: ( -- addr )  \ gforth  
     \G the code address of a @code{field}  
     ['] reveal-method >code-address ;  
 [THEN]  
   
 has-prims 0= [IF]  
 : dodoes: ( -- addr )   \ gforth  
     \G the code address of a @code{field}  
     ['] spaces >code-address ;  
 [THEN]  [THEN]
   
   has? compiler [IF]
 : interpret/compile? ( xt -- flag )  : interpret/compile? ( xt -- flag )
     >does-code ['] S" >does-code = ;      >does-code ['] S" >does-code = ;
   [ELSE]
   : interpret/compile?
       false ;
   [THEN]
   


Generate output suitable for use with a patch program
Legend:
Removed from v.1.3  
changed lines
  Added in v.1.12

CVS Admin

Powered by ViewCVS 1.0-dev
(Powered by ViewCVS)

ViewCVS and CVS Help