blob: b1719b34c53ab76eb19d99bdd682abf45f678d5d [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
Sean Callanane6ea5fe2011-11-15 02:11:17 +000016bool ExpressionSourceCode::GetText (std::string &text, lldb::LanguageType wrapping_language, bool const_object, bool static_method) const
Sean Callanande3d27e2011-09-26 18:45:31 +000017{
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:
Sean Callanane6ea5fe2011-11-15 02:11:17 +000062 if (static_method)
63 {
64 wrap_stream.Printf("%s \n"
65 "typedef unsigned short unichar; \n"
66 "@interface $__lldb_objc_class ($__lldb_category) \n"
67 "+(void)%s:(void *)$__lldb_arg; \n"
68 "@end \n"
69 "@implementation $__lldb_objc_class ($__lldb_category) \n"
70 "+(void)%s:(void *)$__lldb_arg \n"
71 "{ \n"
72 " %s; \n"
73 "} \n"
74 "@end \n",
75 m_prefix.c_str(),
76 m_name.c_str(),
77 m_name.c_str(),
78 m_body.c_str());
79 }
80 else
81 {
82 wrap_stream.Printf("%s \n"
83 "typedef unsigned short unichar; \n"
84 "@interface $__lldb_objc_class ($__lldb_category) \n"
85 "-(void)%s:(void *)$__lldb_arg; \n"
86 "@end \n"
87 "@implementation $__lldb_objc_class ($__lldb_category) \n"
88 "-(void)%s:(void *)$__lldb_arg \n"
89 "{ \n"
90 " %s; \n"
91 "} \n"
92 "@end \n",
93 m_prefix.c_str(),
94 m_name.c_str(),
95 m_name.c_str(),
96 m_body.c_str());
97 }
Sean Callanande3d27e2011-09-26 18:45:31 +000098 break;
99 }
100
101 text = wrap_stream.GetString();
102 }
103 else
104 {
105 text.append(m_body);
106 }
107
108 return true;
109}