I'm in the process of converting BASIC over to use this new assembler... 
and have hit a few snags.  I'm happy to patch, but don't know if this is 
the Right Thing or not.

At 12:39 AM 6/1/2002 -0400, you wrote:
>Support for keyed parameters now exists. I need to change the name of
>the 'set_keyed' and 'get_keyed' operator to just 'set', since they
>should be relatively unambiguous. Anyway, here's the new syntax
>available at the assembly level:

Looks great.  Converted over with little sweat, noted below.


>The next feature which Clinton used in his BASIC compiler but had to do
>by hand is a manifest constant. You can use the following syntax to
>define an assemble-time constant:
>
>..constant PerlHash 6 # Important, because the special names 'PerlHash'

This should actually be:

..constant PerlHash 6

Right?

I was doing a simple X for Y transformation using a pattern like this:

         ^.const\s+(\w+)\s+(.*)

This let me rename registers for sake of clarity.  I'm missing that.  It's 
a simple hack, just add an elsif block that looks like:

    } elsif(/^\.constant \s+
       (\w+)        \s+
       ([NISP]\d+)
       /x) {                               # .constant {name} {string
   $self->{constants}{$1} = $2;
   }

Other things to note:

The assembler seems unhappy with multiple labels for the same 
codepoint.  This is no longer allowed:

NSORT:
COMBSORT:
         operation....

To allow a bsr NSORT or a bsr COMBSORT to jump to the same instruction you 
now have to write:

NSORT:
         noop
COMBSORT:
         operation....

And it works fine.

The keyed operators get_keyed, set_keyed are unhappy with constants:

         get_keyed S0, P0[0]

For example.  Writing them the old way still works.


After all this, and checking it in I still can't get BASIC to assemble 
correctly.  The last remaining error I get is:

         C:\projects\parrot\parrot\languages\BASIC>..\..\parrot.exe basic.pbc
         PackFile_Constant_clear: Unrecognized type ' ' during unpack!
         PackFile_unpack: Error reading constant table segment!
         Parrot VM: Can't unpack packfile basic.pbc.

BASIC's all checked in with the corrections noted above.  I patched my 
version of assemble.pl to allow register redefinition (.constant FOO 
I0).  But other than that, once this last error is found it's ready to 
go.  Suggestions?


Reply via email to