Forum
Declaring arrays with constants (*solved*) - Printable Version

+- Forum (https://www.boriel.com/forum)
+-- Forum: Compilers and Computer Languages (https://www.boriel.com/forum/forumdisplay.php?fid=12)
+--- Forum: ZX Basic Compiler (https://www.boriel.com/forum/forumdisplay.php?fid=11)
+---- Forum: Bug Reports (https://www.boriel.com/forum/forumdisplay.php?fid=15)
+---- Thread: Declaring arrays with constants (*solved*) (/showthread.php?tid=597)



Declaring arrays with constants (*solved*) - LTee - 07-21-2014

Hi guys, it's been a little while. Smile

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). Smile

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!


Re: Declaring arrays with constants - boriel - 07-21-2014

LTee Wrote:Hi guys, it's been a little while. Smile

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). Smile

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. Smile
Thanks!

Will fix it ASAP!


Re: Declaring arrays with constants - LTee - 07-21-2014

Brilliant, thanks Boriel! Big Grin


Re: Declaring arrays with constants - boriel - 07-21-2014

Please, download new version 1.4.0s1885 and tell me. :roll:


Re: Declaring arrays with constants - LTee - 07-22-2014

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. Smile


Re: Declaring arrays with constants - nitrofurano - 07-22-2014

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


Re: Declaring arrays with constants - boriel - 07-24-2014

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.