texlive[62021] Build/source/texk/web2c: [CWEB] Add '#line' after
commits+ascherer at tug.org
commits+ascherer at tug.org
Mon Feb 14 17:00:50 CET 2022
Revision: 62021
http://tug.org/svn/texlive?view=revision&revision=62021
Author: ascherer
Date: 2022-02-14 17:00:50 +0100 (Mon, 14 Feb 2022)
Log Message:
-----------
[CWEB] Add '#line' after '#endif'.
Some people incorporate '@<Section code@>' in preprocessor #if-blocks.
(AFAIKS, DEK did this exactly _once_ in his 'reflect.w' example code,
but never in any larger system program.) This adds material (lines of
code) in the ctangle'd C code wrapped in '#line' directives for the
benefit of the compiler/debugger/w.h.y. Depending on the #if-condition,
the #line directives in the #if-block get eliminated and the resulting
status from previous #line directives kicks the compiler (__LINE__ and
possibly __FILE__) and the debugger (e.g., gdb, MSVS) off the track.
Modified Paths:
--------------
trunk/Build/source/texk/web2c/ChangeLog
trunk/Build/source/texk/web2c/ctangleboot.cin
trunk/Build/source/texk/web2c/cwebdir/ChangeLog
trunk/Build/source/texk/web2c/cwebdir/common.c
trunk/Build/source/texk/web2c/cwebdir/ctangle.c
trunk/Build/source/texk/web2c/cwebdir/ctangle.w
Modified: trunk/Build/source/texk/web2c/ChangeLog
===================================================================
--- trunk/Build/source/texk/web2c/ChangeLog 2022-02-14 15:54:19 UTC (rev 62020)
+++ trunk/Build/source/texk/web2c/ChangeLog 2022-02-14 16:00:50 UTC (rev 62021)
@@ -1,3 +1,7 @@
+2022-02-14 Andreas Scherer <https://ascherer.github.io>
+
+ * ctangleboot.bin: Add '#line' after '#endif'.
+
2022-02-11 Andreas Scherer <https://ascherer.github.io>
* weave.ch: Fix spacing in math expression.
Modified: trunk/Build/source/texk/web2c/ctangleboot.cin
===================================================================
--- trunk/Build/source/texk/web2c/ctangleboot.cin 2022-02-14 15:54:19 UTC (rev 62020)
+++ trunk/Build/source/texk/web2c/ctangleboot.cin 2022-02-14 16:00:50 UTC (rev 62021)
@@ -459,15 +459,15 @@
static void scan_repl(eight_bits);
/*:84*//*91:*/
-#line 1404 "cwebdir/ctangle.w"
+#line 1408 "cwebdir/ctangle.w"
static void scan_section(void);
/*:91*//*99:*/
-#line 1481 "cwebdir/ctangle.w"
+#line 1485 "cwebdir/ctangle.w"
static void phase_one(void);
/*:99*//*101:*/
-#line 1514 "cwebdir/ctangle.w"
+#line 1518 "cwebdir/ctangle.w"
static void skip_limbo(void);
/*:101*/
@@ -1595,11 +1595,34 @@
/*86:*/
#line 1244 "cwebdir/ctangle.w"
-case identifier:store_id(a);break;
+case identifier:store_id(a);
+if(*buffer=='#'&&id_first==buffer+1&&id_loc-id_first==5
+&&strncmp("endif",id_first,5)==0)
+/*85:*/
+#line 1229 "cwebdir/ctangle.w"
+
+{
+eight_bits a;
+store_two_bytes(0150000);
+if(changing&&include_depth==change_depth){
+id_first= change_file_name;
+store_two_bytes((sixteen_bits)change_line);
+}else{
+id_first= cur_file_name;
+store_two_bytes((sixteen_bits)cur_line);
+}
+id_loc= id_first+strlen(id_first);
+store_id(a);
+}
+
+/*:85*/
+#line 1248 "cwebdir/ctangle.w"
+
+break;
case section_name:if(t!=section_name)goto done;
else{
/*87:*/
-#line 1278 "cwebdir/ctangle.w"
+#line 1282 "cwebdir/ctangle.w"
{
char*try_loc= loc;
while(*try_loc==' '&&try_loc<limit)try_loc++;
@@ -1607,7 +1630,7 @@
while(*try_loc==' '&&try_loc<limit)try_loc++;
#line 294 "cwebdir/ctang-w2c.ch"
if(*try_loc=='=')err_print(_("! Missing `@ ' before a named section"));
-#line 1284 "cwebdir/ctangle.w"
+#line 1288 "cwebdir/ctangle.w"
@@ -1614,7 +1637,7 @@
}
/*:87*/
-#line 1248 "cwebdir/ctangle.w"
+#line 1252 "cwebdir/ctangle.w"
a= cur_section_name-name_dir;
app_repl((a/0400)+0250);
@@ -1637,13 +1660,13 @@
}
/*:85*/
-#line 1252 "cwebdir/ctangle.w"
+#line 1256 "cwebdir/ctangle.w"
}
break;
#line 282 "cwebdir/ctang-w2c.ch"
case output_defs_code:if(t!=section_name)err_print(_("! Misplaced @h"));
-#line 1256 "cwebdir/ctangle.w"
+#line 1260 "cwebdir/ctangle.w"
else{
output_defs_seen= true;
@@ -1668,13 +1691,13 @@
}
/*:85*/
-#line 1262 "cwebdir/ctangle.w"
+#line 1266 "cwebdir/ctangle.w"
}
break;
case constant:case string:
/*88:*/
-#line 1295 "cwebdir/ctangle.w"
+#line 1299 "cwebdir/ctangle.w"
app_repl(a);
while(id_first<id_loc){
@@ -1682,7 +1705,7 @@
if(*(id_first+1)=='@')id_first++;
#line 300 "cwebdir/ctang-w2c.ch"
else err_print(_("! Double @ should be used in string"));
-#line 1301 "cwebdir/ctangle.w"
+#line 1305 "cwebdir/ctangle.w"
}
else if(a==constant&&*id_first=='\''&&!keep_digit_separators)
@@ -1692,12 +1715,12 @@
app_repl(a);
/*:88*/
-#line 1266 "cwebdir/ctangle.w"
+#line 1270 "cwebdir/ctangle.w"
break;
case ord:
/*89:*/
-#line 1313 "cwebdir/ctangle.w"
+#line 1317 "cwebdir/ctangle.w"
{
int c= (int)((eight_bits)*id_first);
if(c=='\\'){
@@ -1736,7 +1759,7 @@
case'\"':c= '\"';break;
#line 306 "cwebdir/ctang-w2c.ch"
default:err_print(_("! Unrecognized escape sequence"));
-#line 1350 "cwebdir/ctangle.w"
+#line 1354 "cwebdir/ctangle.w"
}
}
@@ -1749,7 +1772,7 @@
}
/*:89*/
-#line 1269 "cwebdir/ctangle.w"
+#line 1273 "cwebdir/ctangle.w"
break;
case definition:case format_code:case begin_C:if(t!=section_name)goto done;
@@ -1756,7 +1779,7 @@
else{
#line 288 "cwebdir/ctang-w2c.ch"
err_print(_("! @d, @f and @c are ignored in C text"));continue;
-#line 1274 "cwebdir/ctangle.w"
+#line 1278 "cwebdir/ctangle.w"
}
case new_section:goto done;
@@ -1777,7 +1800,7 @@
}
/*:83*//*90:*/
-#line 1371 "cwebdir/ctangle.w"
+#line 1375 "cwebdir/ctangle.w"
static void
scan_section(void)
@@ -1792,7 +1815,7 @@
next_control= ignore;
while(true){
/*92:*/
-#line 1412 "cwebdir/ctangle.w"
+#line 1416 "cwebdir/ctangle.w"
while(next_control<definition)
@@ -1801,17 +1824,17 @@
}
/*:92*/
-#line 1385 "cwebdir/ctangle.w"
+#line 1389 "cwebdir/ctangle.w"
if(next_control==definition){
/*93:*/
-#line 1419 "cwebdir/ctangle.w"
+#line 1423 "cwebdir/ctangle.w"
while((next_control= get_next())=='\n');
if(next_control!=identifier){
#line 312 "cwebdir/ctang-w2c.ch"
err_print(_("! Definition flushed, must start with identifier"));
-#line 1423 "cwebdir/ctangle.w"
+#line 1427 "cwebdir/ctangle.w"
continue;
}
@@ -1823,7 +1846,7 @@
cur_text->text_link= macro;
/*:93*/
-#line 1387 "cwebdir/ctangle.w"
+#line 1391 "cwebdir/ctangle.w"
continue;
}
@@ -1833,7 +1856,7 @@
if(next_control==section_name){
p= cur_section_name;
/*94:*/
-#line 1441 "cwebdir/ctangle.w"
+#line 1445 "cwebdir/ctangle.w"
while((next_control= get_next())=='+');
if(next_control!='='&&next_control!=eq_eq)
@@ -1840,7 +1863,7 @@
continue;
/*:94*/
-#line 1395 "cwebdir/ctangle.w"
+#line 1399 "cwebdir/ctangle.w"
break;
}
@@ -1848,20 +1871,20 @@
}
no_where= print_where= false;
/*95:*/
-#line 1446 "cwebdir/ctangle.w"
+#line 1450 "cwebdir/ctangle.w"
/*96:*/
-#line 1451 "cwebdir/ctangle.w"
+#line 1455 "cwebdir/ctangle.w"
store_two_bytes((sixteen_bits)(0150000+section_count));
/*:96*/
-#line 1447 "cwebdir/ctangle.w"
+#line 1451 "cwebdir/ctangle.w"
scan_repl(section_name);
/*97:*/
-#line 1455 "cwebdir/ctangle.w"
+#line 1459 "cwebdir/ctangle.w"
if(p==name_dir||p==NULL){
last_unnamed->text_link= cur_text-text_info;last_unnamed= cur_text;
@@ -1878,16 +1901,16 @@
/*:97*/
-#line 1449 "cwebdir/ctangle.w"
+#line 1453 "cwebdir/ctangle.w"
/*:95*/
-#line 1401 "cwebdir/ctangle.w"
+#line 1405 "cwebdir/ctangle.w"
}
/*:90*//*98:*/
-#line 1470 "cwebdir/ctangle.w"
+#line 1474 "cwebdir/ctangle.w"
static void
phase_one(void){
@@ -1900,7 +1923,7 @@
}
/*:98*//*100:*/
-#line 1486 "cwebdir/ctangle.w"
+#line 1490 "cwebdir/ctangle.w"
static void
skip_limbo(void)
@@ -1914,7 +1937,7 @@
switch(ccode[(eight_bits)c]){
case new_section:return;
case translit_code:/*102:*/
-#line 1516 "cwebdir/ctangle.w"
+#line 1520 "cwebdir/ctangle.w"
while(xisspace(*loc)&&loc<limit)loc++;
loc+= 3;
@@ -1922,7 +1945,7 @@
||(*(loc-3)>='0'&&*(loc-3)<='7')||!xisspace(*(loc-1)))
#line 330 "cwebdir/ctang-w2c.ch"
err_print(_("! Improper hex number following @l"));
-#line 1522 "cwebdir/ctangle.w"
+#line 1526 "cwebdir/ctangle.w"
else{
unsigned int i;
@@ -1934,7 +1957,7 @@
if(loc-beg>=translit_length)
#line 336 "cwebdir/ctang-w2c.ch"
err_print(_("! Replacement string in @l too long"));
-#line 1532 "cwebdir/ctangle.w"
+#line 1536 "cwebdir/ctangle.w"
else{
strncpy(translit[i-0200],beg,(size_t)(loc-beg));
@@ -1943,7 +1966,7 @@
}
/*:102*/
-#line 1498 "cwebdir/ctangle.w"
+#line 1502 "cwebdir/ctangle.w"
break;
case format_code:case'@':break;
case control_text:if(c=='q'||c=='Q'){
@@ -1951,13 +1974,13 @@
if(*(loc-1)!='>')
#line 318 "cwebdir/ctang-w2c.ch"
err_print(_("! Double @ should be used in control text"));
-#line 1504 "cwebdir/ctangle.w"
+#line 1508 "cwebdir/ctangle.w"
break;
}
#line 324 "cwebdir/ctang-w2c.ch"
default:err_print(_("! Double @ should be used in limbo"));
-#line 1508 "cwebdir/ctangle.w"
+#line 1512 "cwebdir/ctangle.w"
}
}
@@ -1965,7 +1988,7 @@
}
/*:100*//*103:*/
-#line 1542 "cwebdir/ctangle.w"
+#line 1546 "cwebdir/ctangle.w"
void
print_stats(void){
@@ -1978,7 +2001,7 @@
printf(_("%td bytes (out of %ld)\n"),
(ptrdiff_t)(byte_ptr-byte_mem),(long)max_bytes);
printf(_("%td tokens (out of %ld)\n"),
-#line 1553 "cwebdir/ctangle.w"
+#line 1557 "cwebdir/ctangle.w"
(ptrdiff_t)(tok_ptr-tok_mem),(long)max_toks);
}
Modified: trunk/Build/source/texk/web2c/cwebdir/ChangeLog
===================================================================
--- trunk/Build/source/texk/web2c/cwebdir/ChangeLog 2022-02-14 15:54:19 UTC (rev 62020)
+++ trunk/Build/source/texk/web2c/cwebdir/ChangeLog 2022-02-14 16:00:50 UTC (rev 62021)
@@ -1,3 +1,9 @@
+2022-02-14 Andreas Scherer <https://ascherer.github.io>
+
+ * common.c,
+ * ctangle.c,
+ * ctangle.w: Add '#line' after '#endif'.
+
2022-02-10 Andreas Scherer <https://ascherer.github.io>
* ctwimac.tex: Add silent \datecontentspage macro.
Modified: trunk/Build/source/texk/web2c/cwebdir/common.c
===================================================================
--- trunk/Build/source/texk/web2c/cwebdir/common.c 2022-02-14 15:54:19 UTC (rev 62020)
+++ trunk/Build/source/texk/web2c/cwebdir/common.c 2022-02-14 16:00:50 UTC (rev 62021)
@@ -733,7 +733,9 @@
strcpy(temp_file_name,CWEBINPUTS);
#else
l= 0;
-#endif
+#endif
+#line 475 "common.w"
+
}
if(l> 0){
if(k+l+2>=cur_file_name_end)too_long();
Modified: trunk/Build/source/texk/web2c/cwebdir/ctangle.c
===================================================================
--- trunk/Build/source/texk/web2c/cwebdir/ctangle.c 2022-02-14 15:54:19 UTC (rev 62020)
+++ trunk/Build/source/texk/web2c/cwebdir/ctangle.c 2022-02-14 16:00:50 UTC (rev 62021)
@@ -434,15 +434,15 @@
static void scan_repl(eight_bits);
/*:84*//*91:*/
-#line 1404 "ctangle.w"
+#line 1408 "ctangle.w"
static void scan_section(void);
/*:91*//*99:*/
-#line 1481 "ctangle.w"
+#line 1485 "ctangle.w"
static void phase_one(void);
/*:99*//*101:*/
-#line 1514 "ctangle.w"
+#line 1518 "ctangle.w"
static void skip_limbo(void);
/*:101*/
@@ -1281,11 +1281,34 @@
/*86:*/
#line 1244 "ctangle.w"
-case identifier:store_id(a);break;
+case identifier:store_id(a);
+if(*buffer=='#'&&id_first==buffer+1&&id_loc-id_first==5
+&&strncmp("endif",id_first,5)==0)
+/*85:*/
+#line 1229 "ctangle.w"
+
+{
+eight_bits a;
+store_two_bytes(0150000);
+if(changing&&include_depth==change_depth){
+id_first= change_file_name;
+store_two_bytes((sixteen_bits)change_line);
+}else{
+id_first= cur_file_name;
+store_two_bytes((sixteen_bits)cur_line);
+}
+id_loc= id_first+strlen(id_first);
+store_id(a);
+}
+
+/*:85*/
+#line 1248 "ctangle.w"
+
+break;
case section_name:if(t!=section_name)goto done;
else{
/*87:*/
-#line 1278 "ctangle.w"
+#line 1282 "ctangle.w"
{
char*try_loc= loc;
while(*try_loc==' '&&try_loc<limit)try_loc++;
@@ -1298,7 +1321,7 @@
}
/*:87*/
-#line 1248 "ctangle.w"
+#line 1252 "ctangle.w"
a= cur_section_name-name_dir;
app_repl((a/0400)+0250);
@@ -1321,7 +1344,7 @@
}
/*:85*/
-#line 1252 "ctangle.w"
+#line 1256 "ctangle.w"
}
break;
@@ -1350,13 +1373,13 @@
}
/*:85*/
-#line 1262 "ctangle.w"
+#line 1266 "ctangle.w"
}
break;
case constant:case string:
/*88:*/
-#line 1295 "ctangle.w"
+#line 1299 "ctangle.w"
app_repl(a);
while(id_first<id_loc){
@@ -1372,12 +1395,12 @@
app_repl(a);
/*:88*/
-#line 1266 "ctangle.w"
+#line 1270 "ctangle.w"
break;
case ord:
/*89:*/
-#line 1313 "ctangle.w"
+#line 1317 "ctangle.w"
{
int c= (int)((eight_bits)*id_first);
if(c=='\\'){
@@ -1427,7 +1450,7 @@
}
/*:89*/
-#line 1269 "ctangle.w"
+#line 1273 "ctangle.w"
break;
case definition:case format_code:case begin_C:if(t!=section_name)goto done;
@@ -1451,7 +1474,7 @@
}
/*:83*//*90:*/
-#line 1371 "ctangle.w"
+#line 1375 "ctangle.w"
static void
scan_section(void)
@@ -1466,7 +1489,7 @@
next_control= ignore;
while(true){
/*92:*/
-#line 1412 "ctangle.w"
+#line 1416 "ctangle.w"
while(next_control<definition)
@@ -1475,11 +1498,11 @@
}
/*:92*/
-#line 1385 "ctangle.w"
+#line 1389 "ctangle.w"
if(next_control==definition){
/*93:*/
-#line 1419 "ctangle.w"
+#line 1423 "ctangle.w"
while((next_control= get_next())=='\n');
if(next_control!=identifier){
@@ -1495,7 +1518,7 @@
cur_text->text_link= macro;
/*:93*/
-#line 1387 "ctangle.w"
+#line 1391 "ctangle.w"
continue;
}
@@ -1505,7 +1528,7 @@
if(next_control==section_name){
p= cur_section_name;
/*94:*/
-#line 1441 "ctangle.w"
+#line 1445 "ctangle.w"
while((next_control= get_next())=='+');
if(next_control!='='&&next_control!=eq_eq)
@@ -1512,7 +1535,7 @@
continue;
/*:94*/
-#line 1395 "ctangle.w"
+#line 1399 "ctangle.w"
break;
}
@@ -1520,20 +1543,20 @@
}
no_where= print_where= false;
/*95:*/
-#line 1446 "ctangle.w"
+#line 1450 "ctangle.w"
/*96:*/
-#line 1451 "ctangle.w"
+#line 1455 "ctangle.w"
store_two_bytes((sixteen_bits)(0150000+section_count));
/*:96*/
-#line 1447 "ctangle.w"
+#line 1451 "ctangle.w"
scan_repl(section_name);
/*97:*/
-#line 1455 "ctangle.w"
+#line 1459 "ctangle.w"
if(p==name_dir||p==NULL){
last_unnamed->text_link= cur_text-text_info;last_unnamed= cur_text;
@@ -1550,16 +1573,16 @@
/*:97*/
-#line 1449 "ctangle.w"
+#line 1453 "ctangle.w"
/*:95*/
-#line 1401 "ctangle.w"
+#line 1405 "ctangle.w"
}
/*:90*//*98:*/
-#line 1470 "ctangle.w"
+#line 1474 "ctangle.w"
static void
phase_one(void){
@@ -1572,7 +1595,7 @@
}
/*:98*//*100:*/
-#line 1486 "ctangle.w"
+#line 1490 "ctangle.w"
static void
skip_limbo(void)
@@ -1586,7 +1609,7 @@
switch(ccode[(eight_bits)c]){
case new_section:return;
case translit_code:/*102:*/
-#line 1516 "ctangle.w"
+#line 1520 "ctangle.w"
while(xisspace(*loc)&&loc<limit)loc++;
loc+= 3;
@@ -1611,7 +1634,7 @@
}
/*:102*/
-#line 1498 "ctangle.w"
+#line 1502 "ctangle.w"
break;
case format_code:case'@':break;
case control_text:if(c=='q'||c=='Q'){
@@ -1629,7 +1652,7 @@
}
/*:100*//*103:*/
-#line 1542 "ctangle.w"
+#line 1546 "ctangle.w"
void
print_stats(void){
Modified: trunk/Build/source/texk/web2c/cwebdir/ctangle.w
===================================================================
--- trunk/Build/source/texk/web2c/cwebdir/ctangle.w 2022-02-14 15:54:19 UTC (rev 62020)
+++ trunk/Build/source/texk/web2c/cwebdir/ctangle.w 2022-02-14 16:00:50 UTC (rev 62021)
@@ -1242,7 +1242,11 @@
}
@ @<In cases that |a| is...@>=@t\1\quad@>
-case identifier: store_id(a); break;
+case identifier: store_id(a);
+ if (*buffer=='#' && id_first==buffer+1 && id_loc-id_first==5
+ && strncmp("endif",id_first,5)==0)
+ @<Insert the line number into |tok_mem|@>@;
+ break;
case section_name: if (t!=section_name) goto done;
else {
@<Was an `\.{@@}' missed here?@>@;
More information about the tex-live-commits
mailing list.