3 void type_error(const char *msg
, ...)
7 fprintf(stderr
, "type error: ");
8 vfprintf(stderr
, msg
, ap
);
13 void check_expr_constant(struct expr
*expr
)
17 check_expr_constant(expr
->data
.ebinop
.l
);
18 check_expr_constant(expr
->data
.ebinop
.r
);
21 check_expr_constant(expr
->data
.eunop
.l
);
25 type_error("Initialiser is not constant\n");
32 struct vardecl
*type_vardecl(struct vardecl
*vardecl
)
37 struct decl
*type_decl(struct decl
*decl
)
41 fprintf(stderr
, "type_decl:component unsupported\n");
44 fprintf(stderr
, "type_decl:fundecl unsupported\n");
47 decl
->data
.dvar
= type_vardecl(decl
->data
.dvar
);
53 struct ast
*type(struct ast
*ast
)
55 for (int i
= 0; i
<ast
->ndecls
; i
++) {
56 if (ast
->decls
[i
]->type
== dvardecl
) {
58 check_expr_constant(ast
->decls
[i
]->data
.dvar
->expr
);