Skip to content

Commit 24ea81c

Browse files
committed
COMMON: revert 6d array support
1 parent e4237f4 commit 24ea81c

File tree

6 files changed

+29
-6
lines changed

6 files changed

+29
-6
lines changed

samples/distro-examples/tests/array.bas

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,9 +295,22 @@ if (camera.x != 512) then throw "invalid x"
295295
if (camera.height != 78) then throw "invalid height"
296296
if (camera.distance != 800) then throw "invalid distance"
297297

298-
rem - 6d array
298+
rem --- 6d arrays
299299
dim a6d(0 to 5, 0 to 5, 0 to 5, 0 to 5, 0 to 5, 4 to 5)
300300
a6d(0,1,2,3,4,5)=99
301301
if (a6d(0,1,2,3,4,5) <> 99) then
302302
throw "a6d error 1"
303303
endif
304+
dim m(1 to 11, 2 to 12, 3 to 13, 4 to 14, 5 to 15, 6 to 16)
305+
for i = 1 to 6
306+
if (lbound(m,i) != i) then
307+
throw "lbound error"
308+
endif
309+
if (ubound(m,i) != 10+i) then
310+
throw "ubound error"
311+
endif
312+
next i
313+
m[1,2,3,4,5,6]=999
314+
if (999 <> m[1,2,3,4,5,6]) then
315+
throw "e"
316+
endif

src/common/blib.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ void cmd_dim(int preserve) {
213213
v_toarray1(var_p, 0);
214214
continue;
215215
}
216-
int size = 1;
216+
uint32_t size = 1;
217217
for (int i = 0; i < dimensions; i++) {
218218
size = size * (ABS(ubound[i] - lbound[i]) + 1);
219219
}

src/common/sberr.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,10 @@ void err_form_input() {
318318
err_throw(ERR_FORM_INPUT);
319319
}
320320

321+
void err_memory() {
322+
rt_raise(ERR_MEMORY);
323+
}
324+
321325
/**
322326
* the DONE message
323327
*/

src/common/sberr.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ void err_ref_var();
7878
void err_ref_circ_var();
7979
void err_array();
8080
void err_form_input();
81+
void err_memory();
8182
void err_throw(const char *fmt, ...);
8283
int err_handle_error(const char *err, var_p_t var);
8384
void inf_done(void);

src/common/var.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,14 @@ void v_alloc_capacity(var_t *var, uint32_t size) {
6666
v_capacity(var) = capacity;
6767
v_asize(var) = size;
6868
v_data(var) = (var_t *)malloc(sizeof(var_t) * capacity);
69-
for (uint32_t i = 0; i < capacity; i++) {
70-
var_t *e = v_elem(var, i);
71-
e->pooled = 0;
72-
v_init(e);
69+
if (!v_data(var)) {
70+
err_memory();
71+
} else {
72+
for (uint32_t i = 0; i < capacity; i++) {
73+
var_t *e = v_elem(var, i);
74+
e->pooled = 0;
75+
v_init(e);
76+
}
7377
}
7478
}
7579

src/languages/messages.en.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,3 +219,4 @@
219219
#define ERR_PARAM_NUM "Incorrect number of parameters: %d. Expected %d."
220220
#define ERR_PACK_TOO_MANY "Too many values to unpack"
221221
#define ERR_PACK_TOO_FEW "Need more than %d values to unpack"
222+
#define ERR_MEMORY "Out of memory error"

0 commit comments

Comments
 (0)