diff --git a/DDCore/include/DD4hep/detail/BasicGrammar_inl.h b/DDCore/include/DD4hep/detail/BasicGrammar_inl.h index 059e21dc259104391e165097053ed50accaef0f9..89ade560df1d899db3cb4a990b760bf77cbbe316 100644 --- a/DDCore/include/DD4hep/detail/BasicGrammar_inl.h +++ b/DDCore/include/DD4hep/detail/BasicGrammar_inl.h @@ -211,6 +211,10 @@ namespace dd4hep { } // End namespace dd4hep #define DD4HEP_PARSER_GRAMMAR_CNAME(serial,name) namespace_dd4hep__grammar_##serial##_##name +#define DD4HEP_DEFINE_PARSER_GRAMMAR_TYPE(x) \ + namespace dd4hep { \ + template<> const BasicGrammar& BasicGrammar::instance<x>() { static Grammar<x> gr; return gr;}} + #define DD4HEP_DEFINE_PARSER_GRAMMAR_EVAL(x,func) \ namespace dd4hep { \ template<> int Grammar<x >::evaluate(void* ptr, const std::string& val) const { return func ((x*)ptr,val); }} @@ -219,11 +223,15 @@ namespace dd4hep { static const ::dd4hep::BasicGrammar& DD4HEP_PARSER_GRAMMAR_CNAME(serial,100) = ::dd4hep::BasicGrammar::instance<x>(); } #define DD4HEP_DEFINE_PARSER_GRAMMAR_SERIAL(serial,ctxt,x,func) \ + DD4HEP_DEFINE_PARSER_GRAMMAR_TYPE(x) \ DD4HEP_DEFINE_PARSER_GRAMMAR_EVAL(x,func) \ DD4HEP_DEFINE_PARSER_GRAMMAR_INSTANCE(DD4HEP_PARSER_GRAMMAR_CNAME(serial,ctxt),x) #define DD4HEP_DEFINE_PARSER_GRAMMAR_DUMMY_SERIAL(serial,x,func) \ PARSERS_DECL_FOR_SINGLE(x) \ + namespace dd4hep { namespace Parsers { \ + int parse(x&, const std::string&) { return 1; } }} \ + DD4HEP_DEFINE_PARSER_GRAMMAR_TYPE(x) \ DD4HEP_DEFINE_PARSER_GRAMMAR_EVAL(x,func) \ DD4HEP_DEFINE_PARSER_GRAMMAR_INSTANCE(serial,x) diff --git a/DDCore/src/ComponentProperties.cpp b/DDCore/src/ComponentProperties.cpp index 0ea8ca2bf2be3d2002b5927eefabc345453f9c39..d3eeb6d3f1460b4cf2e97fdd4ca2cf199c4641aa 100644 --- a/DDCore/src/ComponentProperties.cpp +++ b/DDCore/src/ComponentProperties.cpp @@ -250,6 +250,7 @@ namespace dd4hep { #include "DD4hep/detail/BasicGrammar_inl.h" #include "DD4hep/detail/ComponentProperties_inl.h" +DD4HEP_DEFINE_PARSER_GRAMMAR_TYPE(Property) namespace dd4hep {