[pypy-commit] pypy reflex-support: advanced tests setup and template support in CINT backend
wlav
noreply at buildbot.pypy.org
Tue Aug 30 22:55:38 CEST 2011
Author: Wim Lavrijsen <WLavrijsen at 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
More information about the pypy-commit
mailing list