Re: [cc65] More snapshot packages

Date view Thread view Subject view

From: Ullrich von Bassewitz (
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
		.repeat foo,count
		.byte count+1
		foo = 8

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
    		.byte	foo    		; .byte	7
    		foo = 8
    		.byte	foo    		; .byte 8

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

	L1:	  	       		; <- A
		jmp	L1     		; Jumps to A
	L1:	  	       		; <- B
		jmp	L1     		; Jumps to B

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.



Ullrich von Bassewitz                        
To unsubscribe from the list send mail to 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