fix typdef param shit

This commit is contained in:
Ellen Arvidsson 2025-06-27 04:23:50 +02:00
parent 33f38c03d6
commit ad1d5776f8
3 changed files with 33 additions and 20 deletions

View file

@ -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 {

View file

@ -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;

View file

@ -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++;