1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
|
nxttok();
if(tokent==TF_INT) {
if(!macstack) ParseError("Empty macro stack\n");
n=tokenv-1;
nxttok();
if(n<0 || macstack->n<=n || !macstack->args[n]) ParseError("Cannot edit nonexistent argument %u\n",n+1);
if(macstack->args[n]->t&(TF_MACRO|TF_EOF)) ParseError("Invalid edit token\n");
macstack->args[n]->t=tokent;
macstack->args[n]->v=tokenv;
macstack->args[n]->str=0;
if(*tokenstr) {
macstack->args[n]->str=strdup(tokenstr);
if(!macstack->args[n]->str) fatal("Allocation failed\n");
}
} else {
if(!(tokent&TF_NAME) || tokenv!=OP_STRING) ParseError("String literal expected\n");
n=glohash[look_hash_mac()].id;
if(n<0xC000 || n>MAX_MACRO+0xC000-1 || !macros[n-0xC000]) ParseError("Undefined macro: {%s}\n",tokenstr);
nxttok();
n-=0xC000;
if(macros[n]->t&(TF_MACRO|TF_EOF)) ParseError("Invalid edit token\n");
free(macros[n]->str);
macros[n]->t=tokent;
|
>
|
|
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
|
nxttok();
if(tokent==TF_INT) {
if(!macstack) ParseError("Empty macro stack\n");
n=tokenv-1;
nxttok();
if(n<0 || macstack->n<=n || !macstack->args[n]) ParseError("Cannot edit nonexistent argument %u\n",n+1);
if(macstack->args[n]->t&(TF_MACRO|TF_EOF)) ParseError("Invalid edit token\n");
free(macstack->args[n]->str);
macstack->args[n]->t=tokent;
macstack->args[n]->v=tokenv;
macstack->args[n]->str=0;
if(*tokenstr) {
macstack->args[n]->str=strdup(tokenstr);
if(!macstack->args[n]->str) fatal("Allocation failed\n");
}
} else {
if(!(tokent&TF_NAME) || tokenv!=OP_STRING) ParseError("Numeric or string literal expected\n");
n=glohash[look_hash_mac()].id;
if(n<0xC000 || n>MAX_MACRO+0xC000-1 || !macros[n-0xC000]) ParseError("Undefined macro: {%s}\n",tokenstr);
nxttok();
n-=0xC000;
if(macros[n]->t&(TF_MACRO|TF_EOF)) ParseError("Invalid edit token\n");
free(macros[n]->str);
macros[n]->t=tokent;
|