projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
p_valfree() changed to val_free() in value.h
[unix-history]
/
usr
/
src
/
usr.bin
/
window
/
parser1.c
diff --git
a/usr/src/usr.bin/window/parser1.c
b/usr/src/usr.bin/window/parser1.c
index
12f84f8
..
2f68f99
100644
(file)
--- a/
usr/src/usr.bin/window/parser1.c
+++ b/
usr/src/usr.bin/window/parser1.c
@@
-1,5
+1,5
@@
#ifndef lint
#ifndef lint
-static char *sccsid = "@(#)parser1.c 3.
5 83/12/09
";
+static char *sccsid = "@(#)parser1.c 3.
9 84/01/12
";
#endif
#include <stdio.h>
#endif
#include <stdio.h>
@@
-11,9
+11,9
@@
static char *sccsid = "@(#)parser1.c 3.5 83/12/09";
#include "var.h"
#define p_erred() (cx.x_erred)
#include "var.h"
#define p_erred() (cx.x_erred)
+#define p_synerred() (cx.x_synerred)
#define p_clearerr() (cx.x_erred = cx.x_synerred = 0)
#define p_abort() (cx.x_abort)
#define p_clearerr() (cx.x_erred = cx.x_synerred = 0)
#define p_abort() (cx.x_abort)
-#define p_varfree(v) if ((v).v_type == V_STR) str_free((v).v_str)
p_start()
{
p_start()
{
@@
-156,7
+156,7
@@
char flag;
#ifdef DEBUG
error("command: expression.");
#endif
#ifdef DEBUG
error("command: expression.");
#endif
-
p_var
free(t);
+
val_
free(t);
return 0;
}
}
return 0;
}
}
@@
-191,7
+191,7
@@
char flag;
}
}
str_free(cmd);
}
}
str_free(cmd);
-
p_var
free(t);
+
val_
free(t);
if (token == T_EOL)
(void) s_gettok();
else if (token != T_EOF) {
if (token == T_EOL)
(void) s_gettok();
else if (token != T_EOF) {
@@
-229,7
+229,16
@@
register struct value *v;
for (i = 0;;) {
ap = 0;
if (p_expr0(&t, flag) < 0)
for (i = 0;;) {
ap = 0;
if (p_expr0(&t, flag) < 0)
- break;
+ if (!p_synerred() && token == T_MUL) {
+ if (c->lc_arg[i].arg_name == 0)
+ p_error("%s: Too many arguments.",
+ c->lc_name);
+ else
+ i++;
+ (void) s_gettok();
+ continue;
+ } else
+ break;
if (t.v_type == V_ERR)
flag = 0;
if (token != T_ASSIGN) {
if (t.v_type == V_ERR)
flag = 0;
if (token != T_ASSIGN) {
@@
-238,7
+247,7
@@
register struct value *v;
if (ap->arg_name == 0) {
p_error("%s: Too many arguments.",
c->lc_name);
if (ap->arg_name == 0) {
p_error("%s: Too many arguments.",
c->lc_name);
-
p_var
free(t);
+
val_
free(t);
ap = 0;
flag = 0;
} else
ap = 0;
flag = 0;
} else
@@
-277,7
+286,7
@@
register struct value *v;
if (ap->arg_name == 0) {
p_error("%s: Unknown argument \"%s\".",
c->lc_name, tmp);
if (ap->arg_name == 0) {
p_error("%s: Unknown argument \"%s\".",
c->lc_name, tmp);
-
p_var
free(t);
+
val_
free(t);
flag = 0;
ap = 0;
}
flag = 0;
ap = 0;
}
@@
-289,7
+298,7
@@
register struct value *v;
p_error("%s: Argument %d (%s) duplicated.",
c->lc_name, ap - c->lc_arg + 1,
ap->arg_name);
p_error("%s: Argument %d (%s) duplicated.",
c->lc_name, ap - c->lc_arg + 1,
ap->arg_name);
-
p_var
free(t);
+
val_
free(t);
flag = 0;
} else if (t.v_type == V_ERR) {
/* do nothing */
flag = 0;
} else if (t.v_type == V_ERR) {
/* do nothing */
@@
-298,7
+307,7
@@
register struct value *v;
p_error("%s: Argument %d (%s) type mismatch.",
c->lc_name, ap - c->lc_arg + 1,
ap->arg_name);
p_error("%s: Argument %d (%s) type mismatch.",
c->lc_name, ap - c->lc_arg + 1,
ap->arg_name);
-
p_var
free(t);
+
val_
free(t);
flag = 0;
} else
ap->arg_val = t;
flag = 0;
} else
ap->arg_val = t;
@@
-311,16
+320,17
@@
register struct value *v;
flag = 0;
if (token != T_RP && token != T_EOL && token != T_EOF)
flag = 0; /* look ahead a bit */
flag = 0;
if (token != T_RP && token != T_EOL && token != T_EOF)
flag = 0; /* look ahead a bit */
+ v->v_type = V_ERR;
if (flag)
(*c->lc_func)(v);
if (c != 0)
for (ap = c->lc_arg; ap->arg_name != 0; ap++)
if (flag)
(*c->lc_func)(v);
if (c != 0)
for (ap = c->lc_arg; ap->arg_name != 0; ap++)
-
p_var
free(ap->arg_val);
+
val_
free(ap->arg_val);
return 0;
abort:
if (c != 0)
for (ap = c->lc_arg; ap->arg_name != 0; ap++)
return 0;
abort:
if (c != 0)
for (ap = c->lc_arg; ap->arg_name != 0; ap++)
-
p_var
free(ap->arg_val);
+
val_
free(ap->arg_val);
return -1;
}
return -1;
}
@@
-340,7
+350,7
@@
char flag;
case V_NUM:
if (flag && var_set(name, v) == 0) {
p_memerror();
case V_NUM:
if (flag && var_set(name, v) == 0) {
p_memerror();
-
p_var
free(*v);
+
val_
free(*v);
return -1;
}
break;
return -1;
}
break;
@@
-423,9
+433,11
@@
char flag;
break;
}
(void) s_gettok();
break;
}
(void) s_gettok();
+ v->v_type = V_ERR;
if ((flag && true ? p_expr1(v, 1) : p_expr1(&t, 0)) < 0)
return -1;
if (token != T_COLON) {
if ((flag && true ? p_expr1(v, 1) : p_expr1(&t, 0)) < 0)
return -1;
if (token != T_COLON) {
+ val_free(*v);
p_synerror();
return -1;
}
p_synerror();
return -1;
}
@@
-608,11
+620,17
@@
char flag;
op = token;
(void) s_gettok();
if (level == 10) {
op = token;
(void) s_gettok();
if (level == 10) {
- if (p_expr11(&t, flag) < 0)
+ if (p_expr11(&t, flag) < 0) {
+ p_synerror();
+ val_free(*v);
return -1;
return -1;
+ }
} else {
} else {
- if (p_expr3_10(level + 1, &t, flag) < 0)
+ if (p_expr3_10(level + 1, &t, flag) < 0) {
+ p_synerror();
+ val_free(*v);
return -1;
return -1;
+ }
}
if (t.v_type == V_ERR)
}
if (t.v_type == V_ERR)
@@
-646,8
+664,8
@@
char flag;
}
if (!flag) {
}
if (!flag) {
-
p_var
free(*v);
-
p_var
free(t);
+
val_
free(*v);
+
val_
free(t);
v->v_type = V_ERR;
continue;
}
v->v_type = V_ERR;
continue;
}
@@
-796,7
+814,7
@@
char flag;
/*
* string, number, ( expr )
* Plus function calls.
/*
* string, number, ( expr )
* Plus function calls.
- * Also we map
* and % into strings
.
+ * Also we map
% into string
.
*
* Always return v_type == V_ERR when flag == 0.
*/
*
* Always return v_type == V_ERR when flag == 0.
*/
@@
-809,16
+827,6
@@
char flag;
error("expr12: %d.", flag);
#endif
switch (token) {
error("expr12: %d.", flag);
#endif
switch (token) {
- case T_MUL:
-#ifdef DEBUG
- error("expr12: *.");
-#endif
- if (flag) {
- v->v_type = V_STR;
- v->v_str = str_cpy("*");
- }
- (void) s_gettok();
- break;
case T_MOD:
#ifdef DEBUG
error("expr12: %.");
case T_MOD:
#ifdef DEBUG
error("expr12: %.");
@@
-846,7
+854,8
@@
char flag;
if (flag) {
v->v_type = V_STR;
v->v_str = token_str;
if (flag) {
v->v_type = V_STR;
v->v_str = token_str;
- }
+ } else
+ str_free(token_str);
(void) s_gettok();
break;
case T_LP:
(void) s_gettok();
break;
case T_LP:
@@
-857,7
+866,7
@@
char flag;
}
if (token != T_RP) {
p_synerror();
}
if (token != T_RP) {
p_synerror();
-
p_var
free(*v);
+
val_
free(*v);
return -1;
}
(void) s_gettok();
return -1;
}
(void) s_gettok();
@@
-897,7
+906,7
@@
char flag;
str_free(cmd);
if (token != T_RP) {
p_synerror();
str_free(cmd);
if (token != T_RP) {
p_synerror();
-
p_var
free(*v);
+
val_
free(*v);
return -1;
}
(void) s_gettok();
return -1;
}
(void) s_gettok();