diff --git a/modcc/cprinter.cpp b/modcc/cprinter.cpp index 3559e3272d38d49cf66e751f584c52a3cb14549e..8e7ad9b01666f2bf4200d7e0fff17698340da876 100644 --- a/modcc/cprinter.cpp +++ b/modcc/cprinter.cpp @@ -827,7 +827,6 @@ void CPrinter::print_APIMethod_optimized(APIMethod* e) { decrease_indentation(); aliased_output_ = false; - return; } void CPrinter::visit(CallExpression *e) { diff --git a/modcc/modcc.cpp b/modcc/modcc.cpp index 7ff7a0ac1713c2fe6acd40c2f385fed100f111a8..d8caef1ff43195ecf8e5a27cf6da7ab9cd8da89c 100644 --- a/modcc/modcc.cpp +++ b/modcc/modcc.cpp @@ -17,8 +17,6 @@ using namespace arb; -//#define VERBOSE - int main(int argc, char **argv) { // parse command line arguments diff --git a/modcc/module.cpp b/modcc/module.cpp index ca4b0028d66a2b2b6971365caf781d9f02824695..e4e8f4c64ca7c6ded847249c6fcad5ca28c58336 100644 --- a/modcc/module.cpp +++ b/modcc/module.cpp @@ -267,27 +267,26 @@ bool Module::semantic() { //......................................................................... // nrn_init : based on the INITIAL block (i.e. the 'initial' procedure //......................................................................... + + // insert an empty INITIAL block if none was defined in the .mod file. + if( !has_symbol("initial", symbolKind::procedure) ) { + symbols_["initial"] = make_symbol<ProcedureExpression>( + Location(), "initial", + std::vector<expression_ptr>(), + make_expression<BlockExpression>(Location(), expr_list_type(), false) + ); + } auto initial_api = make_empty_api_method("nrn_init", "initial"); auto api_init = initial_api.first; auto proc_init = initial_api.second; + auto& init_body = api_init->body()->statements(); - if(api_init) - { - auto& body = api_init->body()->statements(); - - for(auto& e : *proc_init->body()) { - body.emplace_back(e->clone()); - } - - api_init->semantic(symbols_); - } - else { - if(!proc_init) { - error("an INITIAL block is required", Location()); - } - return false; + for(auto& e : *proc_init->body()) { + init_body.emplace_back(e->clone()); } + api_init->semantic(symbols_); + // Look in the symbol table for a procedure with the name "breakpoint". // This symbol corresponds to the BREAKPOINT block in the .mod file // There are two APIMethods generated from BREAKPOINT.