extern char *symbol2str();
extern char options[];
extern arith flt_flt2arith();
+extern label code_string();
arithbalance(e1p, oper, e2p) /* 3.1.2.5 */
register struct expr **e1p, **e2p;
/* The expression, which must be a string constant, is converted
to a pointer to the string-containing area.
*/
- label lbl = data_label();
+ label lbl;
- code_string(ex->SG_VALUE, ex->SG_LEN, lbl);
+ lbl = code_string(ex->SG_VALUE, ex->SG_LEN);
ex->ex_class = Value;
ex->VL_CLASS = Label;
ex->VL_LBL = lbl;
struct string_cst *str_list = 0;
-code_string(val, len, dlb)
+label
+code_string(val, len)
char *val;
int len;
- label dlb;
{
register struct string_cst *sc = new_string_cst();
+ label lbl = data_label();
C_ina_dlb(dlb);
sc->next = str_list;
sc->sc_value = val;
sc->sc_len = len;
sc->sc_dlb = dlb;
+ return dlb;
}
def_strings(sc)
register int ch = 0;
register int level = 0, nostashraw = 0;
int lastch;
+ static int Unstacked_missed;
while (1) {
lastch = ch;
ch = GetChar();
+ if (nostashraw
+ && nostashraw >= Unstacked_missed) {
+ nostashraw -= Unstacked_missed;
+ Unstacked_missed = 0;
+ }
if (Unstacked) {
nostashraw -= Unstacked;
- if (nostashraw < 0) nostashraw = 0;
+ if (nostashraw < 0) {
+ Unstacked_missed = -nostashraw;
+ nostashraw = 0;
+ }
EnableMacros();
}
if (class(ch) == STIDF || class(ch) == STELL) {