X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=src%2Fheader.h;h=80bfa1e964ab0684321b06ec06fb0b947897ae4f;hb=56a5292888e1d46fe3033cd1d5c636051692453f;hp=d92e0f54cc11b1295c0b3563857957260e9e98be;hpb=8e63120c630c94c598d4e2d6ba823dac59bce8fa;p=inform.git diff --git a/src/header.h b/src/header.h index d92e0f5..80bfa1e 100644 --- a/src/header.h +++ b/src/header.h @@ -1,10 +1,10 @@ /* ------------------------------------------------------------------------- */ /* Header file for Inform: Z-machine ("Infocom" format) compiler */ /* */ -/* Inform 6.40 */ +/* Inform 6.42 */ /* */ /* This header file and the others making up the Inform source code are */ -/* copyright (c) Graham Nelson 1993 - 2022 */ +/* copyright (c) Graham Nelson 1993 - 2024 */ /* */ /* Inform is free software: you can redistribute it and/or modify */ /* it under the terms of the GNU General Public License as published by */ @@ -34,10 +34,9 @@ /* ------------------------------------------------------------------------- */ /* For releases, set to the release date in the form "1st January 2000" */ -#define RELEASE_DATE "in development" -#define RELEASE_NUMBER 1640 +#define RELEASE_DATE "10th February 2024" +#define RELEASE_NUMBER 1642 #define GLULX_RELEASE_NUMBER 38 -#define MODULE_VERSION_NUMBER 1 #define VNUMBER RELEASE_NUMBER /* N indicates an intermediate release for Inform 7 */ @@ -424,9 +423,6 @@ #ifndef GlulxCode_Extension #define GlulxCode_Extension ".ulx" #endif -#ifndef Module_Extension -#define Module_Extension ".m5" -#endif #ifndef ICL_Extension #define ICL_Extension ".icl" #endif @@ -442,7 +438,6 @@ #define V7Code_Extension "" #define V8Code_Extension "" #define GlulxCode_Extension "" -#define Module_Extension "" #define ICL_Extension "" #endif @@ -456,9 +451,6 @@ #ifndef Code_Directory #define Code_Directory "games" #endif -#ifndef Module_Directory -#define Module_Directory "modules" -#endif #ifndef ICL_Directory #define ICL_Directory "" #endif @@ -474,9 +466,6 @@ #ifndef Code_Directory #define Code_Directory "" #endif -#ifndef Module_Directory -#define Module_Directory "" -#endif #ifndef ICL_Directory #define ICL_Directory "" #endif @@ -581,14 +570,14 @@ #define ReadInt32(ptr) \ - ( (((int32)(((uchar *)(ptr))[0])) << 24) \ - | (((int32)(((uchar *)(ptr))[1])) << 16) \ - | (((int32)(((uchar *)(ptr))[2])) << 8) \ - | (((int32)(((uchar *)(ptr))[3])) ) ) + ( (((uint32)(((uchar *)(ptr))[0])) << 24) \ + | (((uint32)(((uchar *)(ptr))[1])) << 16) \ + | (((uint32)(((uchar *)(ptr))[2])) << 8) \ + | (((uint32)(((uchar *)(ptr))[3])) ) ) #define ReadInt16(ptr) \ - ( (((int32)(((uchar *)(ptr))[0])) << 8) \ - | (((int32)(((uchar *)(ptr))[1])) ) ) + ( (((uint32)(((uchar *)(ptr))[0])) << 8) \ + | (((uint32)(((uchar *)(ptr))[1])) ) ) #define WriteInt32(ptr, val) \ ((ptr)[0] = (uchar)(((int32)(val)) >> 24), \ @@ -613,10 +602,6 @@ /* ------------------------------------------------------------------------- */ #define MAX_ERRORS 100 -#define MAX_IDENTIFIER_LENGTH 32 -#define MAX_ABBREV_LENGTH 64 -#define MAX_DICT_WORD_SIZE 40 -#define MAX_DICT_WORD_BYTES (40*4) #define MAX_NUM_ATTR_BYTES 39 #define MAX_VERB_WORD_SIZE 120 @@ -661,10 +646,12 @@ typedef struct memory_list_s size_t count; /* number of items allocated */ } memory_list; -typedef struct identstruct_s -{ - char text[MAX_IDENTIFIER_LENGTH+1]; -} identstruct; +typedef struct brief_location_s +{ int32 file_index; + int32 line_number; + int32 orig_file_index; + int32 orig_line_number; +} brief_location; typedef struct assembly_operand_t { int type; /* ?_OT value */ @@ -684,8 +671,11 @@ typedef struct variableinfo_s { typedef struct verbt { int lines; - int *l; /* alloced array */ + int *l; /* alloced array of grammar line indexes + (positions in grammar_lines[]) */ int size; /* allocated size of l */ + brief_location line; /* originally defined at */ + int used; /* only set at locate_dead_grammar_lines() time */ } verbt; typedef struct actioninfo_s { @@ -776,6 +766,8 @@ typedef struct abbreviation_s { int value; int quality; int freq; + int textpos; /* in abbreviations_text */ + int textlen; } abbreviation; typedef struct maybe_file_position_S @@ -803,13 +795,6 @@ typedef struct debug_locations_s int reference_count; } debug_locations; -typedef struct brief_location_s -{ int32 file_index; - int32 line_number; - int32 orig_file_index; - int32 orig_line_number; -} brief_location; - typedef struct debug_location_beginning_s { debug_locations *head; int32 beginning_byte_index; @@ -820,7 +805,7 @@ typedef struct debug_location_beginning_s int32 orig_beg_char_number; } debug_location_beginning; -#define MAX_KEYWORD_GROUP_SIZE (119) +#define MAX_KEYWORD_GROUP_SIZE (159) typedef struct keyword_group_s { char *keywords[MAX_KEYWORD_GROUP_SIZE+1]; /* empty-string-terminated */ @@ -833,6 +818,7 @@ typedef struct lexeme_data_s { char *text; /* points at lextexts array */ int32 value; int type; /* a *_TT value */ + int newsymbol; /* (for SYMBOL_TT) this token created the symbol */ debug_location location; int lextext; /* index of text string in lextexts */ int context; /* lexical context used to interpret this token */ @@ -1008,6 +994,7 @@ typedef struct operator_s /* ------------------------------------------------------------------------- */ /* Internal numbers representing assemble-able Z-opcodes */ +/* (Must match opcodes_table_z[] and opcode_list_z[]) */ /* ------------------------------------------------------------------------- */ #define je_zc 0 @@ -1128,10 +1115,16 @@ typedef struct operator_s #define picture_table_zc 115 #define print_unicode_zc 116 #define check_unicode_zc 117 +#define set_true_colour_zc 118 +#define buffer_screen_zc 119 /* ------------------------------------------------------------------------- */ /* Internal numbers representing assemble-able Glulx opcodes */ +/* (Must match opcodes_table_g[] and opcode_list_g[]) */ +/* */ +/* This is not a complete list. It only needs to include opcodes that are */ +/* directly created by the compiler or listed in the operator tables. */ /* ------------------------------------------------------------------------- */ #define nop_gc 0 @@ -1221,35 +1214,6 @@ typedef struct operator_s #define mfree_gc 84 #define accelfunc_gc 85 #define accelparam_gc 86 -#define numtof_gc 87 -#define ftonumz_gc 88 -#define ftonumn_gc 89 -#define ceil_gc 90 -#define floor_gc 91 -#define fadd_gc 92 -#define fsub_gc 93 -#define fmul_gc 94 -#define fdiv_gc 95 -#define fmod_gc 96 -#define sqrt_gc 97 -#define exp_gc 98 -#define log_gc 99 -#define pow_gc 100 -#define sin_gc 101 -#define cos_gc 102 -#define tan_gc 103 -#define asin_gc 104 -#define acos_gc 105 -#define atan_gc 106 -#define atan2_gc 107 -#define jfeq_gc 108 -#define jfne_gc 109 -#define jflt_gc 110 -#define jfle_gc 111 -#define jfgt_gc 112 -#define jfge_gc 113 -#define jisnan_gc 114 -#define jisinf_gc 115 /* ------------------------------------------------------------------------- */ /* Index numbers into the keyword group "opcode_macros_g" (see "lexer.c") */ @@ -1257,14 +1221,27 @@ typedef struct operator_s #define pull_gm 0 #define push_gm 1 - - -#define SYMBOL_TT 0 /* value = index in symbol table */ -#define NUMBER_TT 1 /* value = the number */ -#define DQ_TT 2 /* no value */ -#define SQ_TT 3 /* no value */ -#define SEP_TT 4 /* value = the _SEP code */ -#define EOF_TT 5 /* no value */ +#define dload_gm 2 +#define dstore_gm 3 + + +#define SYMBOL_TT 0 /* symbol. + value = index in symbol table */ +#define NUMBER_TT 1 /* number (including hex, float, + etc). + value = the number */ +#define DQ_TT 2 /* double-quoted string. + no value; look at the text */ +#define SQ_TT 3 /* single-quoted string. + no value */ +#define UQ_TT 4 /* unquoted string; only when + dont_enter_into_symbol_table + is true. + no value */ +#define SEP_TT 5 /* separator (punctuation). + value = the _SEP code */ +#define EOF_TT 6 /* end of file. + no value */ #define STATEMENT_TT 100 /* a statement keyword */ #define SEGMENT_MARKER_TT 101 /* with/has/class etc. */ @@ -1311,22 +1288,25 @@ typedef struct operator_s /* Symbol flag definitions (in no significant order) */ /* ------------------------------------------------------------------------- */ -#define UNKNOWN_SFLAG 1 -#define REPLACE_SFLAG 2 -#define USED_SFLAG 4 -#define DEFCON_SFLAG 8 -#define STUB_SFLAG 16 -#define IMPORT_SFLAG 32 -#define EXPORT_SFLAG 64 -#define ALIASED_SFLAG 128 +#define UNKNOWN_SFLAG 1 /* no definition known */ +#define REPLACE_SFLAG 2 /* routine marked for Replace */ +#define USED_SFLAG 4 /* referred to in code */ +#define DEFCON_SFLAG 8 /* defined by Default */ +#define STUB_SFLAG 16 /* defined by Stub */ +#define UNHASHED_SFLAG 32 /* removed from hash chain */ +#define DISCARDED_SFLAG 64 /* removed and should never have been used */ +#define ALIASED_SFLAG 128 /* defined as property/attribute alias name */ -#define CHANGE_SFLAG 256 -#define SYSTEM_SFLAG 512 -#define INSF_SFLAG 1024 -#define UERROR_SFLAG 2048 -#define ACTION_SFLAG 4096 -#define REDEFINABLE_SFLAG 8192 -#define STAR_SFLAG 16384 +#define CHANGE_SFLAG 256 /* defined by Default with a value, + or symbol has a backpatchable value */ +#define SYSTEM_SFLAG 512 /* created by compiler */ +#define INSF_SFLAG 1024 /* created in System_File */ +#define UERROR_SFLAG 2048 /* "No such constant" error issued */ +#define ACTION_SFLAG 4096 /* action name constant (Foo_A) */ +#define REDEFINABLE_SFLAG 8192 /* built-in symbol that can be redefined + by the user */ +#define STAR_SFLAG 16384 /* function defined with "*" or property named + "foo_to" */ /* ------------------------------------------------------------------------- */ /* Symbol type definitions */ @@ -1941,7 +1921,8 @@ typedef struct operator_s #define MAIN_MV 10 /* "Main" routine */ #define SYMBOL_MV 11 /* Forward ref to unassigned symbol */ -/* Additional marker values used in module backpatch areas: */ +/* Additional marker values used in module backpatch areas (most are + obsolete). */ /* (In Glulx, OBJECT_MV and VARIABLE_MV are used in backpatching, even without modules.) */ @@ -1952,27 +1933,21 @@ typedef struct operator_s #define OBJECT_MV 16 /* Ref to internal object number */ #define STATIC_ARRAY_MV 17 /* Ref to internal static array address */ -#define LARGEST_BPATCH_MV 17 /* Larger marker values are never written +#define ERROR_MV 18 /* An error was reported while + generating this value */ +#define LARGEST_BPATCH_MV 18 /* Larger marker values are never written to backpatch tables */ -/* Value indicating an imported symbol record: */ - -#define IMPORT_MV 32 - -/* Values indicating an exported symbol record: */ - -#define EXPORT_MV 33 /* Defined ordinarily */ -#define EXPORTSF_MV 34 /* Defined in a system file */ -#define EXPORTAC_MV 35 /* Action name */ +/* Values 32-35 were used only for module import/export. */ /* Values used only in branch backpatching: */ -/* ###-I've rearranged these, so that BRANCH_MV can be last; Glulx uses the - whole range from BRANCH_MV to BRANCHMAX_MV. */ +/* BRANCH_MV must be last; Glulx uses the whole range from BRANCH_MV + to BRANCHMAX_MV. */ #define LABEL_MV 36 /* Ditto: marks "jump" operands */ #define DELETED_MV 37 /* Ditto: marks bytes deleted from code */ #define BRANCH_MV 38 /* Used in "asm.c" for routine coding */ -#define BRANCHMAX_MV 58 /* In fact, the range BRANCH_MV to +#define BRANCHMAX_MV 102 /* In fact, the range BRANCH_MV to BRANCHMAX_MV all means the same thing. The position within the range means how far back from the label to go @@ -2045,7 +2020,6 @@ extern void init_expressp_vars(void); /* expressp: parse expressions */ extern void init_files_vars(void); /* files: handle files */ /* void init_vars(void); inform: decide what to do */ extern void init_lexer_vars(void); /* lexer: lexically analyse source */ -extern void init_linker_vars(void); /* linker: link in pre-compiled module */ extern void init_memory_vars(void); /* memory: manage memory settings */ extern void init_objects_vars(void); /* objects: cultivate object tree */ extern void init_states_vars(void); /* states: translate statements to code*/ @@ -2070,7 +2044,6 @@ extern void expressp_begin_pass(void); extern void files_begin_pass(void); /* void begin_pass(void); */ extern void lexer_begin_pass(void); -extern void linker_begin_pass(void); extern void memory_begin_pass(void); extern void objects_begin_pass(void); extern void states_begin_pass(void); @@ -2082,7 +2055,6 @@ extern void veneer_begin_pass(void); extern void verbs_begin_pass(void); extern void lexer_endpass(void); -extern void linker_endpass(void); extern void arrays_allocate_arrays(void); extern void asm_allocate_arrays(void); @@ -2095,7 +2067,6 @@ extern void expressp_allocate_arrays(void); extern void files_allocate_arrays(void); /* void allocate_arrays(void); */ extern void lexer_allocate_arrays(void); -extern void linker_allocate_arrays(void); extern void memory_allocate_arrays(void); extern void objects_allocate_arrays(void); extern void states_allocate_arrays(void); @@ -2117,7 +2088,6 @@ extern void expressp_free_arrays(void); extern void files_free_arrays(void); /* void free_arrays(void); */ extern void lexer_free_arrays(void); -extern void linker_free_arrays(void); extern void memory_free_arrays(void); extern void objects_free_arrays(void); extern void states_free_arrays(void); @@ -2146,8 +2116,9 @@ extern memory_list static_array_area_memlist; extern int32 *global_initial_value; extern arrayinfo *arrays; -extern void make_global(int array_flag, int name_only); +extern void make_global(void); extern void set_variable_value(int i, int32 v); +extern void make_array(void); extern void check_globals(void); extern int32 begin_table_array(void); extern int32 begin_word_array(void); @@ -2166,7 +2137,7 @@ extern int32 no_instructions; extern int sequence_point_follows; extern int uses_unicode_features, uses_memheap_features, uses_acceleration_features, uses_float_features, - uses_extundo_features; + uses_extundo_features, uses_double_features; extern debug_location statement_debug_location; extern int execution_never_reaches_here; extern variableinfo *variables; @@ -2186,7 +2157,7 @@ extern void assemble_label_no(int n); extern int assemble_forward_label_no(int n); extern void assemble_jump(int n); extern void define_symbol_label(int symbol); -extern int32 assemble_routine_header(int no_locals, int debug_flag, +extern int32 assemble_routine_header(int debug_flag, char *name, int embedded_flag, int the_symbol); extern void assemble_routine_end(int embedded_flag, debug_locations locations); @@ -2291,6 +2262,9 @@ extern int32 zcode_backpatch_size, staticarray_backpatch_size, zmachine_backpatch_size; extern int backpatch_marker, backpatch_error_flag; +extern char *describe_mv(int mval); +extern char *describe_mv_short(int mval); + extern int32 backpatch_value(int32 value); extern void backpatch_zmachine_image_z(void); extern void backpatch_zmachine_image_g(void); @@ -2332,7 +2306,7 @@ extern void make_upper_case(char *str); extern brief_location routine_starts_line; -extern int no_routines, no_named_routines, no_locals, no_termcs; +extern int no_routines, no_named_routines, no_termcs; extern int terminating_characters[]; extern int parse_given_directive(int internal_flag); @@ -2344,37 +2318,40 @@ extern int parse_given_directive(int internal_flag); #define FORERRORS_SIZE (512) extern char *forerrors_buff; extern int forerrors_pointer; -extern int no_errors, no_warnings, no_suppressed_warnings, - no_link_errors, no_compiler_errors; +extern int no_errors, no_warnings, no_suppressed_warnings, no_compiler_errors; extern ErrorPosition ErrorReport; extern void fatalerror(char *s) NORETURN; +extern void fatalerror_fmt(const char *format, ...) NORETURN; extern void fatalerror_named(char *s1, char *s2) NORETURN; -extern void memory_out_error(int32 size, int32 howmany, char *name) NORETURN; -extern void error_max_dynamic_strings(int index); -extern void error_max_abbreviations(int index); +extern void fatalerror_memory_out(int32 size, int32 howmany, char *name) NORETURN; + extern void error(char *s); +extern void error_fmt(const char *format, ...); extern void error_named(char *s1, char *s2); -extern void error_numbered(char *s1, int val); extern void error_named_at(char *s1, char *s2, brief_location report_line); extern void ebf_error(char *s1, char *s2); +extern void ebf_curtoken_error(char *s); extern void ebf_symbol_error(char *s1, char *name, char *type, brief_location report_line); extern void char_error(char *s, int ch); extern void unicode_char_error(char *s, int32 uni); -extern void no_such_label(char *lname); +extern void error_max_dynamic_strings(int index); +extern void error_max_abbreviations(int index); + extern void warning(char *s); -extern void warning_numbered(char *s1, int val); +extern void warning_fmt(const char *format, ...); extern void warning_named(char *s1, char *s2); +extern void warning_at(char *name, brief_location report_line); extern void symtype_warning(char *context, char *name, char *type, char *wanttype); extern void dbnu_warning(char *type, char *name, brief_location report_line); extern void uncalled_routine_warning(char *type, char *name, brief_location report_line); extern void obsolete_warning(char *s1); -extern void link_error(char *s); -extern void link_error_named(char *s1, char *s2); + extern int compiler_error(char *s); extern int compiler_error_named(char *s1, char *s2); extern void print_sorry_message(void); +extern char *current_location_text(void); #ifdef ARC_THROWBACK extern int throwback_switch; @@ -2412,9 +2389,10 @@ extern int glulx_system_constant_list[]; extern int32 value_of_system_constant(int t); extern char *name_of_system_constant(int t); extern void clear_expression_space(void); -extern void show_tree(assembly_operand AO, int annotate); +extern void show_tree(const assembly_operand *AO, int annotate); extern assembly_operand parse_expression(int context); extern int test_for_incdec(assembly_operand AO); +extern int test_constant_op_list(const assembly_operand *AO, assembly_operand *ops_found, int max_ops_found); /* ------------------------------------------------------------------------- */ /* Extern definitions for "files" */ @@ -2486,8 +2464,7 @@ extern int WORDSIZE, INDIV_PROP_START, OBJECT_BYTE_LENGTH, DICT_ENTRY_BYTE_LENGTH, DICT_ENTRY_FLAG_POS; extern int32 MAXINTWORD; -extern int asm_trace_level, expr_trace_level, - linker_trace_level, tokens_trace_level; +extern int asm_trace_level, expr_trace_level, tokens_trace_level; extern int concise_switch, @@ -2498,8 +2475,8 @@ extern int obsolete_switch, optabbrevs_trace_setting, transcript_switch, statistics_switch, optimise_switch, version_set_switch, nowarnings_switch, hash_switch, - memory_map_setting, module_switch, - define_DEBUG_switch, define_USE_MODULES_switch, define_INFIX_switch, + memory_map_setting, + define_DEBUG_switch, define_INFIX_switch, runtime_error_checking_switch, list_verbs_setting, list_dict_setting, list_objects_setting, list_symbols_setting; @@ -2507,10 +2484,10 @@ extern int extern int oddeven_packing_switch; extern int glulx_mode, compression_switch; -extern int32 requested_glulx_version; +extern int32 requested_glulx_version, final_glulx_version; extern int error_format, store_the_text, asm_trace_setting, - expr_trace_setting, linker_trace_setting, tokens_trace_setting, + expr_trace_setting, tokens_trace_setting, bpatch_trace_setting, symdef_trace_setting, double_space_setting, trace_fns_setting, character_set_setting, character_set_unicode; @@ -2527,8 +2504,6 @@ extern void switches(char *, int); extern int translate_in_filename(int last_value, char *new_name, char *old_name, int same_directory_flag, int command_line_flag); extern void translate_out_filename(char *new_name, char *old_name); -extern int translate_link_filename(int last_value, - char *new_name, char *old_name); #ifdef ARCHIMEDES extern char *riscos_file_type(void); @@ -2549,7 +2524,8 @@ extern int total_source_line_count; extern int dont_enter_into_symbol_table; extern int return_sp_as_variable; extern int next_token_begins_syntax_line; -extern identstruct *local_variable_names; +extern int no_locals; +extern int *local_variable_name_offsets; extern int32 token_value; extern int token_type; @@ -2562,10 +2538,15 @@ extern void discard_token_location(debug_location_beginning beginning); extern debug_locations get_token_location_end(debug_location_beginning beginning); extern void describe_token_triple(const char *text, int32 value, int type); +#define describe_current_token() describe_token_triple(token_text, token_value, token_type) /* The describe_token() macro works on both token_data and lexeme_data structs. */ #define describe_token(t) describe_token_triple((t)->text, (t)->value, (t)->type) extern void construct_local_variable_tables(void); +extern void clear_local_variables(void); +extern void add_local_variable(char *name); +extern char *get_local_variable_name(int index); + extern void declare_systemfile(void); extern int is_systemfile(void); extern void report_errors_at_current_line(void); @@ -2587,23 +2568,6 @@ extern keyword_group directives, statements, segment_markers, misc_keywords, directive_keywords, trace_keywords, system_constants, opcode_macros; -/* ------------------------------------------------------------------------- */ -/* Extern definitions for "linker" */ -/* ------------------------------------------------------------------------- */ - -extern uchar *link_data_area; -extern int32 link_data_size; -extern char current_module_filename[]; - -extern char *describe_mv(int mval); -extern void write_link_marker(int zmachine_area, int32 offset, - assembly_operand op); -extern void flush_link_data(void); -extern void import_symbol(int32 symbol_number); -extern void export_symbol(int32 symbol_number); -extern void export_symbol_name(int32 i); -extern void link_module(char *filename); - /* ------------------------------------------------------------------------- */ /* Extern definitions for "memory" */ /* ------------------------------------------------------------------------- */ @@ -2620,9 +2584,12 @@ extern int MAX_LOCAL_VARIABLES; extern int DICT_WORD_SIZE, DICT_CHAR_SIZE, DICT_WORD_BYTES; extern int ZCODE_HEADER_EXT_WORDS, ZCODE_HEADER_FLAGS_3; extern int ZCODE_LESS_DICT_DATA; +extern int ZCODE_MAX_INLINE_STRING; extern int NUM_ATTR_BYTES, GLULX_OBJECT_EXT_BYTES; extern int WARN_UNUSED_ROUTINES, OMIT_UNUSED_ROUTINES; extern int STRIP_UNREACHABLE_LABELS; +extern int OMIT_SYMBOL_TABLE; +extern int LONG_DICT_FLAG_BUG; extern int TRANSCRIPT_FORMAT; /* These macros define offsets that depend on the value of NUM_ATTR_BYTES. @@ -2705,8 +2672,8 @@ extern char *typename(int type); extern int hash_code_from_string(char *p); extern int strcmpcis(char *p, char *q); extern int get_symbol_index(char *p); -extern int symbol_index(char *lexeme_text, int hashcode); -extern void end_symbol_scope(int k); +extern int symbol_index(char *lexeme_text, int hashcode, int *created); +extern void end_symbol_scope(int k, int neveruse); extern void describe_symbol(int k); extern void list_symbols(int level); extern void assign_marked_symbol(int index, int marker, int32 value, int type); @@ -2749,6 +2716,7 @@ extern void parse_code_block(int break_label, int continue_label, extern void match_close_bracket(void); extern void parse_statement(int break_label, int continue_label); +extern void parse_statement_singleexpr(assembly_operand AO); extern int parse_label(void); /* ------------------------------------------------------------------------- */ @@ -2793,7 +2761,6 @@ extern int32 low_strings_top; extern int no_abbreviations; extern int abbrevs_lookup_table_made, is_abbreviation; -extern uchar *abbreviations_at; extern abbreviation *abbreviations; extern int32 total_chars_trans, total_bytes_trans, @@ -2861,6 +2828,7 @@ extern int32 compile_string(char *b, int strctx); extern int32 translate_text(int32 p_limit, char *s_text, int strctx); extern void optimise_abbreviations(void); extern void make_abbreviation(char *text); +extern char *abbreviation_text(int num); extern void show_dictionary(int level); extern void word_to_ascii(uchar *p, char *result); extern void print_dict_word(int node); @@ -2903,6 +2871,7 @@ extern int32 *grammar_token_routine, extern void find_the_actions(void); extern void make_fake_action(void); extern assembly_operand action_of_name(char *name); +extern void locate_dead_grammar_lines(void); extern void make_verb(void); extern void extend_verb(void); extern void list_verb_table(void);