diff options
author | Hugo Lima <hugo.lima@openbossa.org> | 2010-01-14 22:34:47 -0200 |
---|---|---|
committer | Hugo Lima <hugo.lima@openbossa.org> | 2010-01-14 22:41:10 -0200 |
commit | 2ad0dcc5860d9e791e6036a525b0114b7106031b (patch) | |
tree | 3164d87465c0f0288157f1140320729eb0f3882f /libshiboken | |
parent | ff5d72bd2d994050823382d1f884c62e41824eb3 (diff) |
Added SbkDbg stream class, used to print debug messages.
Reviewed by Marcelo Lira <marcelo.lira@openbossa.org>
Diffstat (limited to 'libshiboken')
-rw-r--r-- | libshiboken/basewrapper.cpp | 4 | ||||
-rw-r--r-- | libshiboken/sbkdbg.h | 100 | ||||
-rw-r--r-- | libshiboken/typeresolver.cpp | 8 |
3 files changed, 107 insertions, 5 deletions
diff --git a/libshiboken/basewrapper.cpp b/libshiboken/basewrapper.cpp index b0f1b9c0a..afaeb29e2 100644 --- a/libshiboken/basewrapper.cpp +++ b/libshiboken/basewrapper.cpp @@ -118,10 +118,6 @@ PyObject* SbkBaseWrapper_New(SbkBaseWrapperType* instanceType, TypeResolver* typeResolver = TypeResolver::get(typeName); if (typeResolver) instanceType = reinterpret_cast<SbkBaseWrapperType*>(typeResolver->pythonType()); - #ifndef NDEBUG - else - fprintf(stderr, "[SHIBOKEN] Can't find type resolver for %s.\n", typeName); - #endif } SbkBaseWrapper* self = reinterpret_cast<SbkBaseWrapper*>(SbkBaseWrapper_TpNew(reinterpret_cast<PyTypeObject*>(instanceType), 0, 0)); diff --git a/libshiboken/sbkdbg.h b/libshiboken/sbkdbg.h new file mode 100644 index 000000000..62dacb8a6 --- /dev/null +++ b/libshiboken/sbkdbg.h @@ -0,0 +1,100 @@ +/* +* This file is part of the Shiboken Python Bindings Generator project. +* +* Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +* +* Contact: PySide team <contact@pyside.org> +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public License +* version 2.1 as published by the Free Software Foundation. Please +* review the following information to ensure the GNU Lesser General +* Public License version 2.1 requirements will be met: +* http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +* +* As a special exception to the GNU Lesser General Public License +* version 2.1, the object code form of a "work that uses the Library" +* may incorporate material from a header file that is part of the +* Library. You may distribute such object code under terms of your +* choice, provided that the incorporated material (i) does not exceed +* more than 5% of the total size of the Library; and (ii) is limited to +* numerical parameters, data structure layouts, accessors, macros, +* inline functions and templates. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this program; if not, write to the Free Software +* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +* 02110-1301 USA +*/ + +#ifndef SBKDBG_H +#define SBKDBG_H + +#include <iostream> + +#ifndef NOCOLOR + #define COLOR_END "\033[0m" + #define COLOR_WHITE "\033[1;37m" + #define COLOR_YELLOW "\033[1;33m" + #define COLOR_GREEN "\033[0;32m" + #define COLOR_RED "\033[0;31m" +#else + #define COLOR_END "" + #define COLOR_WHITE "" + #define COLOR_YELLOW "" + #define COLOR_GREEN "" + #define COLOR_RED "" +#endif + +#ifndef NDEBUG + +class BaseLogger +{ +public: + BaseLogger(std::ostream& output, const char* function, const char* context) + : m_stream(output), m_function(function), m_context(context) {} + ~BaseLogger() + { + m_stream << std::endl; + } + std::ostream& operator()() { return m_stream; }; + template <typename T> + std::ostream& operator<<(const T& t) + { + m_stream << '['; + if (m_context[0]) + m_stream << COLOR_GREEN << m_context << COLOR_END << "|"; + return m_stream << COLOR_WHITE << m_function << COLOR_END << "] " << t; + } +private: + std::ostream& m_stream; + const char* m_function; + const char* m_context; +}; + +class _SbkDbg : public BaseLogger +{ +public: + _SbkDbg(const char* function, const char* context = "") : BaseLogger(std::cout, function, context) {} +}; + +#ifdef __GNUG__ +#define SbkDbg(X) _SbkDbg(__PRETTY_FUNCTION__, X"") +#else +#define SbkDbg(X) _SbkDbg(__FUNCTION__, X"") +#endif + +#else + +struct SbkDbg { + template <typename T> + SbkDbg& operator<<(const T&) { return *this; } +}; + +#endif +#endif // LOGGER_H diff --git a/libshiboken/typeresolver.cpp b/libshiboken/typeresolver.cpp index 3ed3daf67..f4a95255c 100644 --- a/libshiboken/typeresolver.cpp +++ b/libshiboken/typeresolver.cpp @@ -34,6 +34,7 @@ #include "typeresolver.h" #include "google/dense_hash_map" +#include "sbkdbg.h" #include <cstdlib> using namespace Shiboken; @@ -95,7 +96,12 @@ TypeResolver::~TypeResolver() TypeResolver* TypeResolver::get(const char* typeName) { TypeResolverMap::const_iterator it = typeResolverMap.find(typeName); - return it == typeResolverMap.end() ? 0 : it->second; + if (it != typeResolverMap.end()) { + return it->second; + } else { + SbkDbg() << "Can't find type resolver for " << typeName; + return 0; + } } const char* TypeResolver::typeName() const |