gnupic: Update on #v()


Previous by date: 23 Feb 2002 17:39:01 -0000 Update on #v(), Byron A Jeff
Next by date: 23 Feb 2002 17:39:01 -0000 Open Source PCI Bridge Soft Core, tadejm.opencores.org
Previous in thread: 23 Feb 2002 17:39:01 -0000 Update on #v(), Byron A Jeff
Next in thread: 23 Feb 2002 17:39:01 -0000 Re: Update on #v(), Craig Franklin

Subject: Re: Update on #v()
From: Craig Franklin ####@####.####
Date: 23 Feb 2002 17:39:01 -0000
Message-Id: <3C77D297.99BF6095@attbi.com>

Several monthes ago I started working on the macro problems.  I have
mentioned it few times on this list.  I havn't had enough time to finish
the work I started.  Over the last couple of monthes my paying job has
sucked every bit of life out of me.

At the core of this and many other problems is the way macros are
handled.  Macros should be a simple text substitutions.

Last weekend I created a patch against 0.10.0 that includes all of my
fixes.  I will create a branch in cvs and apply the patch.  We can play
with it for a couple of weeks then release it if all goes well.  Give me
48 hours to put everything in cvs.  I will send out a message with
instructions when everything is ready.

Below is one of my test files.  It demonstrates that things are fairly
close but there are still some problems.

gpasm-0.10.0 alpha              macro.asm   2-23-2002  11:26:59         
PAGE  1


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE
 
               00001   processor 16c84
               00002 
               00003   list n=0
               00004 
  00000005     00005 craig equ 5
               00006 
               00007 test1 macro number1, number2, number3, number4 
               00008   movlw number1
               00009   fill (movlw number2), number3
               00010   movlw number4
               00011   endm
               00012 
               00013 test2 macro string
               00014   messg string
               00015   endm
               00016 
               00017 test3 macro string
               00018 
               00019 string equ 5
               00020 
               00021   endm
               00022 
               00023 test4 macro number, value
               00024 label_#v(number) equ value
               00025   endm
               00026 
               00027 test5 macro number
               00028   if (number==1)
               00029     exitm
               00030   else
               00031     movlw 0
               00032   endif
               00033   movlw 0
               00034   endm
               00035 
               00036   #include "test.inc"
               00001 
0000 3005      00002   movlw 5
               00037 
               00038   test1 1, 2, 3, craig
0001 3002 3002     M   fill (movlw number2), number3
0003 3002
0004 3005          M   movlw number4
               00039 
               00040   test2 "hello"
Message [301] : hello
                   M   messg string
               00041 
               00042   test3 franklin
                   M 
  00000005         M string equ 5
                   M 
               00043 
               00044   test4 3, 4
  00000004         M label_#v(number) equ value
               00045 
               00046   test5 0
                   M   if (number==1)
                   M     exitm
                   M   else
0005 3000          M     movlw 0
                   M   endif
0006 3000          M   movlw 0
               00047 
               00048   test5 1
                   M   if (number==1)
                   M     exitm
               00049 
0007 3005      00050   movlw 5
               00051 
Warning [212] : Expected (ENDIF)
gpasm-0.10.0 alpha              macro.asm   2-23-2002 
11:26:59          PAGE  2


SYMBOL TABLE
  LABEL                             VALUE 

__16C84                           00000001
craig                             00000005
franklin                          00000005
label_3                           00000004


MEMORY USAGE MAP ('X' = Used,  '-' = Unused)

0000 : XXXXXXXX-------- ---------------- ----------------
----------------

All other memory blocks unused.

Program Memory Words Used: 8


Errors   :       0
Warnings :       1 reported,       0 suppressed
Messages :       1 reported,       0 suppressed


Byron A Jeff wrote:
> 
> To recap:
> 
> > This exchange reminded me that one area where gpasm still generates errors
> > is in the area of #v() processing. So I decided to spend a couple of hours
> > checking out what the problems are.
> > ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
> > test1 macro                           ; Dummy macro 1
> >         cblock                                ; Declare a local variable
> >         testme1#v($)                  ; ERROR!!!
> >         endc
> >
> >         local test = testme1#v($)     ; rename local var defined above 'test'
> >
> >         movlw  test                   ; Then use it.
> >         endm
> > ; [Deleted for brevity ]
> > whichtest macro select                        ; Combining macro that selects
> >                                       ; between the two above.
> >       test#v(select)                  ; ERROR!!!
> >        endm
> >
> >        whichtest(1)                   ; Show use of whichtest
> >        whichtest(2)
> >         end
> > ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
> 
> The parse doesn't currently allow for the two lines commented with 'ERROR!!!'.
> The first is a 'const_line' and the second in an statement.
> 
> My initial line of thinking was that the expression in the #v(expr) should not
> be parsed in a macro context. But rethinking on it a bit, I realized that
> the parser must be parsing normal expressions. So to test I ran this:
> ;;;;;;;;;;;;;;;;;;;;;;;
> testme  macro   n1,n2
>         movlw   1*(n1+n2)
>         endm
> ;;;;;;;;;;;;;;;;;;;;;;;
> 
> And sure enough the expression was parsed in its entirety. So that means that
> the macro gathering code retains parsed expressions.
> 
> OK so we clearly need to go with that flow and allow the expression in the
> #v(expr) to be parsed. That throws out all the ideas I had of making a syntax
> change in macro context forcing #v(expr) to become #v(string).
> 
> label_concat kind of points out the right direction. It allows for both a
> label and a VARLAB_BEGIN which has a #v(expr) in it. But it disallows this
> type of label in a macro context. This needs to be fixed.
> 
> So this is what the problem reduces to is how to represent a parsed #v(expr)
> tree in a spot where and INDENTIFIER or LABEL goes. And specifically so that
> it can be stored in a macro context and be properly evaluated upon macro
> invocation.
> 
> So it's off to figure off what evaluate_macro does with both expressions and
> INDENTIFIERS. It may just be as simple as adding a new type of node...
> 
> Let me know if anyone else has any ideas.
> 
> BAJ
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: ####@####.####
> For additional commands, e-mail: ####@####.####

Previous by date: 23 Feb 2002 17:39:01 -0000 Update on #v(), Byron A Jeff
Next by date: 23 Feb 2002 17:39:01 -0000 Open Source PCI Bridge Soft Core, tadejm.opencores.org
Previous in thread: 23 Feb 2002 17:39:01 -0000 Update on #v(), Byron A Jeff
Next in thread: 23 Feb 2002 17:39:01 -0000 Re: Update on #v(), Craig Franklin


Powered by ezmlm-browse 0.20.