Diff for /gforth/prims2x.fs between versions 1.63 and 1.64

version 1.63, 2001/01/09 16:11:36 version 1.64, 2001/01/17 09:35:12
Line 140  s" IP" save-mem s" error don't use # on Line 140  s" IP" save-mem s" error don't use # on
     dup item% %size erase      dup item% %size erase
     item-name 2! ;      item-name 2! ;
   
   : map-items { addr end xt -- }
       \ perform xt for all items in array addr...end
       end addr ?do
           i xt execute
       item% %size +loop ;
   
 \ various variables for storing stuff of one primitive  \ various variables for storing stuff of one primitive
   
 2variable forth-name  2variable forth-name
Line 505  does> ( item -- ) Line 511  does> ( item -- )
 : declaration ( item -- )  : declaration ( item -- )
     dup item-name 2@ execute-prefix ;      dup item-name 2@ execute-prefix ;
   
   : declaration-list ( addr1 addr2 -- )
       ['] declaration map-items ;
   
   : declarations ( -- )
    wordlist dup items ! set-current
    effect-in effect-in-end @ declaration-list
    effect-out effect-out-end @ declaration-list ;
   
 : stack-prefix ( stack "prefix" -- )  : stack-prefix ( stack "prefix" -- )
     name tuck nextname create ( stack length ) 2,      name tuck nextname create ( stack length ) 2,
 does> ( item -- )  does> ( item -- )
Line 512  does> ( item -- ) Line 526  does> ( item -- )
     item item-name 2@ prefix-length /string item item-name 2!      item item-name 2@ prefix-length /string item item-name 2!
     stack item item-stack !      stack item item-stack !
     item declaration ;      item declaration ;
       
 : declaration-list ( addr1 addr2 -- )  
  swap ?do  
   i declaration  
  item% %size +loop ;  
   
 : declarations ( -- )  
  wordlist dup items ! set-current  
  effect-in effect-in-end @ declaration-list  
  effect-out effect-out-end @ declaration-list ;  
   
 \ offset computation  \ offset computation
 \ the leftmost (i.e. deepest) item has offset 0  \ the leftmost (i.e. deepest) item has offset 0
Line 533  does> ( item -- ) Line 537  does> ( item -- )
     item item-stack @ xt execute dup @ >r +!      item item-stack @ xt execute dup @ >r +!
     r> item item-offset ! ;      r> item item-offset ! ;
   
 : compute-list ( addr1 addr2 xt -- )  : compute-offset-in ( addr1 addr2 -- )
     { xt }      ['] stack-in compute-offset ;
     swap u+do  
         i xt compute-offset  : compute-offset-out ( addr1 addr2 -- )
     item% %size +loop ;      ['] stack-out compute-offset ;
   
 : clear-stack { -- }  : clear-stack { -- }
     dup stack-in off stack-out off ;      dup stack-in off stack-out off ;
Line 545  does> ( item -- ) Line 549  does> ( item -- )
 : compute-offsets ( -- )  : compute-offsets ( -- )
     data-stack clear-stack  fp-stack clear-stack return-stack clear-stack      data-stack clear-stack  fp-stack clear-stack return-stack clear-stack
     inst-stream clear-stack      inst-stream clear-stack
     effect-in  effect-in-end  @ ['] stack-in  compute-list      effect-in  effect-in-end  @ ['] compute-offset-in  map-items
     effect-out effect-out-end @ ['] stack-out compute-list      effect-out effect-out-end @ ['] compute-offset-out map-items
     inst-stream stack-out @ 0<> abort" # can only be on the input side" ;      inst-stream stack-out @ 0<> abort" # can only be on the input side" ;
   
 : flush-a-tos { stack -- }  : flush-a-tos { stack -- }
Line 578  does> ( item -- ) Line 582  does> ( item -- )
  dup item-type @ type-fetch @ execute ;   dup item-type @ type-fetch @ execute ;
   
 : fetches ( -- )  : fetches ( -- )
  effect-in-end @ effect-in ?do      effect-in effect-in-end @ ['] fetch map-items ;
    i fetch  
  item% %size +loop ;   
   
 : stack-pointer-update { stack -- }  : stack-pointer-update { stack -- }
     \ stack grow downwards      \ stack grow downwards
Line 606  does> ( item -- ) Line 608  does> ( item -- )
  dup item-type @ type-store @ execute ;   dup item-type @ type-store @ execute ;
   
 : stores ( -- )  : stores ( -- )
  effect-out-end @ effect-out ?do      effect-out effect-out-end @ ['] store map-items ;
    i store  
  item% %size +loop ;   
   
 : output-c-tail ( -- )  : output-c-tail ( -- )
     \ the final part of the generated C code      \ the final part of the generated C code
Line 640  does> ( item -- ) Line 640  does> ( item -- )
 : print-debug-args ( -- )  : print-debug-args ( -- )
     ." #ifdef VM_DEBUG" cr      ." #ifdef VM_DEBUG" cr
     ." if (vm_debug) {" cr      ." if (vm_debug) {" cr
     effect-in-end @ effect-in ?do      effect-in effect-in-end @ ['] print-debug-arg map-items
         i print-debug-arg  
         item% %size +loop  
     ." fputc('\n', vm_out);" cr      ." fputc('\n', vm_out);" cr
     ." }" cr      ." }" cr
     ." #endif" cr ;      ." #endif" cr ;
Line 678  does> ( item -- ) Line 676  does> ( item -- )
     endif ;      endif ;
   
 : disasm-args ( -- )  : disasm-args ( -- )
  effect-in-end @ effect-in ?do      effect-in effect-in-end @ ['] disasm-arg map-items ;
    i disasm-arg  
  item% %size +loop ;   
   
 : output-disasm ( -- )  : output-disasm ( -- )
     \ generate code for disassembling VM instructions      \ generate code for disassembling VM instructions
Line 700  does> ( item -- ) Line 696  does> ( item -- )
     endif ;      endif ;
   
 : gen-args-parm ( -- )  : gen-args-parm ( -- )
  effect-in-end @ effect-in ?do      effect-in effect-in-end @ ['] gen-arg-parm map-items ;
    i gen-arg-parm  
  item% %size +loop ;   
   
 : gen-arg-gen { item -- }  : gen-arg-gen { item -- }
     item item-stack @ inst-stream = if      item item-stack @ inst-stream = if
Line 711  does> ( item -- ) Line 705  does> ( item -- )
     endif ;      endif ;
   
 : gen-args-gen ( -- )  : gen-args-gen ( -- )
  effect-in-end @ effect-in ?do      effect-in effect-in-end @ ['] gen-arg-gen map-items ;
    i gen-arg-gen  
  item% %size +loop ;   
   
 : output-gen ( -- )  : output-gen ( -- )
     \ generate C code for generating VM instructions      \ generate C code for generating VM instructions

Removed from v.1.63  
changed lines
  Added in v.1.64


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