+ AO = parse_expression(CONSTANT_CONTEXT);
+ if (!glulx_mode) {
+ if (AO.marker != 0)
+ backpatch_zmachine(AO.marker, DYNAMIC_ARRAY_ZA,
+ 2*globalnum);
+ }
+ else {
+ if (AO.marker != 0)
+ backpatch_zmachine(AO.marker, GLOBALVAR_ZA,
+ 4*globalnum);
+ }
+
+ if (globalnum >= global_initial_value_memlist.count)
+ compiler_error("Globalnum out of range");
+ global_initial_value[globalnum] = AO.value;
+
+ if (debugfile_switch)
+ {
+ char *global_name = current_array_name.data;
+ debug_file_printf("<global-variable>");
+ debug_file_printf("<identifier>%s</identifier>", global_name);
+ debug_file_printf("<address>");
+ write_debug_global_backpatch(symbols[global_symbol].value);
+ debug_file_printf("</address>");
+ write_debug_locations
+ (get_token_location_end(beginning_debug_location));
+ debug_file_printf("</global-variable>");
+ }
+}
+
+extern void make_array()
+{
+ int32 i;
+ int name_length;
+ int array_type, data_type;
+ int is_static = FALSE;
+ assembly_operand AO;
+
+ int extraspace;
+
+ int32 global_symbol;
+ debug_location_beginning beginning_debug_location =
+ get_token_location_beginning();
+
+ directive_keywords.enabled = FALSE;
+ get_next_token();
+ i = token_value;
+ global_symbol = i;
+
+ name_length = strlen(token_text) + 1;
+ ensure_memory_list_available(¤t_array_name, name_length);
+ strncpy(current_array_name.data, token_text, name_length);
+
+ if (token_type != SYMBOL_TT)
+ { discard_token_location(beginning_debug_location);
+ ebf_curtoken_error("new array name");
+ panic_mode_error_recovery(); return;
+ }
+
+ if (!(symbols[i].flags & UNKNOWN_SFLAG))
+ { discard_token_location(beginning_debug_location);
+ ebf_symbol_error("new array name", token_text, typename(symbols[i].type), symbols[i].line);
+ panic_mode_error_recovery(); return;
+ }
+
+ directive_keywords.enabled = TRUE;
+ get_next_token();
+ directive_keywords.enabled = FALSE;
+ if ((token_type==DIR_KEYWORD_TT)&&(token_value==STATIC_DK)) {
+ is_static = TRUE;
+ }
+ else {
+ put_token_back();
+ }
+
+ if (!is_static) {
+ assign_symbol(i, dynamic_array_area_size, ARRAY_T);
+ }
+ else {
+ assign_symbol(i, static_array_area_size, STATIC_ARRAY_T);
+ }
+ ensure_memory_list_available(&arrays_memlist, no_arrays+1);
+ arrays[no_arrays].symbol = i;
+
+ directive_keywords.enabled = TRUE;
+
+ get_next_token();
+
+ if ((token_type == SEP_TT) && (token_value == SEMICOLON_SEP))
+ {
+ discard_token_location(beginning_debug_location);
+ ebf_curtoken_error("array definition");
+ put_token_back();
+ return;