/* likewise global variables, which are in some ways a */
/* simpler form of the same thing. */
/* */
-/* Copyright (c) Graham Nelson 1993 - 2020 */
-/* */
-/* This file is part of Inform. */
+/* Part of Inform 6.35 */
+/* copyright (c) Graham Nelson 1993 - 2021 */
/* */
/* Inform is free software: you can redistribute it and/or modify */
/* it under the terms of the GNU General Public License as published by */
area = static_array_area;
area_size = static_array_area_size;
}
+
+ if (i == 0) {
+ error("An array must have at least one entry");
+ }
/* Write the array size into the 0th byte/word of the array, if it's
a "table" or "string" array */
/* */
/* | -> | <number-of-entries> */
/* | --> | <entry-1> ... <entry-n> */
-/* | string | [ <entry-1> [,] [;] <entry-2> ... <entry-n> ]; */
+/* | string | [ <entry-1> [;] <entry-2> ... <entry-n> ]; */
/* | table */
/* | buffer */
/* */
int array_type, data_type;
int is_static = FALSE;
assembly_operand AO;
+
+ int extraspace;
+ int orig_area_size;
int32 global_symbol;
const char *global_name;
goto RedefinitionOfSystemVar;
}
- if ((token_type != SYMBOL_TT) || (!(sflags[i] & UNKNOWN_SFLAG)))
+ if (token_type != SYMBOL_TT)
{ discard_token_location(beginning_debug_location);
if (array_flag)
ebf_error("new array name", token_text);
panic_mode_error_recovery(); return;
}
+ if (!(sflags[i] & UNKNOWN_SFLAG))
+ { discard_token_location(beginning_debug_location);
+ if (array_flag)
+ ebf_symbol_error("new array name", token_text, typename(stypes[i]), slines[i]);
+ else ebf_symbol_error("new global variable name", token_text, typename(stypes[i]), slines[i]);
+ panic_mode_error_recovery(); return;
+ }
+
if ((!array_flag) && (sflags[i] & USED_SFLAG))
error_named("Variable must be defined before use:", token_text);
/* Leave room to write the array size in later, if string/table array */
- int extraspace = 0;
+ extraspace = 0;
if ((array_type==STRING_ARRAY) || (array_type==TABLE_ARRAY))
extraspace += array_entry_size;
if (array_type==BUFFER_ARRAY)
extraspace += WORDSIZE;
-
- int orig_area_size;
if (!is_static) {
orig_area_size = dynamic_array_area_size;
CalculatedArraySize:
- if (module_switch && (AO.marker != 0))
- { error("Array sizes must be known now, not externally defined");
+ if (AO.marker != 0)
+ { error("Array sizes must be known now, not defined later");
break;
}
finish_array(i, is_static);
if (debugfile_switch)
- { debug_file_printf("<array>");
+ {
+ int32 new_area_size;
+ debug_file_printf("<array>");
debug_file_printf("<identifier>%s</identifier>", global_name);
debug_file_printf("<value>");
write_debug_array_backpatch(svals[global_symbol]);
debug_file_printf("</value>");
- int32 new_area_size = (!is_static ? dynamic_array_area_size : static_array_area_size);
+ new_area_size = (!is_static ? dynamic_array_area_size : static_array_area_size);
debug_file_printf
("<byte-count>%d</byte-count>",
new_area_size - array_base);