blob: 7004d28fa4c41f2048ec096c8d86f30a2a23a363 [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"
Sean Callanan90f78562012-05-09 21:27:03 +000038 "#undef NULL \n"
39 "#define NULL 0 \n"
Sean Callananf98dc352012-05-31 17:49:31 +000040 "#undef nil \n"
41 "#define nil (id)0 \n"
Sean Callanande3d27e2011-09-26 18:45:31 +000042 "typedef unsigned short unichar;\n"
43 "void \n"
44 "%s(void *$__lldb_arg) \n"
45 "{ \n"
46 " %s; \n"
47 "} \n",
48 m_prefix.c_str(),
49 m_name.c_str(),
50 m_body.c_str());
51 break;
52 case lldb::eLanguageTypeC_plus_plus:
53 wrap_stream.Printf("%s \n"
Sean Callanan90f78562012-05-09 21:27:03 +000054 "#undef NULL \n"
55 "#define NULL 0 \n"
Sean Callananf98dc352012-05-31 17:49:31 +000056 "#undef nil \n"
57 "#define nil (id)0 \n"
Sean Callanande3d27e2011-09-26 18:45:31 +000058 "typedef unsigned short unichar; \n"
59 "void \n"
60 "$__lldb_class::%s(void *$__lldb_arg) %s\n"
61 "{ \n"
62 " %s; \n"
63 "} \n",
64 m_prefix.c_str(),
65 m_name.c_str(),
66 (const_object ? "const" : ""),
67 m_body.c_str());
68 break;
69 case lldb::eLanguageTypeObjC:
Sean Callanane6ea5fe2011-11-15 02:11:17 +000070 if (static_method)
71 {
72 wrap_stream.Printf("%s \n"
Sean Callanan90f78562012-05-09 21:27:03 +000073 "#undef NULL \n"
74 "#define NULL 0 \n"
Sean Callananf98dc352012-05-31 17:49:31 +000075 "#undef nil \n"
76 "#define nil (id)0 \n"
Sean Callanane6ea5fe2011-11-15 02:11:17 +000077 "typedef unsigned short unichar; \n"
78 "@interface $__lldb_objc_class ($__lldb_category) \n"
79 "+(void)%s:(void *)$__lldb_arg; \n"
80 "@end \n"
81 "@implementation $__lldb_objc_class ($__lldb_category) \n"
82 "+(void)%s:(void *)$__lldb_arg \n"
83 "{ \n"
84 " %s; \n"
85 "} \n"
86 "@end \n",
87 m_prefix.c_str(),
88 m_name.c_str(),
89 m_name.c_str(),
90 m_body.c_str());
91 }
92 else
93 {
Sean Callanan90f78562012-05-09 21:27:03 +000094 wrap_stream.Printf("%s \n"
95 "#undef NULL \n"
96 "#define NULL 0 \n"
Sean Callananf98dc352012-05-31 17:49:31 +000097 "#undef nil \n"
98 "#define nil (id)0 \n"
Sean Callanane6ea5fe2011-11-15 02:11:17 +000099 "typedef unsigned short unichar; \n"
100 "@interface $__lldb_objc_class ($__lldb_category) \n"
101 "-(void)%s:(void *)$__lldb_arg; \n"
102 "@end \n"
103 "@implementation $__lldb_objc_class ($__lldb_category) \n"
104 "-(void)%s:(void *)$__lldb_arg \n"
105 "{ \n"
106 " %s; \n"
107 "} \n"
108 "@end \n",
109 m_prefix.c_str(),
110 m_name.c_str(),
111 m_name.c_str(),
112 m_body.c_str());
113 }
Sean Callanande3d27e2011-09-26 18:45:31 +0000114 break;
115 }
116
117 text = wrap_stream.GetString();
118 }
119 else
120 {
121 text.append(m_body);
122 }
123
124 return true;
125}