about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--core.e8
-rw-r--r--evoke.e4
-rw-r--r--execution.e12
-rw-r--r--transform.e104
4 files changed, 30 insertions, 98 deletions
diff --git a/core.e b/core.e
index 44f9fd5..e181d4f 100644
--- a/core.e
+++ b/core.e
@@ -1219,8 +1219,14 @@ here !
 
 ~ (output point, alignment byte width -- output point)
 : packalign
+  ~   It's possible the padding will be of length zero, so we have to put the
+  ~ magic comment provide-* command first.
+  ~ : provide-decimal
+  ~ : 0 Alignment padding to width #
   { 2dup /% drop { drop exit } unless
-    swap 0 pack8 swap } forever ;
+    swap 0 pack8 swap
+    ~ : 1 adjust-length
+  } forever ;
 
 
 ~ Binary unpacking
diff --git a/evoke.e b/evoke.e
index 1e9e881..8faed81 100644
--- a/evoke.e
+++ b/evoke.e
@@ -18,6 +18,10 @@ s" source-to-precompile" variable
 ~ Everything directly called by all-contents has this same interface.
 ~
 : all-contents
+  ~ :   This particular program is 'evoke', the compiler. If you already have
+  ~ : a binary copy of 'hex', run this file through it and you'll have a
+  ~ : working compiler. Pretty sweet, right?
+  ~ : blank-line
   0x08000000 L!' origin
 
   elf-file-header
diff --git a/execution.e b/execution.e
index 66f04d1..649784c 100644
--- a/execution.e
+++ b/execution.e
@@ -238,9 +238,9 @@
 : output-cold-start
   ~ : blank-line
   ~ : blank-line
-  ~ : ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-  ~ : ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-  ~ : ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  ~ : ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
+  ~ :  ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
+  ~ : ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
   ~ : ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   ~ : blank-line
   ~ :   This is the start of the cold-start routine, which is the first code
@@ -422,9 +422,9 @@
 : output-warm-start
   ~ : blank-line
   ~ : blank-line
-  ~ : ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-  ~ : ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-  ~ : ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  ~ : ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
+  ~ :  ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
+  ~ : ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
   ~ : ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   ~ : blank-line
   ~ :   This is the start of the warm-start routine, which is the first Forth
diff --git a/transform.e b/transform.e
index e6c4af5..6d12ea1 100644
--- a/transform.e
+++ b/transform.e
@@ -1471,9 +1471,9 @@ allocate-transformation-state s" transformation-state" variable
 : label-transform
   ~ : blank-line
   ~ : blank-line
-  ~ : ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-  ~ : ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-  ~ : ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  ~ : ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
+  ~ :  ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
+  ~ : ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
   ~ : ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   ~ : blank-line
   ~ :   This is the start of a long block of code which has been processed by
@@ -3275,17 +3275,16 @@ allocate-transformation-state s" transformation-state" variable
 : hex-output-metadata-entry-type-indent 4 ;
 : hex-output-metadata-entry-type-string-literal 5 ;
 : hex-output-metadata-entry-type-raw-string-literal 6 ;
-: hex-output-metadata-entry-type-alignment 7 ;
-: hex-output-metadata-entry-type-push-subitem-decimal 8 ;
-: hex-output-metadata-entry-type-push-subitem-hex 9 ;
-: hex-output-metadata-entry-type-push-subitem-hex8 10 ;
-: hex-output-metadata-entry-type-push-subitem-hex16 11 ;
-: hex-output-metadata-entry-type-push-subitem-hex32 12 ;
-: hex-output-metadata-entry-type-push-subitem-hex64 13 ;
-: hex-output-metadata-entry-type-push-subitem-string 14 ;
-: hex-output-metadata-entry-type-drop-subitem 15 ;
-: hex-output-metadata-entry-type-swap-subitems 16 ;
-: hex-output-metadata-entry-type-roll-subitems 17 ;
+: hex-output-metadata-entry-type-push-subitem-decimal 7 ;
+: hex-output-metadata-entry-type-push-subitem-hex 8 ;
+: hex-output-metadata-entry-type-push-subitem-hex8 9 ;
+: hex-output-metadata-entry-type-push-subitem-hex16 10 ;
+: hex-output-metadata-entry-type-push-subitem-hex32 11 ;
+: hex-output-metadata-entry-type-push-subitem-hex64 12 ;
+: hex-output-metadata-entry-type-push-subitem-string 13 ;
+: hex-output-metadata-entry-type-drop-subitem 14 ;
+: hex-output-metadata-entry-type-swap-subitems 15 ;
+: hex-output-metadata-entry-type-roll-subitems 16 ;
 
 ~   Initialize the contents of the output metadata to all zeroes. This is
 ~ called from hex-transform at its top level, at the very start, to make sure
@@ -4124,19 +4123,6 @@ allocate-transformation-state s" transformation-state" variable
           0 current-column!
         } if
 
-        dup hex-output-metadata-entry-type @
-        hex-output-metadata-entry-type-alignment = {
-          fresh-line
-          indentation-depth@ dup indent advance-current-column
-
-          ." ~ Alignment padding to width "
-          dup hex-output-metadata-entry-content @ .
-
-          newline
-          1 is-fresh-line!
-          0 current-column!
-        } if
-
         dup is-push-subitem-entry {
           dup push-subitem-entry-stack
         } if
@@ -4629,70 +4615,6 @@ allocate-transformation-state s" transformation-state" variable
     exit
   } if
 
-  dup s" packalign" stringcmp 0 = {
-    create dropstring
-    s" docol" find entry-to-execution-token execute ,
-    make-hidden
-
-    ~ (output point, alignment byte width)
-    s" 2dup" find entry-to-execution-token ,
-
-    ~   We can't use unpackalign because this patch happens at the time
-    ~ packalign is being defined, and it would be a forward reference. We do
-    ~ the equivalent by hand.
-    s" dup" find entry-to-execution-token ,
-    s" 3unroll" find entry-to-execution-token ,
-    s" dup" find entry-to-execution-token ,
-    s" 3unroll" find entry-to-execution-token ,
-    s" 1-" find entry-to-execution-token ,
-    s" +" find entry-to-execution-token ,
-    s" swap" find entry-to-execution-token ,
-    s" /%" find entry-to-execution-token ,
-    s" swap" find entry-to-execution-token ,
-    s" drop" find entry-to-execution-token ,
-    s" *" find entry-to-execution-token ,
-    ~ (output point, alignment byte width, padding end)
-
-    ~ We can't use pick, either.
-    s" 3roll" find entry-to-execution-token ,
-    s" dup" find entry-to-execution-token ,
-    s" dup" find entry-to-execution-token ,
-    s" lit" find entry-to-execution-token ,
-    5 ,
-    s" unroll" find entry-to-execution-token ,
-    ~ (output point, alignment byte width, padding end, output point,
-    ~  output point)
-
-    s" 3unroll" find entry-to-execution-token ,
-    s" -" find entry-to-execution-token ,
-    ~ (output point, alignment byte width, padding start, padding length)
-
-    ~   This would be the place to put a call to hex-pack-trace, but packalign
-    ~ is implemented using pack8, so it's not necessary.
-
-    ' hex-output-metadata-entry-type-alignment entry-to-execution-token ,
-    ~ (output point, alignment byte width, padding start, padding length,,
-    ~  entry type)
-
-    ~ Again, no pick.
-    s" lit" find entry-to-execution-token ,
-    4 ,
-    s" roll" find entry-to-execution-token ,
-    s" dup" find entry-to-execution-token ,
-    s" lit" find entry-to-execution-token ,
-    5 ,
-    s" unroll" find entry-to-execution-token ,
-
-    ~ (output point, alignment byte width, padding start, padding length,
-    ~  entry type, alignment byte width)
-    ' add-hex-output-metadata-entry entry-to-execution-token ,
-    ~ (output point, alignment byte width)
-    ~ Fall through to the inner implementation.
-
-    ' ] entry-to-execution-token execute
-    exit
-  } if
-
   ~   If no special case matches, we fall back to just being a regular colon.
   ~ We already read the word name above, so we have to do the rest of the
   ~ steps ourselves as well.