Re: [cc65] More snapshot packages

Date view Thread view Subject view

From: Ullrich von Bassewitz (uz_at_musoftware.de)
Date: 2003-11-03 22:22:14


On Mon, Nov 03, 2003 at 11:02:35PM +0100, Groepaz wrote:
> oh btw....just remembering a little bug in ca65...sth like
>
> foo=7
>
> .proc
> 	.repeat foo,count
> 	.byte count+1
> 	.endrepeat
> .endproc
>
> gives "constant expression expected" for "foo", but

Yes, that's a thing showing up for some time now in several variants. The
problem is always the same: Since a new scope has been opened, the assembler
does not know if the symbol will get redefined later in the same scope. In
other words, it expects something like:

	foo = 7
	.proc
		.repeat foo,count
		.byte count+1
		.endprepeat
		foo = 8
	.endproc

I'm currently working on the assembler, but I have no easy idea how to solve
the problem. My first idea, not to allow any forward decls in presence of a
symbol with the same name, like

    	foo = 7
    	.proc
    		.byte	foo    		; .byte	7
    		foo = 8
    		.byte	foo    		; .byte 8
    	.endproc

will not work, because forward decls are needed for jump labels. Having

	L1:	  	       		; <- A
	.proc
		jmp	L1     		; Jumps to A
	L1:	  	       		; <- B
		jmp	L1     		; Jumps to B
	.endproc

is a very bad idea.

A workaround is to use ::foo: This tells the assembler to use the foo from the
global namespace.

Two possible solutions would be:

  1. a second assembler pass, or

  2. a rather complex intermediate representation that is translated in real
     code later.

For now, you will probably have to live with ::foo or other scoping directives
I'm currently adding.

Regards


	Uz


-- 
Ullrich von Bassewitz                                  uz_at_musoftware.de
----------------------------------------------------------------------
To unsubscribe from the list send mail to majordomo_at_musoftware.de with
the string "unsubscribe cc65" in the body(!) of the mail.


Date view Thread view Subject view

This archive was generated by hypermail 2.1.3 : 2003-11-03 22:22:29 CET