Update bootstrap files.
All checks were successful
BuildTest / Build and test (pull_request) Successful in 4m8s
All checks were successful
BuildTest / Build and test (pull_request) Successful in 4m8s
This commit is contained in:
167
names.c
167
names.c
@@ -1,9 +1,11 @@
|
||||
|
||||
#line 932 "nuweb.w"
|
||||
#include "global.h"
|
||||
|
||||
#line 5126 "nuweb.w"
|
||||
enum { LESS, GREATER, EQUAL, PREFIX, EXTENSION };
|
||||
|
||||
static int compare(x, y)
|
||||
char *x;
|
||||
char *y;
|
||||
static int compare(char *x, char *y)
|
||||
{
|
||||
int len, result;
|
||||
int xl = strlen(x);
|
||||
@@ -26,21 +28,22 @@ static int compare(x, y)
|
||||
}
|
||||
else return EQUAL;
|
||||
}
|
||||
char *save_string(s)
|
||||
char *s;
|
||||
|
||||
#line 5155 "nuweb.w"
|
||||
char *save_string(char *s)
|
||||
{
|
||||
char *new = (char *) arena_getmem((strlen(s) + 1) * sizeof(char));
|
||||
strcpy(new, s);
|
||||
return new;
|
||||
}
|
||||
static int ambiguous_prefix();
|
||||
|
||||
#line 5164 "nuweb.w"
|
||||
static int ambiguous_prefix(Name *node, char *spelling,
|
||||
unsigned char sector);
|
||||
|
||||
static char * found_name = NULL;
|
||||
|
||||
Name *prefix_add(rt, spelling, sector)
|
||||
Name **rt;
|
||||
char *spelling;
|
||||
unsigned char sector;
|
||||
Name *prefix_add(Name **rt, char *spelling, unsigned char sector)
|
||||
{
|
||||
Name *node = *rt;
|
||||
int cmp;
|
||||
@@ -64,18 +67,24 @@ Name *prefix_add(rt, spelling, sector)
|
||||
if (cmp == EXTENSION)
|
||||
node->spelling = save_string(spelling);
|
||||
return node;
|
||||
case PREFIX: {
|
||||
case PREFIX:
|
||||
#line 5207 "nuweb.w"
|
||||
{
|
||||
if (ambiguous_prefix(node->llink, spelling, sector) ||
|
||||
ambiguous_prefix(node->rlink, spelling, sector))
|
||||
fprintf(stderr,
|
||||
"%s: ambiguous prefix %c<%s...%c> (%s, line %d)\n",
|
||||
command_name, nw_char, spelling, nw_char, source_name, source_line);
|
||||
}
|
||||
#line 5193 "nuweb.w"
|
||||
|
||||
return node;
|
||||
}
|
||||
node = *rt;
|
||||
}
|
||||
/* Create new name entry */
|
||||
|
||||
#line 5330 "nuweb.w"
|
||||
{
|
||||
node = (Name *) arena_getmem(sizeof(Name));
|
||||
if (found_name && robs_strcmp(found_name, spelling) == 0)
|
||||
@@ -104,11 +113,12 @@ Name *prefix_add(rt, spelling, sector)
|
||||
*rt = node;
|
||||
return node;
|
||||
}
|
||||
#line 5198 "nuweb.w"
|
||||
|
||||
}
|
||||
static int ambiguous_prefix(node, spelling, sector)
|
||||
Name *node;
|
||||
char *spelling;
|
||||
unsigned char sector;
|
||||
|
||||
#line 5216 "nuweb.w"
|
||||
static int ambiguous_prefix(Name *node, char *spelling, unsigned char sector)
|
||||
{
|
||||
while (node) {
|
||||
switch (compare(node->spelling, spelling)) {
|
||||
@@ -131,6 +141,8 @@ static int ambiguous_prefix(node, spelling, sector)
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
#line 5264 "nuweb.w"
|
||||
int robs_strcmp(char* x, char* y)
|
||||
{
|
||||
int cmp = 0;
|
||||
@@ -138,13 +150,21 @@ int robs_strcmp(char* x, char* y)
|
||||
for (; *x && *y; x++, y++)
|
||||
{
|
||||
/* Skip invisibles on 'x' */
|
||||
|
||||
#line 5298 "nuweb.w"
|
||||
if (*x == '|')
|
||||
x++;
|
||||
|
||||
#line 5270 "nuweb.w"
|
||||
|
||||
/* Skip invisibles on 'y' */
|
||||
|
||||
#line 5298 "nuweb.w"
|
||||
if (*y == '|')
|
||||
y++;
|
||||
|
||||
#line 5271 "nuweb.w"
|
||||
|
||||
if (*x == *y)
|
||||
continue;
|
||||
if (islower(*x) && toupper(*x) == *y)
|
||||
@@ -165,10 +185,9 @@ int robs_strcmp(char* x, char* y)
|
||||
return -2;
|
||||
return cmp;
|
||||
}
|
||||
Name *name_add(rt, spelling, sector)
|
||||
Name **rt;
|
||||
char *spelling;
|
||||
unsigned char sector;
|
||||
|
||||
#line 5303 "nuweb.w"
|
||||
Name *name_add(Name **rt, char *spelling, unsigned char sector)
|
||||
{
|
||||
Name *node = *rt;
|
||||
while (node) {
|
||||
@@ -190,6 +209,8 @@ Name *name_add(rt, spelling, sector)
|
||||
node = *rt;
|
||||
}
|
||||
/* Create new name entry */
|
||||
|
||||
#line 5330 "nuweb.w"
|
||||
{
|
||||
node = (Name *) arena_getmem(sizeof(Name));
|
||||
if (found_name && robs_strcmp(found_name, spelling) == 0)
|
||||
@@ -218,8 +239,12 @@ Name *name_add(rt, spelling, sector)
|
||||
*rt = node;
|
||||
return node;
|
||||
}
|
||||
#line 5324 "nuweb.w"
|
||||
|
||||
}
|
||||
Name *collect_file_name()
|
||||
|
||||
#line 5363 "nuweb.w"
|
||||
Name *collect_file_name(void)
|
||||
{
|
||||
Name *new_name;
|
||||
char name[MAX_NAME_LEN];
|
||||
@@ -241,6 +266,8 @@ Name *collect_file_name()
|
||||
/* File names are always global. */
|
||||
new_name = name_add(&file_names, name, 0);
|
||||
/* Handle optional per-file flags */
|
||||
|
||||
#line 5396 "nuweb.w"
|
||||
{
|
||||
while (1) {
|
||||
while (isspace(c))
|
||||
@@ -255,7 +282,9 @@ Name *collect_file_name()
|
||||
break;
|
||||
case 'i': new_name->indent_flag = FALSE;
|
||||
break;
|
||||
case 'c': c = source_get();
|
||||
case 'c':
|
||||
#line 5425 "nuweb.w"
|
||||
c = source_get();
|
||||
if (c == 'c')
|
||||
new_name->comment_flag = 1;
|
||||
else if (c == '+')
|
||||
@@ -266,6 +295,8 @@ Name *collect_file_name()
|
||||
fprintf(stderr, "%s: Unrecognised comment flag (%s, %d)\n",
|
||||
command_name, source_name, source_line);
|
||||
|
||||
#line 5410 "nuweb.w"
|
||||
|
||||
break;
|
||||
default : fprintf(stderr, "%s: unexpected per-file flag (%s, %d)\n",
|
||||
command_name, source_name, source_line);
|
||||
@@ -277,6 +308,8 @@ Name *collect_file_name()
|
||||
else break;
|
||||
}
|
||||
}
|
||||
#line 5384 "nuweb.w"
|
||||
|
||||
c2 = source_get();
|
||||
if (c != nw_char || (c2 != '{' && c2 != '(' && c2 != '[')) {
|
||||
fprintf(stderr, "%s: expected %c{, %c[, or %c( after file name (%s, %d)\n",
|
||||
@@ -285,7 +318,9 @@ Name *collect_file_name()
|
||||
}
|
||||
return new_name;
|
||||
}
|
||||
Name *collect_macro_name()
|
||||
|
||||
#line 5446 "nuweb.w"
|
||||
Name *collect_macro_name(void)
|
||||
{
|
||||
char name[MAX_NAME_LEN];
|
||||
char args[1000];
|
||||
@@ -312,7 +347,9 @@ Name *collect_macro_name()
|
||||
c = source_get();
|
||||
while (c == ' ' || c == '\t');
|
||||
break;
|
||||
case '\n': {
|
||||
case '\n':
|
||||
#line 5564 "nuweb.w"
|
||||
{
|
||||
do
|
||||
c = source_get();
|
||||
while (isspace(c));
|
||||
@@ -323,6 +360,8 @@ Name *collect_macro_name()
|
||||
exit(-1);
|
||||
}
|
||||
/* Cleanup and install name */
|
||||
|
||||
#line 5547 "nuweb.w"
|
||||
{
|
||||
if (p > name && p[-1] == ' ')
|
||||
p--;
|
||||
@@ -338,18 +377,26 @@ Name *collect_macro_name()
|
||||
*p = '\0';
|
||||
node = prefix_add(¯o_names, name, sector);
|
||||
}
|
||||
#line 5574 "nuweb.w"
|
||||
|
||||
return install_args(node, argc, arg);
|
||||
}
|
||||
#line 5473 "nuweb.w"
|
||||
|
||||
default:
|
||||
if (c==nw_char)
|
||||
{
|
||||
/* Check for terminating at-sequence and return name */
|
||||
|
||||
#line 5494 "nuweb.w"
|
||||
{
|
||||
c = source_get();
|
||||
switch (c) {
|
||||
case '(':
|
||||
case '[':
|
||||
case '{': {
|
||||
case '{':
|
||||
#line 5547 "nuweb.w"
|
||||
{
|
||||
if (p > name && p[-1] == ' ')
|
||||
p--;
|
||||
if (p - name > 3 && p[-1] == '.' && p[-2] == '.' && p[-3] == '.') {
|
||||
@@ -364,18 +411,26 @@ Name *collect_macro_name()
|
||||
*p = '\0';
|
||||
node = prefix_add(¯o_names, name, sector);
|
||||
}
|
||||
#line 5499 "nuweb.w"
|
||||
|
||||
return install_args(node, argc, arg);
|
||||
case '\'': arg[argc] = argp;
|
||||
case '\'':
|
||||
#line 5517 "nuweb.w"
|
||||
arg[argc] = argp;
|
||||
while ((c = source_get()) != EOF) {
|
||||
if (c==nw_char) {
|
||||
c2 = source_get();
|
||||
if (c2=='\'') {
|
||||
/* Make this argument */
|
||||
|
||||
#line 5540 "nuweb.w"
|
||||
if (argc < 9) {
|
||||
*argp++ = '\000';
|
||||
argc += 1;
|
||||
}
|
||||
|
||||
#line 5522 "nuweb.w"
|
||||
|
||||
c = source_get();
|
||||
break;
|
||||
}
|
||||
@@ -387,6 +442,8 @@ Name *collect_macro_name()
|
||||
}
|
||||
*p++ = ARG_CHR;
|
||||
|
||||
#line 5501 "nuweb.w"
|
||||
|
||||
break;
|
||||
default:
|
||||
if (c==nw_char)
|
||||
@@ -400,6 +457,8 @@ Name *collect_macro_name()
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
#line 5477 "nuweb.w"
|
||||
|
||||
break;
|
||||
}
|
||||
*p++ = c;
|
||||
@@ -412,6 +471,8 @@ Name *collect_macro_name()
|
||||
exit(-1);
|
||||
return NULL; /* unreachable return to avoid warnings on some compilers */
|
||||
}
|
||||
|
||||
#line 5583 "nuweb.w"
|
||||
Name *install_args(Name * name, int argc, char *arg[9])
|
||||
{
|
||||
int i;
|
||||
@@ -422,6 +483,8 @@ Name *install_args(Name * name, int argc, char *arg[9])
|
||||
}
|
||||
return name;
|
||||
}
|
||||
|
||||
#line 5604 "nuweb.w"
|
||||
Arglist * buildArglist(Name * name, Arglist * a)
|
||||
{
|
||||
Arglist * args = (Arglist *)arena_getmem(sizeof(Arglist));
|
||||
@@ -431,6 +494,8 @@ Arglist * buildArglist(Name * name, Arglist * a)
|
||||
args->name = name;
|
||||
return args;
|
||||
}
|
||||
|
||||
#line 5617 "nuweb.w"
|
||||
Arglist * collect_scrap_name(int current_scrap)
|
||||
{
|
||||
char name[MAX_NAME_LEN];
|
||||
@@ -459,6 +524,8 @@ Arglist * collect_scrap_name(int current_scrap)
|
||||
if (c==nw_char)
|
||||
{
|
||||
/* Look for end of scrap name and return */
|
||||
|
||||
#line 5666 "nuweb.w"
|
||||
{
|
||||
Name * node;
|
||||
|
||||
@@ -467,6 +534,8 @@ Arglist * collect_scrap_name(int current_scrap)
|
||||
|
||||
case '\'': {
|
||||
/* Add plain string argument */
|
||||
|
||||
#line 5723 "nuweb.w"
|
||||
char buff[MAX_NAME_LEN];
|
||||
char * s = buff;
|
||||
int c, c2;
|
||||
@@ -483,9 +552,15 @@ Arglist * collect_scrap_name(int current_scrap)
|
||||
}
|
||||
*s = '\000';
|
||||
/* Add buff to current arg list */
|
||||
*tail = buildArglist(NULL, (Arglist *)save_string(buff));
|
||||
|
||||
#line 5774 "nuweb.w"
|
||||
*tail = buildArglist(NULL, (Arglist *)save_string(buff));
|
||||
tail = &(*tail)->next;
|
||||
|
||||
#line 5738 "nuweb.w"
|
||||
|
||||
#line 5673 "nuweb.w"
|
||||
|
||||
}
|
||||
*p++ = ARG_CHR;
|
||||
c = source_get();
|
||||
@@ -494,20 +569,30 @@ Arglist * collect_scrap_name(int current_scrap)
|
||||
case '4': case '5': case '6':
|
||||
case '7': case '8': case '9': {
|
||||
/* Add a propagated argument */
|
||||
|
||||
#line 5744 "nuweb.w"
|
||||
char buff[3];
|
||||
buff[0] = ARG_CHR;
|
||||
buff[1] = c;
|
||||
buff[2] = '\000';
|
||||
/* Add buff to current arg list */
|
||||
*tail = buildArglist(NULL, (Arglist *)save_string(buff));
|
||||
|
||||
#line 5774 "nuweb.w"
|
||||
*tail = buildArglist(NULL, (Arglist *)save_string(buff));
|
||||
tail = &(*tail)->next;
|
||||
|
||||
#line 5748 "nuweb.w"
|
||||
|
||||
#line 5681 "nuweb.w"
|
||||
|
||||
}
|
||||
*p++ = ARG_CHR;
|
||||
c = source_get();
|
||||
break;
|
||||
case '{': {
|
||||
/* Add an inline scrap argument */
|
||||
|
||||
#line 5751 "nuweb.w"
|
||||
int s = collect_scrap();
|
||||
Scrap_Node * d = (Scrap_Node *)arena_getmem(sizeof(Scrap_Node));
|
||||
d->scrap = s;
|
||||
@@ -515,23 +600,31 @@ Arglist * collect_scrap_name(int current_scrap)
|
||||
d->next = NULL;
|
||||
*tail = buildArglist((Name *)1, (Arglist *)d);
|
||||
tail = &(*tail)->next;
|
||||
#line 5687 "nuweb.w"
|
||||
|
||||
}
|
||||
*p++ = ARG_CHR;
|
||||
c = source_get();
|
||||
break;
|
||||
case '<':
|
||||
/* Add macro call argument */
|
||||
|
||||
#line 5767 "nuweb.w"
|
||||
*tail = collect_scrap_name(current_scrap);
|
||||
if (current_scrap >= 0)
|
||||
add_to_use((*tail)->name, current_scrap);
|
||||
tail = &(*tail)->next;
|
||||
|
||||
#line 5693 "nuweb.w"
|
||||
|
||||
*p++ = ARG_CHR;
|
||||
c = source_get();
|
||||
break;
|
||||
case '(':
|
||||
scrap_name_has_parameters = 1;
|
||||
/* Cleanup and install name */
|
||||
|
||||
#line 5547 "nuweb.w"
|
||||
{
|
||||
if (p > name && p[-1] == ' ')
|
||||
p--;
|
||||
@@ -547,10 +640,14 @@ Arglist * collect_scrap_name(int current_scrap)
|
||||
*p = '\0';
|
||||
node = prefix_add(¯o_names, name, sector);
|
||||
}
|
||||
#line 5699 "nuweb.w"
|
||||
|
||||
return buildArglist(node, head);
|
||||
case '>':
|
||||
scrap_name_has_parameters = 0;
|
||||
/* Cleanup and install name */
|
||||
|
||||
#line 5547 "nuweb.w"
|
||||
{
|
||||
if (p > name && p[-1] == ' ')
|
||||
p--;
|
||||
@@ -566,6 +663,8 @@ Arglist * collect_scrap_name(int current_scrap)
|
||||
*p = '\0';
|
||||
node = prefix_add(¯o_names, name, sector);
|
||||
}
|
||||
#line 5703 "nuweb.w"
|
||||
|
||||
return buildArglist(node, head);
|
||||
|
||||
default:
|
||||
@@ -581,6 +680,8 @@ Arglist * collect_scrap_name(int current_scrap)
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
#line 5644 "nuweb.w"
|
||||
|
||||
break;
|
||||
}
|
||||
if (!isgraph(c)) {
|
||||
@@ -599,10 +700,11 @@ Arglist * collect_scrap_name(int current_scrap)
|
||||
exit(-1);
|
||||
return NULL; /* unreachable return to avoid warnings on some compilers */
|
||||
}
|
||||
static Scrap_Node *reverse(); /* a forward declaration */
|
||||
|
||||
void reverse_lists(names)
|
||||
Name *names;
|
||||
#line 5779 "nuweb.w"
|
||||
static Scrap_Node *reverse(Scrap_Node *a); /* a forward declaration */
|
||||
|
||||
void reverse_lists(Name *names)
|
||||
{
|
||||
while (names) {
|
||||
reverse_lists(names->llink);
|
||||
@@ -611,8 +713,9 @@ void reverse_lists(names)
|
||||
names = names->rlink;
|
||||
}
|
||||
}
|
||||
static Scrap_Node *reverse(a)
|
||||
Scrap_Node *a;
|
||||
|
||||
#line 5796 "nuweb.w"
|
||||
static Scrap_Node *reverse(Scrap_Node *a)
|
||||
{
|
||||
if (a) {
|
||||
Scrap_Node *b = a->next;
|
||||
|
Reference in New Issue
Block a user