X-Git-Url: https://jxself.org/git/?p=inform.git;a=blobdiff_plain;f=src%2Fstates.c;fp=src%2Fstates.c;h=b569fb26cd933e66974fd551aaa5b7e4460b8766;hp=3f0e8740a09a85b90266f8d603a2e1a74fc816e4;hb=d8d68d0bd4c45af6f0dc69b4fc33d37d961aca85;hpb=c881aa3386c00d7021ffabf2f66275d6c110c1c1 diff --git a/src/states.c b/src/states.c index 3f0e874..b569fb2 100644 --- a/src/states.c +++ b/src/states.c @@ -308,7 +308,7 @@ static void parse_print_z(int finally_return) if (strlen(token_text) > 32) { INITAOT(&AO, LONG_CONSTANT_OT); AO.marker = STRING_MV; - AO.value = compile_string(token_text, FALSE, FALSE); + AO.value = compile_string(token_text, STRCTX_GAME); assemblez_1(print_paddr_zc, AO); if (finally_return) { get_next_token(); @@ -537,7 +537,7 @@ static void parse_print_g(int finally_return) so this always goes into the string area. */ { INITAOT(&AO, CONSTANT_OT); AO.marker = STRING_MV; - AO.value = compile_string(token_text, FALSE, FALSE); + AO.value = compile_string(token_text, STRCTX_GAME); assembleg_1(streamstr_gc, AO); if (finally_return) { get_next_token(); @@ -974,6 +974,10 @@ static void parse_statement_z(int break_label, int continue_label) get_next_token(); /* Initialisation code */ + AO.type = OMITTED_OT; + spare_debug_location1 = statement_debug_location; + AO2.type = OMITTED_OT; flag = 0; + spare_debug_location2 = statement_debug_location; if (!((token_type==SEP_TT)&&(token_value==COLON_SEP))) { put_token_back(); @@ -996,7 +1000,6 @@ static void parse_statement_z(int break_label, int continue_label) assemble_label_no(ln2); return; } - AO.type = OMITTED_OT; goto ParseUpdate; } put_token_back(); @@ -1004,7 +1007,6 @@ static void parse_statement_z(int break_label, int continue_label) } get_next_token(); - AO.type = OMITTED_OT; if (!((token_type==SEP_TT)&&(token_value==COLON_SEP))) { put_token_back(); spare_debug_location1 = get_token_location(); @@ -1014,7 +1016,6 @@ static void parse_statement_z(int break_label, int continue_label) get_next_token(); ParseUpdate: - AO2.type = OMITTED_OT; flag = 0; if (!((token_type==SEP_TT)&&(token_value==CLOSEB_SEP))) { put_token_back(); spare_debug_location2 = get_token_location(); @@ -1609,7 +1610,9 @@ static void parse_statement_z(int break_label, int continue_label) get_next_token(); if (token_type == DQ_TT) { INITAOT(&AO4, LONG_CONSTANT_OT); - AO4.value = compile_string(token_text, TRUE, TRUE); + /* This string must be in low memory so that the + dynamic string table can refer to it. */ + AO4.value = compile_string(token_text, STRCTX_LOWSTRING); } else { put_token_back(); @@ -1932,6 +1935,10 @@ static void parse_statement_g(int break_label, int continue_label) get_next_token(); /* Initialisation code */ + AO.type = OMITTED_OT; + spare_debug_location1 = statement_debug_location; + AO2.type = OMITTED_OT; flag = 0; + spare_debug_location2 = statement_debug_location; if (!((token_type==SEP_TT)&&(token_value==COLON_SEP))) { put_token_back(); @@ -1954,7 +1961,6 @@ static void parse_statement_g(int break_label, int continue_label) assemble_label_no(ln2); return; } - AO.type = OMITTED_OT; goto ParseUpdate; } put_token_back(); @@ -1962,7 +1968,6 @@ static void parse_statement_g(int break_label, int continue_label) } get_next_token(); - AO.type = OMITTED_OT; if (!((token_type==SEP_TT)&&(token_value==COLON_SEP))) { put_token_back(); spare_debug_location1 = get_token_location(); @@ -1972,7 +1977,6 @@ static void parse_statement_g(int break_label, int continue_label) get_next_token(); ParseUpdate: - AO2.type = OMITTED_OT; flag = 0; if (!((token_type==SEP_TT)&&(token_value==CLOSEB_SEP))) { put_token_back(); spare_debug_location2 = get_token_location(); @@ -2546,7 +2550,10 @@ static void parse_statement_g(int break_label, int continue_label) get_next_token(); if (token_type == DQ_TT) { INITAOT(&AO4, CONSTANT_OT); - AO4.value = compile_string(token_text, TRUE, TRUE); + /* This is not actually placed in low memory; Glulx + has no such concept. We use the LOWSTRING flag + for compatibility with older compiler behavior. */ + AO4.value = compile_string(token_text, STRCTX_LOWSTRING); AO4.marker = STRING_MV; } else