Annotation of gforth/wordinfo.fs, revision 1.1
1.1 ! anton 1: \ WORDINFO.FS V1.0 17may93jaw
! 2:
! 3: \ May be cross-compiled
! 4: \ If you want check values then exclude comments,
! 5: \ but keep in mind that this can't be cross-compiled
! 6:
! 7: INCLUDE look.fs
! 8:
! 9: \ Wordinfo is a tool that checks a nfa
! 10: \ and finds out what wordtype we have
! 11: \ it is used in SEE.FS
! 12:
! 13: : alias? ( nfa -- flag )
! 14: dup name> look
! 15: 0= ABORT" WINFO: CFA not found"
! 16: cell+
! 17: 2dup <>
! 18: IF nip dup 1 cells - here !
! 19: count $1f and here cell+ place true
! 20: ELSE 2drop false THEN ;
! 21:
! 22: : var? ( nfa -- flag )
! 23: (name>)
! 24: @ ['] leavings @ = ;
! 25:
! 26: : con? ( nfa -- flag )
! 27: (name>)
! 28: @ ['] bl @ = ;
! 29:
! 30: : does? ( nfa -- flag )
! 31: dup (name>)
! 32: @ ['] source @ =
! 33: dup IF swap (name>) cell+ @ here ! ELSE nip THEN ;
! 34:
! 35: : defered? ( nfa -- flag )
! 36: dup does?
! 37: IF here @ ['] source cell+ @ =
! 38: dup IF swap (name>) >body @ here ! ELSE nip THEN
! 39: ELSE drop false THEN ;
! 40:
! 41: : colon? ( nfa -- flag )
! 42: (name>)
! 43: @ ['] does? @ = ;
! 44:
! 45: \ VALUE VCheck
! 46:
! 47: \ : value? ( nfa -- flag )
! 48: \ dup does?
! 49: \ IF here @ ['] VCheck cell+ @ =
! 50: \ dup IF swap (name>) >body @ here ! ELSE nip THEN
! 51: \ ELSE drop false THEN ;
! 52:
! 53: : prim? ( nfa -- flag )
! 54: name>
! 55: forthstart u< ;
! 56:
! 57: \ None nestable IDs:
! 58:
! 59: 1 CONSTANT Pri# \ Primitives
! 60: 2 CONSTANT Con# \ Constants
! 61: 3 CONSTANT Var# \ Variables
! 62: 4 CONSTANT Val# \ Values
! 63:
! 64: \ Nestabe IDs:
! 65:
! 66: 5 CONSTANT Doe# \ Does part
! 67: 6 CONSTANT Def# \ Defer
! 68: 7 CONSTANT Col# \ Colon def
! 69:
! 70: \ Nobody knows:
! 71:
! 72: 8 CONSTANT Ali# \ Alias
! 73:
! 74: 9 CONSTANT Str# \ Structure words
! 75:
! 76: 10 CONSTANT Com# \ Compiler directives : ; POSTPONE
! 77:
! 78: CREATE InfoTable
! 79: ' Alias? A, Ali# ,
! 80: ' Con? A, Con# ,
! 81: ' Var? A, Var# ,
! 82: \ ' Value? A, Val# ,
! 83: ' Defered? A, Def# ,
! 84: ' Does? A, Doe# ,
! 85: ' Colon? A, Col# ,
! 86: ' Prim? A, Pri# ,
! 87: 0 ,
! 88:
! 89: : WordInfo ( nfa --- code )
! 90: InfoTable
! 91: BEGIN dup @ dup
! 92: WHILE swap 2 cells + swap
! 93: 2 pick swap execute
! 94: UNTIL
! 95: 1 cells - @ nip
! 96: ELSE
! 97: 2drop drop 0
! 98: THEN ;
! 99:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>