1cea48f8086dbd150496cc612b396adaf5e5f1a5
8 void type_error(const char *msg
, ...)
12 fprintf(stderr
, "type error: ");
13 vfprintf(stderr
, msg
, ap
);
18 void check_expr_constant(struct expr
*expr
)
22 check_expr_constant(expr
->data
.ebinop
.l
);
23 check_expr_constant(expr
->data
.ebinop
.r
);
26 check_expr_constant(expr
->data
.eunop
.l
);
30 type_error("Initialiser is not constant\n");
37 struct vardecl
*type_vardecl(struct vardecl
*vardecl
)
42 struct decl
*type_decl(struct decl
*decl
)
46 fprintf(stderr
, "type_decl:component unsupported\n");
49 fprintf(stderr
, "type_decl:fundecl unsupported\n");
52 decl
->data
.dvar
= type_vardecl(decl
->data
.dvar
);
58 struct ast
*sem(struct ast
*ast
)
62 //Check that all globals are constant
63 for (int i
= 0; i
<ast
->ndecls
; i
++) {
64 if (ast
->decls
[i
]->type
== dvardecl
) {
66 check_expr_constant(ast
->decls
[i
]->data
.dvar
->expr
);