@@ -1849,7 +1849,12 @@ char *comp_array_params(char *src, char exitChar) {
18491849 * se = '\0' ;
18501850 bc_add_code (& comp_prog , kwTYPE_LEVEL_BEGIN );
18511851 comp_expression (ss , 0 );
1852- bc_store1 (& comp_prog , comp_prog .count - 1 , kwTYPE_LEVEL_END );
1852+ // overwrite kwTYPE_EOC with kwTYPE_LEVEL_END
1853+ if (!bc_pop_eoc (& comp_prog )) {
1854+ sc_raise (ERR_UNSUPPORTED );
1855+ }
1856+ bc_add_code (& comp_prog , kwTYPE_LEVEL_END );
1857+ comp_prog .eoc_position = 0 ;
18531858 * ss = ssSave ;
18541859 * se = seSave ;
18551860 ss = se = NULL ;
@@ -2812,6 +2817,24 @@ int comp_text_line_command(bid_t idx, int decl, int sharp, char *last_cmd) {
28122817 return result ;
28132818}
28142819
2820+ void add_line_no () {
2821+ if (comp_prog .line_position == 0 ||
2822+ comp_prog .line_position != (comp_prog .count - KW_TYPE_LINE_BYTES )) {
2823+ // not an adjoining kwTYPE_LINE
2824+ if (!opt_autolocal && comp_prog .eoc_position == comp_prog .count - 1 ) {
2825+ // overwrite any adjoining kwTYPE_EOC (can't do this with autolocal)
2826+ if (!bc_pop_eoc (& comp_prog )) {
2827+ sc_raise (ERR_UNSUPPORTED );
2828+ }
2829+ }
2830+
2831+ // prevent adjoining kwTYPE_LINEs
2832+ comp_prog .line_position = comp_prog .count ;
2833+ bc_add_code (& comp_prog , kwTYPE_LINE );
2834+ bc_add_addr (& comp_prog , comp_line );
2835+ }
2836+ }
2837+
28152838/*
28162839 * Pass 1: scan source line
28172840 */
@@ -2870,20 +2893,7 @@ void comp_text_line(char *text, int addLineNo) {
28702893 return ;
28712894 }
28722895 if (addLineNo ) {
2873- // add debug info: line-number
2874- if (comp_prog .line_position == 0 ||
2875- comp_prog .line_position != (comp_prog .count - KW_TYPE_LINE_BYTES )) {
2876- // not an adjoining kwTYPE_LINE
2877- if (!opt_autolocal && comp_prog .eoc_position == comp_prog .count - 1 ) {
2878- // overwrite any adjoining kwTYPE_EOC (can't do this with autolocal)
2879- comp_prog .count -- ;
2880- }
2881- // prevent kwTYPE_EOC from being appended to this kwTYPE_LINE
2882- comp_prog .eoc_position = comp_prog .count ;
2883- comp_prog .line_position = comp_prog .count ;
2884- bc_add_code (& comp_prog , kwTYPE_LINE );
2885- bc_add_addr (& comp_prog , comp_line );
2886- }
2896+ add_line_no ();
28872897 }
28882898 if (idx == -1 ) {
28892899 idx = comp_is_proc (comp_bc_name );
@@ -3719,13 +3729,15 @@ bcip_t comp_optimise_let(bcip_t ip, byte kw_opr, char sep, byte opt_kw) {
37193729 bcip_t ip_next = ip + 1 ;
37203730 if (comp_prog .ptr [ip_next ] == kwTYPE_VAR ) {
37213731 ip_next += 1 + sizeof (bcip_t );
3722- while (ip_next < comp_prog .count && comp_prog .ptr [ip_next ] != kwTYPE_EOC ) {
3732+ while (ip_next < comp_prog .count && comp_prog .ptr [ip_next ] != kwTYPE_EOC
3733+ && comp_prog .ptr [ip_next ] != kwTYPE_LINE ) {
37233734 if (comp_prog .ptr [ip_next ] == kw_opr &&
37243735 comp_prog .ptr [ip_next + 1 ] == sep ) {
37253736 ip_next += 2 ;
37263737 if (ip_next < comp_prog .count &&
37273738 comp_prog .ptr [ip_next ] == kwTYPE_VAR &&
3728- comp_prog .ptr [ip_next + 1 + sizeof (bcip_t )] == kwTYPE_EOC ) {
3739+ (comp_prog .ptr [ip_next + 1 + sizeof (bcip_t )] == kwTYPE_EOC ||
3740+ comp_prog .ptr [ip_next + 1 + sizeof (bcip_t )] == kwTYPE_LINE )) {
37293741 comp_prog .ptr [ip ] = opt_kw ;
37303742 ip = ip_next ;
37313743 }
0 commit comments