Diff for /gforth/prims2x.fs between versions 1.55 and 1.62

version 1.55, 2000/12/24 15:54:18 version 1.62, 2001/01/06 19:29:14
Line 125  end-struct type% Line 125  end-struct type%
 s" sp" save-mem s" (Cell)" make-stack data-stack   s" sp" save-mem s" (Cell)" make-stack data-stack 
 s" fp" save-mem s" "       make-stack fp-stack  s" fp" save-mem s" "       make-stack fp-stack
 s" rp" save-mem s" (Cell)" make-stack return-stack  s" rp" save-mem s" (Cell)" make-stack return-stack
 s" ip" save-mem s" error don't use # on results" make-stack inst-stream  s" IP" save-mem s" error don't use # on results" make-stack inst-stream
 ' inst-in-index inst-stream stack-in-index-xt !  ' inst-in-index inst-stream stack-in-index-xt !
 \ !! initialize stack-in and stack-out  \ !! initialize stack-in and stack-out
   
Line 315  Variable c-flag Line 315  Variable c-flag
    {{ effect-out }} stack-items {{ effect-out-end ! }}     {{ effect-out }} stack-items {{ effect-out-end ! }}
 )) <- stack-effect ( -- )  )) <- stack-effect ( -- )
   
 (( {{ s" " doc 2! s" " forth-code 2! }}  (( {{ s" " doc 2! s" " forth-code 2! s" " wordset 2! }}
    (( {{ line @ name-line ! filename 2@ name-filename 2! }}     (( {{ line @ name-line ! filename 2@ name-filename 2! }}
       {{ start }} forth-ident {{ end 2dup forth-name 2! c-name 2! }}  white ++        {{ start }} forth-ident {{ end 2dup forth-name 2! c-name 2! }}  white ++
       ` ( white ** {{ start }} stack-effect {{ end stack-string 2! }} ` ) white **        ` ( white ** {{ start }} stack-effect {{ end stack-string 2! }} ` ) white **
         {{ start }} forth-ident {{ end wordset 2! }} white **          (( {{ start }} forth-ident {{ end wordset 2! }} white **
         (( {{ start }}  c-ident {{ end c-name 2! }} )) ??  nl             (( {{ start }}  c-ident {{ end c-name 2! }} )) ??
           )) ??  nl
    ))     ))
    (( ` " ` "  {{ start }} (( noquote ++ ` " )) ++ {{ end 1- doc 2! }} ` " nl )) ??     (( ` " ` "  {{ start }} (( noquote ++ ` " )) ++ {{ end 1- doc 2! }} ` " white ** nl )) ??
    {{ skipsynclines off line @ c-line ! filename 2@ c-filename 2! start }} (( nocolonnl nonl **  nl )) ** {{ end c-code 2! skipsynclines on }}     {{ skipsynclines off line @ c-line ! filename 2@ c-filename 2! start }} (( nocolonnl nonl **  nl white ** )) ** {{ end c-code 2! skipsynclines on }}
    (( ` :  nl     (( ` :  white ** nl
       {{ start }} (( nonl ++  nl )) ++ {{ end forth-code 2! }}        {{ start }} (( nonl ++  nl white ** )) ++ {{ end forth-code 2! }}
    )) ?? {{ printprim }}     )) ?? {{ printprim }}
    (( nl || eof ))     (( nl || eof ))
 )) <- primitive ( -- )  )) <- primitive ( -- )
   
 (( (( comment || primitive || nl )) ** eof ))  (( (( comment || primitive || nl white ** )) ** eof ))
 parser primitives2something  parser primitives2something
 warnings @ [IF]  warnings @ [IF]
 .( parser generated ok ) cr  .( parser generated ok ) cr
Line 382  warnings @ [IF] Line 383  warnings @ [IF]
  >r   >r
  ." FETCH_DCELL("   ." FETCH_DCELL("
  r@ item-name 2@ type ." , "   r@ item-name 2@ type ." , "
  r@ item-in-index r@ item-stack @ 2dup stack-access   r@ item-in-index r@ item-stack @ 2dup ." (Cell)" stack-access
  ." , "                      -1 under+ stack-access   ." , "                      -1 under+ ." (Cell)" stack-access
  ." );" cr   ." );" cr
  rdrop ;   rdrop ;
   
Line 646  does> ( item -- ) Line 647  does> ( item -- )
  cr   cr
 ;  ;
   
   : print-type-prefix ( type -- )
       body> >head .name ;
   
   : disasm-arg { item -- }
       item item-stack @ inst-stream = if
           ."   printarg_" item item-type @ print-type-prefix
           ." (ip[" item item-offset @ 1+ 0 .r ." ]);" cr
       endif ;
   
   : disasm-args ( -- )
    effect-in-end @ effect-in ?do
      i disasm-arg
    item% %size +loop ; 
   
   : output-disasm ( -- )
       \ generate code for disassembling VM instructions
       ." if (ip[0] == prim[" function-number @ 0 .r ." ]) {" cr
       ."   fputs(" [char] " emit forth-name 2@ type [char] " emit ." ,stdout);" cr
       ." /* " declarations ." */" cr
       compute-offsets
       disasm-args
       ."   ip += " inst-stream stack-in @ 1+ 0 .r ." ;" cr
       ." } else "
       1 function-number +! ;
   
   
   
   
   : gen-arg-parm { item -- }
       item item-stack @ inst-stream = if
           ." , " item item-type @ type-c-name 2@ type space
           item item-name 2@ type
       endif ;
   
   : gen-args-parm ( -- )
    effect-in-end @ effect-in ?do
      i gen-arg-parm
    item% %size +loop ; 
   
   : gen-arg-gen { item -- }
       item item-stack @ inst-stream = if
           ."   genarg_" item item-type @ print-type-prefix
           ." (ctp, " item item-name 2@ type ." );" cr
       endif ;
   
   : gen-args-gen ( -- )
    effect-in-end @ effect-in ?do
      i gen-arg-gen
    item% %size +loop ; 
   
   : output-gen ( -- )
       \ generate C code for generating VM instructions
       ." /* " declarations ." */" cr
       compute-offsets
       ." void gen_" c-name 2@ type ." (Inst **ctp" gen-args-parm ." )" cr
       ." {" cr
       ."   gen_inst(ctp, vm_prim[" function-number @ 0 .r ." ]);" cr
       gen-args-gen
       ." }" cr
       1 function-number +! ;
   
 : stack-used? { stack -- f }  : stack-used? { stack -- f }
     stack stack-in @ stack stack-out @ or 0<> ;      stack stack-in @ stack stack-out @ or 0<> ;
   
Line 736  does> ( item -- ) Line 798  does> ( item -- )
   
 : process-file ( addr u xt -- )  : process-file ( addr u xt -- )
     >r      >r
     2dup filename 2!      save-mem 2dup filename 2!
     0 function-number !      0 function-number !
     r/o open-file abort" cannot open file"      r/o open-file abort" cannot open file"
     warnings @ if      warnings @ if

Removed from v.1.55  
changed lines
  Added in v.1.62


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>