fix typdef param shit
This commit is contained in:
parent
33f38c03d6
commit
ad1d5776f8
3 changed files with 33 additions and 20 deletions
|
@ -456,8 +456,8 @@ msph_tree_sphophi_prebind(struct spho_scope *sc,
|
|||
return (-1);
|
||||
}
|
||||
|
||||
if ((ret = spho_scope_prebind_tp_op(sc, NOM(name), op))
|
||||
== -1) {
|
||||
if ((ret = spho_scope_prebind_tp_op(sc,
|
||||
NOM(tpdef->name), op)) == -1) {
|
||||
return (-1);
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -30,7 +30,7 @@ static void tree_parse_init(struct tree_parse *,
|
|||
struct msph_token_stream *, int);
|
||||
static int tree_parse_next_token(struct tree_parse *);
|
||||
|
||||
static ssize_t tree_ind_fprint(FILE *, int, struct msph_tree *);
|
||||
static int tree_ind_fprint(FILE *, int, struct msph_tree *);
|
||||
|
||||
static void free_the_tree(struct msph_tree *);
|
||||
|
||||
|
@ -302,16 +302,21 @@ tree_parse_body(struct tree_parse *p, struct msph_tree *parent)
|
|||
dir = tree_parse_assert(p, TREE(body));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
goto ret;
|
||||
}
|
||||
|
||||
if (dir == NULL)
|
||||
break;
|
||||
goto err;
|
||||
|
||||
STAILQ_INSERT_TAIL(&body->head, dir, entries);
|
||||
}
|
||||
|
||||
ret:
|
||||
return (body);
|
||||
err:
|
||||
free_the_tree(TREE(body));
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
|
||||
|
@ -346,11 +351,10 @@ tree_parse_tpdef(struct tree_parse *p, struct msph_tree *parent)
|
|||
if (name == NULL)
|
||||
goto err;
|
||||
STAILQ_INSERT_TAIL(&def->params, name, entries);
|
||||
|
||||
EXPECT_READ_NEXT(res, p, MSPH_TREE_TPDEF, goto err);
|
||||
} while (CURR_TOKEN(p)->type == TOK_COMMA);
|
||||
|
||||
EXPECT_CURR_TOKEN(p, TOK_RBRAK, MSPH_TREE_TPDEF, goto err);
|
||||
EXPECT_READ_NEXT(res, p, MSPH_TREE_TPDEF, goto err);
|
||||
}
|
||||
EXPECT_CURR_TOKEN(p, TOK_EQUALS, MSPH_TREE_TPDEF, goto err);
|
||||
|
||||
|
@ -418,7 +422,7 @@ tree_parse_ident_extsize(struct tree_parse *p, struct msph_tree *parent,
|
|||
TEXT(id)->pos = CURR_TOKEN(p)->pos;
|
||||
DECOR_INIT(id);
|
||||
|
||||
if (SPHO_STRLCPY(id->str, CURR_TOKEN(p)->data.str, sizeof(id->str))
|
||||
if (strlcpy(id->str, CURR_TOKEN(p)->data.str, sizeof(id->str))
|
||||
>= sizeof(id->str)) {
|
||||
MSPH_ERR(CTX(p), MSPH_ERR_TREE_TOOLONG);
|
||||
goto err;
|
||||
|
@ -988,7 +992,6 @@ tree_parse_tpexpr_atom(struct tree_parse *p, struct msph_tree *parent)
|
|||
tp = NULL;
|
||||
}
|
||||
|
||||
SPHO_DEBUG_PRINT("returning tp type=%x\n", TREE(tp)->type);
|
||||
return (tp);
|
||||
}
|
||||
struct msph_tree_tpexpr *
|
||||
|
@ -1252,12 +1255,15 @@ tree_parse_trait(struct tree_parse *p, struct msph_tree *parent)
|
|||
DECOR_INIT(trait);
|
||||
trait->body = NULL;
|
||||
|
||||
EXPECT_READ_NEXT(res, p, MSPH_TREE_TRAIT, goto err);
|
||||
|
||||
if ((trait->body = tree_parse_body(p, TREE(trait))) == NULL)
|
||||
goto err;
|
||||
|
||||
EXPECT_READ_NEXT(res, p, MSPH_TREE_TRAIT, goto err);
|
||||
EXPECT_CURR_TOKEN(p, TOK_RBRACE, MSPH_TREE_TRAIT, goto err);
|
||||
|
||||
tree_parse_next_token(p);
|
||||
|
||||
return ((struct msph_tree_tpexpr *)trait);
|
||||
err:
|
||||
free_the_tree(TREE(trait));
|
||||
|
@ -1322,7 +1328,6 @@ tree_parse_membdecl(struct tree_parse *p, struct msph_tree *parent)
|
|||
if ((membd->name = tree_parse_namedecl(p, TREE(membd))) == NULL)
|
||||
goto err;
|
||||
|
||||
EXPECT_READ_NEXT(res, p, MSPH_TREE_MEMBDECL, goto err);
|
||||
EXPECT_CURR_TOKEN(p, TOK_COLON, MSPH_TREE_MEMBDECL,
|
||||
goto err);
|
||||
EXPECT_READ_NEXT(res, p, MSPH_TREE_MEMBDECL, goto err);
|
||||
|
@ -1377,11 +1382,10 @@ free_the_tree(struct msph_tree *tree)
|
|||
#define MSPH_TREE_INDENT " "
|
||||
|
||||
__attribute__((format(printf, 3, 4)))
|
||||
static ssize_t
|
||||
static int
|
||||
indent_fprintf(FILE *f, int indent, const char *fmt, ...)
|
||||
{
|
||||
int res;
|
||||
ssize_t ret;
|
||||
int res, ret;
|
||||
int i;
|
||||
va_list ap;
|
||||
|
||||
|
@ -1391,25 +1395,25 @@ indent_fprintf(FILE *f, int indent, const char *fmt, ...)
|
|||
for (i = 0; i < indent; i++) {
|
||||
res = fprintf(f, "%s", MSPH_TREE_INDENT);
|
||||
if (res < 0) {
|
||||
return ((ssize_t)res);
|
||||
return (res);
|
||||
}
|
||||
ret += (ssize_t)res;
|
||||
ret += res;
|
||||
}
|
||||
|
||||
res = vfprintf(f, fmt, ap);
|
||||
if (res < 0) {
|
||||
return ((ssize_t)res);
|
||||
return (res);
|
||||
}
|
||||
ret += (ssize_t)res;
|
||||
ret += res;
|
||||
va_end(ap);
|
||||
|
||||
return (ret);
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
static int
|
||||
tree_ind_fprint(FILE *f, int indent, struct msph_tree *tree)
|
||||
{
|
||||
ssize_t ret, res;
|
||||
int ret, res;
|
||||
struct msph_tree_root *root;
|
||||
struct msph_tree_unit *unit;
|
||||
struct msph_tree_body *body;
|
||||
|
@ -1431,6 +1435,7 @@ tree_ind_fprint(FILE *f, int indent, struct msph_tree *tree)
|
|||
struct msph_tree_paren *paren;
|
||||
struct msph_tree_ident *ident;
|
||||
struct msph_tree_tpexpr *tp;
|
||||
struct msph_tree_namedecl *named;
|
||||
const char *ident_kind;
|
||||
|
||||
ret = 0;
|
||||
|
@ -1519,6 +1524,13 @@ tree_ind_fprint(FILE *f, int indent, struct msph_tree *tree)
|
|||
return (res);
|
||||
}
|
||||
ret += res;
|
||||
STAILQ_FOREACH(named, &tpdef->params, entries) {
|
||||
if ((res = tree_ind_fprint(f, indent+1, TREE(named)))
|
||||
< 0) {
|
||||
return (res);
|
||||
}
|
||||
ret += res;
|
||||
}
|
||||
if ((res = tree_ind_fprint(f, indent+1, TREE(tpdef->tp))) < 0)
|
||||
return (res);
|
||||
ret += res;
|
||||
|
|
|
@ -128,6 +128,7 @@ spho_scope_nom_add(struct spho_scope *sc, const char *nomstr, size_t sz)
|
|||
SPHO_SC_ERR(sc, SPHO_ERR_TOOBIG);
|
||||
goto err;
|
||||
}
|
||||
nom->id = sc->ctx->nom_cnt++;
|
||||
|
||||
SLIST_INSERT_HEAD(&sc->noms, nom, entries);
|
||||
sc->nom_cnt++;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue