blob: 0c6683189ea5b33c2c350df00cca4a440698d6bc [file] [log] [blame]
Sean Callanan9bc83842011-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
Greg Clayton399107a2013-02-13 23:57:48 +000016const char *
17ExpressionSourceCode::g_expression_prefix = R"(
18#undef NULL
19#undef Nil
20#undef nil
21#undef YES
22#undef NO
23#define NULL (__null)
24#define Nil (__null)
25#define nil (__null)
26#define YES ((BOOL)1)
27#define NO ((BOOL)0)
28typedef signed char BOOL;
29typedef signed __INT8_TYPE__ int8_t;
30typedef unsigned __INT8_TYPE__ uint8_t;
31typedef signed __INT16_TYPE__ int16_t;
32typedef unsigned __INT16_TYPE__ uint16_t;
33typedef signed __INT32_TYPE__ int32_t;
34typedef unsigned __INT32_TYPE__ uint32_t;
35typedef signed __INT64_TYPE__ int64_t;
36typedef unsigned __INT64_TYPE__ uint64_t;
37typedef signed __INTPTR_TYPE__ intptr_t;
38typedef unsigned __INTPTR_TYPE__ uintptr_t;
39typedef __SIZE_TYPE__ size_t;
40typedef __PTRDIFF_TYPE__ ptrdiff_t;
41typedef unsigned short unichar;
42)";
Sean Callanana199e822012-09-13 23:35:30 +000043
44
Sean Callanand5c17ed2011-11-15 02:11:17 +000045bool ExpressionSourceCode::GetText (std::string &text, lldb::LanguageType wrapping_language, bool const_object, bool static_method) const
Sean Callanan9bc83842011-09-26 18:45:31 +000046{
47 if (m_wrap)
48 {
49 switch (wrapping_language)
50 {
51 default:
52 return false;
53 case lldb::eLanguageTypeC:
54 case lldb::eLanguageTypeC_plus_plus:
55 case lldb::eLanguageTypeObjC:
56 break;
57 }
58
59 StreamString wrap_stream;
60
61 switch (wrapping_language)
62 {
63 default:
64 break;
65 case lldb::eLanguageTypeC:
66 wrap_stream.Printf("%s \n"
Sean Callanana199e822012-09-13 23:35:30 +000067 "%s \n"
Sean Callanan9bc83842011-09-26 18:45:31 +000068 "void \n"
69 "%s(void *$__lldb_arg) \n"
70 "{ \n"
71 " %s; \n"
72 "} \n",
73 m_prefix.c_str(),
Greg Clayton399107a2013-02-13 23:57:48 +000074 g_expression_prefix,
Sean Callanan9bc83842011-09-26 18:45:31 +000075 m_name.c_str(),
76 m_body.c_str());
77 break;
78 case lldb::eLanguageTypeC_plus_plus:
79 wrap_stream.Printf("%s \n"
Sean Callanana199e822012-09-13 23:35:30 +000080 "%s \n"
Sean Callanan9bc83842011-09-26 18:45:31 +000081 "void \n"
82 "$__lldb_class::%s(void *$__lldb_arg) %s\n"
83 "{ \n"
84 " %s; \n"
85 "} \n",
86 m_prefix.c_str(),
Greg Clayton399107a2013-02-13 23:57:48 +000087 g_expression_prefix,
Sean Callanan9bc83842011-09-26 18:45:31 +000088 m_name.c_str(),
89 (const_object ? "const" : ""),
90 m_body.c_str());
91 break;
92 case lldb::eLanguageTypeObjC:
Sean Callanand5c17ed2011-11-15 02:11:17 +000093 if (static_method)
94 {
95 wrap_stream.Printf("%s \n"
Sean Callanana199e822012-09-13 23:35:30 +000096 "%s \n"
97 "@interface $__lldb_objc_class ($__lldb_category) \n"
98 "+(void)%s:(void *)$__lldb_arg; \n"
99 "@end \n"
100 "@implementation $__lldb_objc_class ($__lldb_category) \n"
101 "+(void)%s:(void *)$__lldb_arg \n"
102 "{ \n"
103 " %s; \n"
104 "} \n"
105 "@end \n",
106 m_prefix.c_str(),
Greg Clayton399107a2013-02-13 23:57:48 +0000107 g_expression_prefix,
Sean Callanana199e822012-09-13 23:35:30 +0000108 m_name.c_str(),
109 m_name.c_str(),
110 m_body.c_str());
Sean Callanand5c17ed2011-11-15 02:11:17 +0000111 }
112 else
113 {
Sean Callanan26e184d2012-05-09 21:27:03 +0000114 wrap_stream.Printf("%s \n"
Sean Callanana199e822012-09-13 23:35:30 +0000115 "%s \n"
Sean Callanand5c17ed2011-11-15 02:11:17 +0000116 "@interface $__lldb_objc_class ($__lldb_category) \n"
117 "-(void)%s:(void *)$__lldb_arg; \n"
118 "@end \n"
119 "@implementation $__lldb_objc_class ($__lldb_category) \n"
120 "-(void)%s:(void *)$__lldb_arg \n"
121 "{ \n"
122 " %s; \n"
123 "} \n"
124 "@end \n",
125 m_prefix.c_str(),
Greg Clayton399107a2013-02-13 23:57:48 +0000126 g_expression_prefix,
Sean Callanand5c17ed2011-11-15 02:11:17 +0000127 m_name.c_str(),
128 m_name.c_str(),
129 m_body.c_str());
130 }
Sean Callanan9bc83842011-09-26 18:45:31 +0000131 break;
132 }
133
134 text = wrap_stream.GetString();
135 }
136 else
137 {
138 text.append(m_body);
139 }
140
141 return true;
142}