Decompilation works again.
[forth.jl.git] / src / lib_7_decompiler.4th
diff --git a/src/lib_7_decompiler.4th b/src/lib_7_decompiler.4th
deleted file mode 100644 (file)
index a27442b..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-\ Decompilation
-
-: .NAME
-        DUP @           ( get the flags/length byte )
-        F_LENMASK AND   ( mask out the flags - just want the length )
-
-        BEGIN
-                DUP 0>          ( length > 0? )
-        WHILE
-                SWAP 1+         ( addr len -- len addr+1 )
-                DUP @           ( len addr -- len addr char | get the next character)
-                DUP 32 >= OVER 127 <= AND IF
-                        EMIT    ( len addr char -- len addr | and print it)
-                ELSE
-                        BASE @ SWAP HEX
-                        ." \x" 0 .R
-                        BASE !
-                THEN
-                SWAP 1-         ( len addr -- addr len-1    | subtract one from length )
-        REPEAT
-        2DROP           ( len addr -- )
-;
-
-: ?HIDDEN
-        1+              ( skip over the link pointer )
-        @               ( get the flags/length byte )
-        F_HIDDEN AND    ( mask the F_HIDDEN flag and return it (as a truth value) )
-;
-
-: ?IMMEDIATE
-        1+              ( skip over the link pointer )
-        @               ( get the flags/length byte )
-        F_IMMED AND     ( mask the F_IMMED flag and return it (as a truth value) )
-;
-
-: BODYLEN
-        \ **TODO**
-;
-
-: SEE
-        BL WORD FIND    ( find the dictionary entry to decompile )
-
-        CR
-
-        0= IF
-                ." Word '" COUNT TYPE ." ' not found in dictionary."
-                EXIT
-        THEN
-
-        DUP DUP BODYLEN + SWAP >LINK
-
-        DUP LINK> @ CASE
-                DOCOL OF
-                        \ Colon definition
-                        [CHAR] : EMIT SPACE DUP 1+ .NAME SPACE
-                        DUP ?IMMEDIATE IF ." IMMEDIATE " THEN CR
-                ENDOF
-                DOVAR OF
-                        \ Variable definition
-                        ." Variable " DUP 1+ .NAME CR
-                        2DROP EXIT
-                ENDOF
-                DOCON OF
-                        \ Constant definition
-                        ." Constant " DUP 1+ .NAME CR
-                        2DROP EXIT
-                ENDOF
-
-                \ Unknown codeword
-                ." Primitive or word with unrecognized codeword." CR 
-                DROP 2DROP EXIT
-        ENDCASE
-
-        4 SPACES
-
-        LINK> >BODY            ( get the data address, ie. points after DOCOL | end-of-word start-of-data )
-
-        ( now we start decompiling until we hit the end of the word )
-        BEGIN           ( end start )
-                2DUP >
-        WHILE
-                DUP @           ( end start codeword )
-
-                CASE
-                ['] LIT OF                ( is it LIT ? )
-                        1+ DUP @                ( get next word which is the integer constant )
-                        .                       ( and print it )
-                ENDOF
-                ['] LITSTRING OF          ( is it LITSTRING ? )
-                        [CHAR] S EMIT [CHAR] " EMIT SPACE ( print S"<space> )
-                        1+ DUP @                ( get the length word )
-                        SWAP 1+ SWAP            ( end start+1 length )
-                        2DUP TYPE               ( print the string )
-                        [CHAR] " EMIT SPACE          ( finish the string with a final quote )
-                        +                       ( end start+1+len, aligned )
-                        1-                     ( because we're about to add 4 below )
-                ENDOF
-                ['] 0BRANCH OF            ( is it 0BRANCH ? )
-                        ." 0BRANCH ( "
-                        1+ DUP @               ( print the offset )
-                        .
-                        ." ) "
-                ENDOF
-                ['] BRANCH OF             ( is it BRANCH ? )
-                        ." BRANCH ( "
-                        1+ DUP @               ( print the offset )
-                        .
-                        ." ) "
-                ENDOF
-                ['] ['] OF                  ( is it ['] ? )
-                        ." ['] "
-                        1+ DUP @               ( get the next codeword )
-                        >NAME                    ( and force it to be printed as a dictionary entry )
-                        .NAME SPACE
-                ENDOF
-                ['] EXIT OF               ( is it EXIT? )
-                        ( We expect the last word to be EXIT, and if it is then we don't print it
-                          because EXIT is normally implied by ;.  EXIT can also appear in the middle
-                          of words, and then it needs to be printed. )
-                        2DUP                    ( end start end start )
-                        1+                     ( end start end start+1 )
-                        <> IF                   ( end start | we're not at the end )
-                                ." EXIT "
-                        THEN
-                ENDOF
-                                        ( default case: )
-                        DUP                     ( in the default case we always need to DUP before using )
-                        >NAME                    ( look up the codeword to get the dictionary entry )
-                        .NAME SPACE               ( and print it )
-                ENDCASE
-
-                1+             ( end start+1 )
-        REPEAT
-
-        [CHAR] ; EMIT CR
-
-        2DROP           ( restore stack )
-;
-