diff --git a/modcc/printer/cprinter.cpp b/modcc/printer/cprinter.cpp index 9b78f551d920620403e93c1e6e60adf4af097075..0e333686f31edc7a194d262cd7d12ade200da1b1 100644 --- a/modcc/printer/cprinter.cpp +++ b/modcc/printer/cprinter.cpp @@ -369,21 +369,24 @@ std::string emit_cpp_source(const Module& module_, const printer_options& opt) { // Nrn methods: - net_receive && out << - "void " << class_name << "::deliver_events(deliverable_event_stream::state events) {\n" << indent << - "auto ncell = events.n_streams();\n" - "for (size_type c = 0; c<ncell; ++c) {\n" << indent << - "auto begin = events.begin_marked(c);\n" - "auto end = events.end_marked(c);\n" - "for (auto p = begin; p<end; ++p) {\n" << indent << - "if (p->mech_id==mechanism_id_) net_receive(p->mech_index, p->weight);\n" << popindent << - "}\n" << popindent << - "}\n" << popindent << - "}\n" - "\n" - "void " << class_name << "::net_receive(int i_, value_type weight) {\n" << indent << - cprint(net_receive->body()) << popindent << - "}\n\n"; + if (net_receive) { + const std::string weight_arg = net_receive->args().empty() ? "weight" : net_receive->args().front()->is_argument()->name(); + out << + "void " << class_name << "::deliver_events(deliverable_event_stream::state events) {\n" << indent << + "auto ncell = events.n_streams();\n" + "for (size_type c = 0; c<ncell; ++c) {\n" << indent << + "auto begin = events.begin_marked(c);\n" + "auto end = events.end_marked(c);\n" + "for (auto p = begin; p<end; ++p) {\n" << indent << + "if (p->mech_id==mechanism_id_) net_receive(p->mech_index, p->weight);\n" << popindent << + "}\n" << popindent << + "}\n" << popindent << + "}\n" + "\n" + "void " << class_name << "::net_receive(int i_, value_type " << weight_arg << ") {\n" << indent << + cprint(net_receive->body()) << popindent << + "}\n\n"; + } auto emit_body = [&](APIMethod *p) { if (with_simd) { diff --git a/modcc/printer/gpuprinter.cpp b/modcc/printer/gpuprinter.cpp index b685d0fbb14e2c157eef159eccb152a1b67e6db1..b0f67d1427a607586ab26fc7c4e3947f28e20016 100644 --- a/modcc/printer/gpuprinter.cpp +++ b/modcc/printer/gpuprinter.cpp @@ -293,6 +293,7 @@ std::string emit_gpu_cu_source(const Module& module_, const printer_options& opt // event delivery if (net_receive) { + const std::string weight_arg = net_receive->args().empty() ? "weight" : net_receive->args().front()->is_argument()->name(); out << "__global__\n" << "void deliver_events(int mech_id_, " << ppack_name << " params_, " << "deliverable_event_stream_state events) {\n" << indent @@ -305,7 +306,7 @@ std::string emit_gpu_cu_source(const Module& module_, const printer_options& opt << "for (auto p = begin; p<end; ++p) {\n" << indent << "if (p->mech_id==mech_id_) {\n" << indent << "auto tid_ = p->mech_index;\n" - << "auto weight = p->weight;\n" + << "auto " << weight_arg << " = p->weight;\n" << cuprint(net_receive->body()) << popindent << "}\n" << popindent << "}\n"