Author: Wim Lavrijsen <wlavrij...@lbl.gov> Branch: reflex-support Changeset: r46932:0944ad527358 Date: 2011-08-30 11:56 -0700 http://bitbucket.org/pypy/pypy/changeset/0944ad527358/
Log: advanced tests setup and template support in CINT backend diff --git a/.hgignore b/.hgignore --- a/.hgignore +++ b/.hgignore @@ -2,6 +2,7 @@ *.py[co] *~ .*.swp +*.so syntax: regexp ^testresult$ diff --git a/pypy/module/cppyy/src/cintcwrapper.cxx b/pypy/module/cppyy/src/cintcwrapper.cxx --- a/pypy/module/cppyy/src/cintcwrapper.cxx +++ b/pypy/module/cppyy/src/cintcwrapper.cxx @@ -108,7 +108,18 @@ } cppyy_typehandle_t cppyy_get_templatehandle(const char* template_name) { - return cppyy_get_typehandle(template_name); + ClassRefIndices_t::iterator icr = g_classref_indices.find(template_name); + if (icr != g_classref_indices.end()) + return (cppyy_typehandle_t)icr->second; + + if (!G__defined_templateclass((char*)template_name)) + return (cppyy_typehandle_t)NULL; + + // the following yields a dummy TClassRef, but its name can be queried + ClassRefs_t::size_type sz = g_classrefs.size(); + g_classref_indices[template_name] = sz; + g_classrefs.push_back(TClassRef(template_name)); + return (cppyy_typehandle_t)sz; } diff --git a/pypy/module/cppyy/test/advancedcpp_LinkDef.h b/pypy/module/cppyy/test/advancedcpp_LinkDef.h new file mode 100644 --- /dev/null +++ b/pypy/module/cppyy/test/advancedcpp_LinkDef.h @@ -0,0 +1,50 @@ +#ifdef __CINT__ + +#pragma link off all globals; +#pragma link off all classes; +#pragma link off all functions; + +#pragma link C++ class defaulter; + +#pragma link C++ class base_class; +#pragma link C++ class derived_class; + +#pragma link C++ class a_class; +#pragma link C++ class b_class; +#pragma link C++ class c_class; +#pragma link C++ class c_class_1; +#pragma link C++ class c_class_2; +#pragma link C++ class d_class; + +#pragma link C++ function get_a(a_class&); +#pragma link C++ function get_b(b_class&); +#pragma link C++ function get_c(c_class&); +#pragma link C++ function get_d(d_class&); + +#pragma link C++ class T1<int>; +#pragma link C++ class T2<T1<int> >; +#pragma link C++ class T3<int, double>; +#pragma link C++ class T3<T1<int>, T2<T1<int> > >; +#pragma link C++ class a_ns::T4<int>; +#pragma link C++ class a_ns::T4<T3<int,double> >; +#pragma link C++ class a_ns::T4<a_ns::T4<T3<int, double> > >; + +#pragma link C++ namespace a_ns; +#pragma link C++ namespace a_ns::d_ns; +#pragma link C++ struct a_ns::b_class; +#pragma link C++ struct a_ns::b_class::c_class; +#pragma link C++ struct a_ns::d_ns::e_class; +#pragma link C++ struct a_ns::d_ns::e_class::f_class; +#pragma link C++ variable a_ns::g_a; +#pragma link C++ variable a_ns::d_ns::g_d; + +#pragma link C++ class some_abstract_class; +#pragma link C++ class some_concrete_class; + +#pragma link C++ class pointer_pass; + +#pragma link C++ class multi1; +#pragma link C++ class multi2; +#pragma link C++ class multi; + +#endif _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit