blob: 4b749b5c86dfae05ca27c1d70f361aa9a1b51c10 [file] [log] [blame]
Sean Callanande3d27e2011-09-26 18:45:31 +00001//===-- ExpressionSourceCode.cpp --------------------------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "lldb/Expression/ExpressionSourceCode.h"
11
12#include "lldb/Core/StreamString.h"
13
14using namespace lldb_private;
15
16bool ExpressionSourceCode::GetText (std::string &text, lldb::LanguageType wrapping_language, bool const_object) const
17{
18 if (m_wrap)
19 {
20 switch (wrapping_language)
21 {
22 default:
23 return false;
24 case lldb::eLanguageTypeC:
25 case lldb::eLanguageTypeC_plus_plus:
26 case lldb::eLanguageTypeObjC:
27 break;
28 }
29
30 StreamString wrap_stream;
31
32 switch (wrapping_language)
33 {
34 default:
35 break;
36 case lldb::eLanguageTypeC:
37 wrap_stream.Printf("%s \n"
38 "typedef unsigned short unichar;\n"
39 "void \n"
40 "%s(void *$__lldb_arg) \n"
41 "{ \n"
42 " %s; \n"
43 "} \n",
44 m_prefix.c_str(),
45 m_name.c_str(),
46 m_body.c_str());
47 break;
48 case lldb::eLanguageTypeC_plus_plus:
49 wrap_stream.Printf("%s \n"
50 "typedef unsigned short unichar; \n"
51 "void \n"
52 "$__lldb_class::%s(void *$__lldb_arg) %s\n"
53 "{ \n"
54 " %s; \n"
55 "} \n",
56 m_prefix.c_str(),
57 m_name.c_str(),
58 (const_object ? "const" : ""),
59 m_body.c_str());
60 break;
61 case lldb::eLanguageTypeObjC:
62 wrap_stream.Printf("%s \n"
63 "typedef unsigned short unichar; \n"
64 "@interface $__lldb_objc_class ($__lldb_category) \n"
65 "-(void)%s:(void *)$__lldb_arg; \n"
66 "@end \n"
67 "@implementation $__lldb_objc_class ($__lldb_category) \n"
68 "-(void)%s:(void *)$__lldb_arg \n"
69 "{ \n"
70 " %s; \n"
71 "} \n"
72 "@end \n",
73 m_prefix.c_str(),
74 m_name.c_str(),
75 m_name.c_str(),
76 m_body.c_str());
77 break;
78 }
79
80 text = wrap_stream.GetString();
81 }
82 else
83 {
84 text.append(m_body);
85 }
86
87 return true;
88}