diff options
author | Sean Callanan <scallanan@apple.com> | 2011-09-26 18:45:31 +0000 |
---|---|---|
committer | Sean Callanan <scallanan@apple.com> | 2011-09-26 18:45:31 +0000 |
commit | 9bc838415e4b48f9c06bc2077de98e2826141149 (patch) | |
tree | 13ba88e597f8235ce63362804b391c80b39b5b1f /lldb/source/Expression/ExpressionSourceCode.cpp | |
parent | 2f9ca7b1f548312155c00d3361fd082840c5a2fe (diff) | |
download | llvm-9bc838415e4b48f9c06bc2077de98e2826141149.zip llvm-9bc838415e4b48f9c06bc2077de98e2826141149.tar.gz llvm-9bc838415e4b48f9c06bc2077de98e2826141149.tar.bz2 |
Factored out handling of the source code for an
expression into a separate class. This class
encapsulates wrapping the function as needed. I
am also moving from using booleans to indicate
what the expression's language should be to using
lldb::LanguageType instead.
llvm-svn: 140545
Diffstat (limited to 'lldb/source/Expression/ExpressionSourceCode.cpp')
-rw-r--r-- | lldb/source/Expression/ExpressionSourceCode.cpp | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/lldb/source/Expression/ExpressionSourceCode.cpp b/lldb/source/Expression/ExpressionSourceCode.cpp new file mode 100644 index 0000000..4b749b5 --- /dev/null +++ b/lldb/source/Expression/ExpressionSourceCode.cpp @@ -0,0 +1,88 @@ +//===-- ExpressionSourceCode.cpp --------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "lldb/Expression/ExpressionSourceCode.h" + +#include "lldb/Core/StreamString.h" + +using namespace lldb_private; + +bool ExpressionSourceCode::GetText (std::string &text, lldb::LanguageType wrapping_language, bool const_object) const +{ + if (m_wrap) + { + switch (wrapping_language) + { + default: + return false; + case lldb::eLanguageTypeC: + case lldb::eLanguageTypeC_plus_plus: + case lldb::eLanguageTypeObjC: + break; + } + + StreamString wrap_stream; + + switch (wrapping_language) + { + default: + break; + case lldb::eLanguageTypeC: + wrap_stream.Printf("%s \n" + "typedef unsigned short unichar;\n" + "void \n" + "%s(void *$__lldb_arg) \n" + "{ \n" + " %s; \n" + "} \n", + m_prefix.c_str(), + m_name.c_str(), + m_body.c_str()); + break; + case lldb::eLanguageTypeC_plus_plus: + wrap_stream.Printf("%s \n" + "typedef unsigned short unichar; \n" + "void \n" + "$__lldb_class::%s(void *$__lldb_arg) %s\n" + "{ \n" + " %s; \n" + "} \n", + m_prefix.c_str(), + m_name.c_str(), + (const_object ? "const" : ""), + m_body.c_str()); + break; + case lldb::eLanguageTypeObjC: + wrap_stream.Printf("%s \n" + "typedef unsigned short unichar; \n" + "@interface $__lldb_objc_class ($__lldb_category) \n" + "-(void)%s:(void *)$__lldb_arg; \n" + "@end \n" + "@implementation $__lldb_objc_class ($__lldb_category) \n" + "-(void)%s:(void *)$__lldb_arg \n" + "{ \n" + " %s; \n" + "} \n" + "@end \n", + m_prefix.c_str(), + m_name.c_str(), + m_name.c_str(), + m_body.c_str()); + break; + } + + text = wrap_stream.GetString(); + } + else + { + text.append(m_body); + } + + return true; +} |