parseerror(parser, "expected for-loop condition");
goto onerr;
}
- }
- else if (!parser_next(parser)) {
+ } else if (!parser_next(parser)) {
parseerror(parser, "expected for-loop condition");
goto onerr;
}
if (!cond)
goto onerr;
}
-
/* move on to incrementor */
if (parser->tok != ';') {
parseerror(parser, "expected semicolon after for-loop initializer");
ast_expression *subtype;
field->m_hasvalue = true;
subtype = field->m_next;
- ifld = ir_builder_create_field(ir, field->m_name, subtype->m_vtype);
+ ifld = ir->createField(field->m_name, subtype->m_vtype);
if (subtype->m_vtype == TYPE_FIELD)
ifld->m_fieldtype = subtype->m_next->m_vtype;
else if (subtype->m_vtype == TYPE_FUNCTION)
ifld->m_outtype = subtype->m_next->m_vtype;
- (void)!ir_value_set_field(field->m_ir_v, ifld);
+ (void)!field->m_ir_v->setField(ifld);
}
}
for (auto &it : parser->globals) {
if (!ast_istype(it, ast_value))
continue;
asvalue = (ast_value*)it;
- if (!asvalue->m_uses && !asvalue->m_hasvalue && asvalue->m_vtype != TYPE_FUNCTION) {
+ if (!asvalue->m_uses && asvalue->m_cvq != CV_CONST && asvalue->m_vtype != TYPE_FUNCTION) {
retval = retval && !compile_warning(asvalue->m_context, WARN_UNUSED_VARIABLE,
"unused global: `%s`", asvalue->m_name);
}
generate_checksum(parser, ir);
if (OPTS_OPTION_BOOL(OPTION_DUMP))
- ir_builder_dump(ir, con_out);
+ ir->dump(con_out);
for (auto &it : parser->functions) {
if (!ir_function_finalize(it->m_ir_func)) {
con_out("failed to finalize function %s\n", it->m_name.c_str());
}
parser_remove_ast(parser);
- if (compile_Werrors) {
- con_out("*** there were warnings treated as errors\n");
- compile_show_werrors();
- retval = false;
- }
+ auto fnCheckWErrors = [&retval]() {
+ if (compile_Werrors) {
+ con_out("*** there were warnings treated as errors\n");
+ compile_show_werrors();
+ retval = false;
+ }
+ };
+
+ fnCheckWErrors();
if (retval) {
if (OPTS_OPTION_BOOL(OPTION_DUMPFIN))
- ir_builder_dump(ir, con_out);
+ ir->dump(con_out);
- if (!ir_builder_generate(ir, output)) {
+ if (!ir->generate(output)) {
con_out("*** failed to generate output file\n");
delete ir;
return false;
}
+
+ // ir->generate can generate compiler warnings
+ fnCheckWErrors();
}
delete ir;
return retval;