--- gforth/prims2x.fs 2001/12/24 20:39:29 1.103 +++ gforth/prims2x.fs 2002/06/02 10:31:28 1.105 @@ -423,7 +423,7 @@ wordlist constant prefixes stack r@ type-stack ! rdrop ; -: type-prefix ( xt1 xt2 n stack "prefix" -- ) +: type-prefix ( addr u xt1 xt2 n stack "prefix" -- ) get-current >r prefixes set-current create-type r> set-current does> ( item -- ) @@ -693,7 +693,7 @@ stack inst-stream IP Cell : output-profile ( -- ) \ generate code for postprocessing the VM block profile stuff ." if (VM_IS_INST(*ip, " function-number @ 0 .r ." )) {" cr - ." add_inst(b, " quote prim prim-name 2@ type quote ." );" cr + ." add_inst(b, " quote prim prim-name 2@ type quote ." );" cr ." ip += " inst-stream stack-in @ 1+ 0 .r ." ;" cr prim prim-c-code 2@ s" SET_IP" search nip nip prim prim-c-code 2@ s" SUPER_END" search nip nip or if @@ -703,6 +703,23 @@ stack inst-stream IP Cell endif ." }" cr ; +: output-profile-combined ( -- ) + \ generate code for postprocessing the VM block profile stuff + ." if (VM_IS_INST(*ip, " function-number @ 0 .r ." )) {" cr + num-combined @ 0 +do + ." add_inst(b, " quote + combined-prims i th @ prim-name 2@ type + quote ." );" cr + loop + ." ip += " inst-stream stack-in @ 1+ 0 .r ." ;" cr + combined-prims num-combined @ 1- th @ prim-c-code 2@ s" SET_IP" search nip nip + combined-prims num-combined @ 1- th @ prim-c-code 2@ s" SUPER_END" search nip nip or if + ." return;" cr + else + ." goto _endif_;" cr + endif + ." }" cr ; + : output-superend ( -- ) \ output flag specifying whether the current word ends a dynamic superinst prim prim-c-code 2@ s" SET_IP" search nip nip @@ -1228,6 +1245,7 @@ Variable c-flag line @ name-line ! filename 2@ name-filename 2! function-number @ prim prim-num ! start }} forth-ident {{ end 2dup prim prim-name 2! prim prim-c-name 2! }} white ++ + (( ` / white ** {{ start }} c-ident {{ end prim prim-c-name 2! }} white ** )) ?? (( simple-primitive || combined-primitive )) {{ 1 function-number +! }} )) <- primitive ( -- )