blob: e33fd2db69ec3f1561831b551237504a7fe2a6e2 [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 Callananaafcd692012-09-13 23:35:30 +000016static const char *global_defines = "#undef NULL \n"
17 "#undef Nil \n"
18 "#undef nil \n"
19 "#undef YES \n"
20 "#undef NO \n"
21 "#define NULL ((int)0) \n"
22 "#define Nil ((Class)0) \n"
23 "#define nil ((id)0) \n"
24 "#define YES ((BOOL)1) \n"
25 "#define NO ((BOOL)0) \n"
26 "typedef int BOOL; \n"
27 "typedef unsigned short unichar; \n";
28
29
Sean Callanane6ea5fe2011-11-15 02:11:17 +000030bool ExpressionSourceCode::GetText (std::string &text, lldb::LanguageType wrapping_language, bool const_object, bool static_method) const
Sean Callanande3d27e2011-09-26 18:45:31 +000031{
32 if (m_wrap)
33 {
34 switch (wrapping_language)
35 {
36 default:
37 return false;
38 case lldb::eLanguageTypeC:
39 case lldb::eLanguageTypeC_plus_plus:
40 case lldb::eLanguageTypeObjC:
41 break;
42 }
43
44 StreamString wrap_stream;
45
46 switch (wrapping_language)
47 {
48 default:
49 break;
50 case lldb::eLanguageTypeC:
51 wrap_stream.Printf("%s \n"
Sean Callananaafcd692012-09-13 23:35:30 +000052 "%s \n"
Sean Callanande3d27e2011-09-26 18:45:31 +000053 "void \n"
54 "%s(void *$__lldb_arg) \n"
55 "{ \n"
56 " %s; \n"
57 "} \n",
58 m_prefix.c_str(),
Sean Callananaafcd692012-09-13 23:35:30 +000059 global_defines,
Sean Callanande3d27e2011-09-26 18:45:31 +000060 m_name.c_str(),
61 m_body.c_str());
62 break;
63 case lldb::eLanguageTypeC_plus_plus:
64 wrap_stream.Printf("%s \n"
Sean Callananaafcd692012-09-13 23:35:30 +000065 "%s \n"
Sean Callanande3d27e2011-09-26 18:45:31 +000066 "void \n"
67 "$__lldb_class::%s(void *$__lldb_arg) %s\n"
68 "{ \n"
69 " %s; \n"
70 "} \n",
71 m_prefix.c_str(),
Sean Callananaafcd692012-09-13 23:35:30 +000072 global_defines,
Sean Callanande3d27e2011-09-26 18:45:31 +000073 m_name.c_str(),
74 (const_object ? "const" : ""),
75 m_body.c_str());
76 break;
77 case lldb::eLanguageTypeObjC:
Sean Callanane6ea5fe2011-11-15 02:11:17 +000078 if (static_method)
79 {
80 wrap_stream.Printf("%s \n"
Sean Callananaafcd692012-09-13 23:35:30 +000081 "%s \n"
82 "@interface $__lldb_objc_class ($__lldb_category) \n"
83 "+(void)%s:(void *)$__lldb_arg; \n"
84 "@end \n"
85 "@implementation $__lldb_objc_class ($__lldb_category) \n"
86 "+(void)%s:(void *)$__lldb_arg \n"
87 "{ \n"
88 " %s; \n"
89 "} \n"
90 "@end \n",
91 m_prefix.c_str(),
92 global_defines,
93 m_name.c_str(),
94 m_name.c_str(),
95 m_body.c_str());
Sean Callanane6ea5fe2011-11-15 02:11:17 +000096 }
97 else
98 {
Sean Callanan90f78562012-05-09 21:27:03 +000099 wrap_stream.Printf("%s \n"
Sean Callananaafcd692012-09-13 23:35:30 +0000100 "%s \n"
Sean Callanane6ea5fe2011-11-15 02:11:17 +0000101 "@interface $__lldb_objc_class ($__lldb_category) \n"
102 "-(void)%s:(void *)$__lldb_arg; \n"
103 "@end \n"
104 "@implementation $__lldb_objc_class ($__lldb_category) \n"
105 "-(void)%s:(void *)$__lldb_arg \n"
106 "{ \n"
107 " %s; \n"
108 "} \n"
109 "@end \n",
110 m_prefix.c_str(),
Sean Callananaafcd692012-09-13 23:35:30 +0000111 global_defines,
Sean Callanane6ea5fe2011-11-15 02:11:17 +0000112 m_name.c_str(),
113 m_name.c_str(),
114 m_body.c_str());
115 }
Sean Callanande3d27e2011-09-26 18:45:31 +0000116 break;
117 }
118
119 text = wrap_stream.GetString();
120 }
121 else
122 {
123 text.append(m_body);
124 }
125
126 return true;
127}