Changeset 2898
- Timestamp:
- Mar 19, 2012 8:46:09 PM (14 months ago)
- Location:
- forth
- Files:
-
- 2 edited
-
kernel/kernel.fth (modified) (3 diffs)
-
lib/decomp.fth (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
forth/kernel/kernel.fth
r2871 r2898 370 370 : [""] \ word (s Compile-time: -- ) 371 371 (s Run-time: -- pstr ) 372 compile ( "s) safe-parse-word ",372 compile (p") safe-parse-word ", 373 373 ; immediate 374 374 375 375 \ Obsolete 376 376 : ["] \ string" (s -- str ) 377 compile ( "s) ,"377 compile (p") ," 378 378 ; immediate 379 379 … … 384 384 : compile-pstring ( adr len -- ) 385 385 state @ if 386 compile ( "s) ",386 compile (p") ", 387 387 else 388 388 switch-string "temp npack … … 637 637 ; 638 638 : ?throw ( flag throw-code -- ) swap if throw else drop then ; 639 : ( "s) (s -- str-addr ) skipstr ( addr len ) drop 1- ;639 : (p") (s -- str-addr ) skipstr ( addr len ) drop 1- ; 640 640 641 641 nuser 'lastacf \ acf of latest definition -
forth/lib/decomp.fth
r2825 r2898 57 57 headerless 58 58 \ Like ." but goes to a new line if needed. 59 : cr". ( adr len -- ) dup ?line type;59 : cr". ( adr len -- ) dup ?line magenta-letters type cancel ; 60 60 : .." ( -- ) [compile] " compile cr". ; immediate 61 61 … … 281 281 ; 282 282 283 : put" (s -- ) ascii " emit space ; 284 285 : .cword (s ip -- ip' ) \ Display run-time word, e.g. (is) sans '()' 286 dup token@ ?cr ( ip acf ) 287 >name name>string ( ip adr len ) 288 swap 1+ swap 2 - type space ( ip ) \ Remove parentheses 289 ta1+ 290 ; 283 : put" (s -- ) ascii " emit space ; 284 285 : cword-name (s ip -- ip' $ name$ ) 286 dup token@ ( ip acf ) 287 >name name>string ( ip name$ ) 288 swap 1+ swap 2 - ( ip name$' ) \ Remove parentheses 289 rot ta1+ -rot ( ip' name$ ) 290 2 pick count ( ip name$ $ ) 291 2swap ( ip $ name$ ) 292 ; 293 : .string-tail ( $ name$ -- ) 294 2 pick over + 3 + ?line ( $ name$ ) \ Keep word and string on the same line 295 cr". space ( $ ) 296 red-letters type ( ) 297 .." "" " ( ) 298 ; 299 300 : pretty-n. ( n -- ) green-letters n. cancel ; 301 : pretty-. ( n -- ) green-letters . cancel ; 302 291 303 : .word ( ip -- ip' ) dup token@ check-[compile] ?cr .name ta1+ ; 292 304 : skip-word ( ip -- ip' ) ta1+ ; 293 : .inline ( ip -- ip' ) ta1+ dup unaligned-@ n. na1+ ;305 : .inline ( ip -- ip' ) ta1+ dup unaligned-@ pretty-n. na1+ ; 294 306 : skip-inline ( ip -- ip' ) ta1+ na1+ ; 295 : .wlit ( ip -- ip' ) ta1+ dup unaligned-w@ 1- . wa1+ ;307 : .wlit ( ip -- ip' ) ta1+ dup unaligned-w@ 1- pretty-. wa1+ ; 296 308 : skip-wlit ( ip -- ip' ) ta1+ wa1+ ; 297 : .llit ( ip -- ip' ) ta1+ dup unaligned-l@ 1- . la1+ ;309 : .llit ( ip -- ip' ) ta1+ dup unaligned-l@ 1- pretty-. la1+ ; 298 310 : skip-llit ( ip -- ip' ) ta1+ la1+ ; 299 : .dlit ( ip -- ip' ) ta1+ dup d@ (d.) type ." . "2 na+ ;311 : .dlit ( ip -- ip' ) ta1+ dup d@ (d.) green-letters type ." . " cancel 2 na+ ; 300 312 : skip-dlit ( ip -- ip' ) ta1+ 2 na+ ; 301 313 : skip-branch ( ip -- ip' ) +branch ; 302 : .quote ( ip -- ip' ) .word .word ; 303 : skip-quote ( ip -- ip' ) ta1+ ta1+ ; 304 : .compile ( ip -- ip' ) ." compile " ta1+ .word ; 314 : .compile ( ip -- ip' ) .." compile " ta1+ .word ; 305 315 : skip-compile ( ip -- ip' ) ta1+ ta1+ ; 306 316 : skip-string ( ip -- ip' ) ta1+ +str ; … … 310 320 : skip-(') ( ip -- ip' ) ta1+ ta1+ ; 311 321 headerless 312 : .is ( ip -- ip' ) ." to " ta1+ dup token@ .name ta1+ ; 313 : .string-tail ( ip -- ip' ) dup count type +str ; 314 : .string ( ip -- ip' ) .cword .string-tail put" ; 315 : .pstring ( ip -- ip' ) ?cr ." p" put" ta1+ .string-tail put" ; 316 : .nstring ( ip -- ip' ) ?cr put" ta1+ dup ncount type +nstr put" ; 322 : .is ( ip -- ip' ) .." to " ta1+ dup token@ .name ta1+ ; 323 : .string ( ip -- ip' ) cword-name .string-tail +str ; 324 : .nstring ( ip -- ip' ) ta1+ dup ncount " n""" .string-tail +nstr ; 317 325 318 326 \ Use this version of .branch if the structured conditional code is not used … … 326 334 then 327 335 ; 328 329 336 : dummy ; 330 337 … … 345 352 ( 16 ) [compile] (') ( 17 ) [compile] (of) 346 353 ( 18 ) [compile] (endof) ( 19 ) [compile] (endcase) 347 ( 20 ) [compile] ( "s) ( 21 ) [compile] (is)354 ( 20 ) [compile] (p") ( 21 ) [compile] (is) 348 355 ( 22 ) [compile] (dlit) ( 23 ) [compile] (llit) 349 356 ( 24 ) [compile] (n") ( 25 ) [compile] isdefer … … 366 373 ( 16 ) .(') ( 17 ) .of 367 374 ( 18 ) .endof ( 19 ) .endcase 368 ( 20 ) . pstring( 21 ) .is375 ( 20 ) .string ( 21 ) .is 369 376 ( 22 ) .dlit ( 23 ) .llit 370 377 ( 24 ) .nstring ( 25 ) .is … … 448 455 : .immediate ( acf -- ) immediate? if .." immediate" then ; 449 456 450 : .definer ( acf definer-acf -- acf ) .name dup .name ; 457 : .definer ( acf definer-acf -- acf ) 458 magenta-letters .name dup blue-letters .name cancel 459 ; 451 460 452 461 : dump-body ( pfa -- ) 453 462 push-hex 454 dup @ n. 2 spaces 8 emit.ln463 dup @ pretty-n. 2 spaces 8 emit.ln 455 464 pop-base 456 465 ; 457 466 \ Display category of word 458 467 : .: ( acf definer -- ) .definer space space >body .pf ; 459 : .constant ( acf definer -- ) over >data ?.definer drop ;460 : .2constant ( acf definer -- ) over >data dup ? na1+ ?.definer drop ;468 : .constant ( acf definer -- ) over >data @ pretty-n. .definer drop ; 469 : .2constant ( acf definer -- ) over >data dup @ pretty-n. na1+ @ pretty-n. .definer drop ; 461 470 : .vocabulary ( acf definer -- ) .definer drop ; 462 471 : .code ( acf definer -- ) .definer >code disassemble ; 463 472 : .variable ( acf definer -- ) 464 over >data n. .definer . ." value = " >data ?473 over >data n. .definer ." value = " >data @ pretty-n. 465 474 ; 466 475 : .create ( acf definer -- ) 467 over >body n. .definer . ." value = " >body dump-body476 over >body n. .definer ." value = " >body dump-body 468 477 ; 469 478 : .user ( acf definer -- ) 470 over >body ? .definer .." value = " >data ?479 over >body @ n. .definer ." value = " >data @ pretty-n. 471 480 ; 472 481 : .defer ( acf definer -- ) 473 .definer . ." is " cr >data token@ (see)482 .definer ." is " cr >data token@ (see) 474 483 ; 475 484 : .alias ( acf definer -- ) … … 477 486 ; 478 487 : .value ( acf definer -- ) 479 swap >data ?.definer488 swap >data @ pretty-n. .definer 480 489 ; 481 490 … … 487 496 .definer >body ." (Body: " dump-body ." ) " cr 488 497 ; 489 490 498 491 499 \ Classify a word based on its acf
Note: See TracChangeset
for help on using the changeset viewer.
