Posts: 153
Threads: 29
Joined: Jul 2009
Reputation:
2
Hi guys, it's been a little while.
I finally got around to upgrading to 1.4.0-s1881 and set about recompiling a bunch of old stuff to see how it turned out. One thing I'm having a problem with is that some of my code uses consts in the declaration of arrays, which was fine in 1.3 but doesn't seem to like compiling in 1.4.
e.g.
Code: 'constants
const DGMAXX as ubyte = 10
const DGMAXY as ubyte = 10
'dungeon data
dim dgConnected(DGMAXY, DGMAXX) as ubyte
This fails to compile with an error telling me that I must use a constant (which I thought I did).
Code: DunGen.bas:6: Array bound must be a constant expression.
DunGen.bas:6: Array bound must be a constant expression.
Traceback (most recent call last):
File "zxb.py", line 348, in <module>
File "zxb.py", line 262, in main
File "ply\yacc.pyc", line 263, in parse
File "ply\yacc.pyc", line 710, in parseopt
File "zxbparser.pyc", line 600, in p_bound_list_bound
File "zxbparser.pyc", line 324, in make_bound_list
File "symbols\boundlist.pyc", line 45, in make_node
File "ast_\tree.pyc", line 147, in appendChild
File "ast_\tree.pyc", line 52, in append
AssertionError
Apologies if this has already been covered in here, I didn't have much luck with the search!
Posts: 1,770
Threads: 55
Joined: Aug 2019
Reputation:
24
LTee Wrote:Hi guys, it's been a little while.
I finally got around to upgrading to 1.4.0-s1881 and set about recompiling a bunch of old stuff to see how it turned out. One thing I'm having a problem with is that some of my code uses consts in the declaration of arrays, which was fine in 1.3 but doesn't seem to like compiling in 1.4.
e.g.
Code: 'constants
const DGMAXX as ubyte = 10
const DGMAXY as ubyte = 10
'dungeon data
dim dgConnected(DGMAXY, DGMAXX) as ubyte
This fails to compile with an error telling me that I must use a constant (which I thought I did).
Code: DunGen.bas:6: Array bound must be a constant expression.
DunGen.bas:6: Array bound must be a constant expression.
Traceback (most recent call last):
File "zxb.py", line 348, in <module>
File "zxb.py", line 262, in main
File "ply\yacc.pyc", line 263, in parse
File "ply\yacc.pyc", line 710, in parseopt
File "zxbparser.pyc", line 600, in p_bound_list_bound
File "zxbparser.pyc", line 324, in make_bound_list
File "symbols\boundlist.pyc", line 45, in make_node
File "ast_\tree.pyc", line 147, in appendChild
File "ast_\tree.pyc", line 52, in append
AssertionError
Apologies if this has already been covered in here, I didn't have much luck with the search!
No, it's ok. 1881 was released 48h ago, if I recall correctly.
Thanks!
Will fix it ASAP!
Posts: 153
Threads: 29
Joined: Jul 2009
Reputation:
2
Brilliant, thanks Boriel!
Posts: 1,770
Threads: 55
Joined: Aug 2019
Reputation:
24
Please, download new version 1.4.0s1885 and tell me. :roll:
Posts: 153
Threads: 29
Joined: Jul 2009
Reputation:
2
That seems to work perfectly - many thanks!
I do think I might have another problem, however.... but I need to investigate that first to make sure it's not me writing rubbish code.
Posts: 366
Threads: 186
Joined: Sep 2011
Reputation:
0
LTee Wrote:...
Code: 'constants
const DGMAXX as ubyte = 10
const DGMAXY as ubyte = 10
'dungeon data
dim dgConnected(DGMAXY, DGMAXX) as ubyte
...
well, i think what i’m really missing is this:
Code: dim dgConnected(DGMAXY, DGMAXX) as ubyte at $E000
(just like as we do for allocating variables to different memory addresses)
so that would take around 121 bytes (11*11 (i guess it’s 11, because it is an array from 0 to 10?) ) starting from $E000 - i’m needing this a lot, because when we patch ZX-Basic resulting binaries to rom files (such as on cartridge roms for Sega 8-bit consoles, ColecoVision, MSX, etc.), we really need to use peeks and pokes instead of arrays, since we can’t allocate arrays outside the rom area
i really have no idea how difficult would be implementing it
Posts: 1,770
Threads: 55
Joined: Aug 2019
Reputation:
24
nitrofurano Wrote:LTee Wrote:...
Code: 'constants
const DGMAXX as ubyte = 10
const DGMAXY as ubyte = 10
'dungeon data
dim dgConnected(DGMAXY, DGMAXX) as ubyte
...
well, i think what i’m really missing is this:
Code: dim dgConnected(DGMAXY, DGMAXX) as ubyte at $E000
(just like as we do for allocating variables to different memory addresses)
so that would take around 121 bytes (11*11 (i guess it’s 11, because it is an array from 0 to 10?) ) starting from $E000 - i’m needing this a lot, because when we patch ZX-Basic resulting binaries to rom files (such as on cartridge roms for Sega 8-bit consoles, ColecoVision, MSX, etc.), we really need to use peeks and pokes instead of arrays, since we can’t allocate arrays outside the rom area
i really have no idea how difficult would be implementing it
I'm working on this. Basically, using Dynamic arrays. The problem is arrays also use a dimension table to calculate offset. And it always precedes the data.
For dynamic arrays I think the best way is to put the dimension table at the end. Dynamic arrays are created on runtime (just like in basic) and can change the dimension during the execution.
|