1254721Semaste//===-- ExpressionSourceCode.cpp --------------------------------*- C++ -*-===// 2254721Semaste// 3254721Semaste// The LLVM Compiler Infrastructure 4254721Semaste// 5254721Semaste// This file is distributed under the University of Illinois Open Source 6254721Semaste// License. See LICENSE.TXT for details. 7254721Semaste// 8254721Semaste//===----------------------------------------------------------------------===// 9254721Semaste 10254721Semaste#include "lldb/Expression/ExpressionSourceCode.h" 11254721Semaste 12254721Semaste#include "lldb/Core/StreamString.h" 13254721Semaste 14254721Semasteusing namespace lldb_private; 15254721Semaste 16254721Semasteconst char * 17254721SemasteExpressionSourceCode::g_expression_prefix = R"( 18254721Semaste#undef NULL 19254721Semaste#undef Nil 20254721Semaste#undef nil 21254721Semaste#undef YES 22254721Semaste#undef NO 23254721Semaste#define NULL (__null) 24254721Semaste#define Nil (__null) 25254721Semaste#define nil (__null) 26254721Semaste#define YES ((BOOL)1) 27254721Semaste#define NO ((BOOL)0) 28254721Semastetypedef signed char BOOL; 29254721Semastetypedef signed __INT8_TYPE__ int8_t; 30254721Semastetypedef unsigned __INT8_TYPE__ uint8_t; 31254721Semastetypedef signed __INT16_TYPE__ int16_t; 32254721Semastetypedef unsigned __INT16_TYPE__ uint16_t; 33254721Semastetypedef signed __INT32_TYPE__ int32_t; 34254721Semastetypedef unsigned __INT32_TYPE__ uint32_t; 35254721Semastetypedef signed __INT64_TYPE__ int64_t; 36254721Semastetypedef unsigned __INT64_TYPE__ uint64_t; 37254721Semastetypedef signed __INTPTR_TYPE__ intptr_t; 38254721Semastetypedef unsigned __INTPTR_TYPE__ uintptr_t; 39254721Semastetypedef __SIZE_TYPE__ size_t; 40254721Semastetypedef __PTRDIFF_TYPE__ ptrdiff_t; 41254721Semastetypedef unsigned short unichar; 42254721Semaste)"; 43254721Semaste 44254721Semaste 45254721Semastebool ExpressionSourceCode::GetText (std::string &text, lldb::LanguageType wrapping_language, bool const_object, bool static_method) const 46254721Semaste{ 47254721Semaste if (m_wrap) 48254721Semaste { 49254721Semaste switch (wrapping_language) 50254721Semaste { 51254721Semaste default: 52254721Semaste return false; 53254721Semaste case lldb::eLanguageTypeC: 54254721Semaste case lldb::eLanguageTypeC_plus_plus: 55254721Semaste case lldb::eLanguageTypeObjC: 56254721Semaste break; 57254721Semaste } 58254721Semaste 59254721Semaste StreamString wrap_stream; 60254721Semaste 61254721Semaste switch (wrapping_language) 62254721Semaste { 63254721Semaste default: 64254721Semaste break; 65254721Semaste case lldb::eLanguageTypeC: 66254721Semaste wrap_stream.Printf("%s \n" 67254721Semaste "%s \n" 68254721Semaste "void \n" 69254721Semaste "%s(void *$__lldb_arg) \n" 70254721Semaste "{ \n" 71254721Semaste " %s; \n" 72254721Semaste "} \n", 73254721Semaste g_expression_prefix, 74254721Semaste m_prefix.c_str(), 75254721Semaste m_name.c_str(), 76254721Semaste m_body.c_str()); 77254721Semaste break; 78254721Semaste case lldb::eLanguageTypeC_plus_plus: 79254721Semaste wrap_stream.Printf("%s \n" 80254721Semaste "%s \n" 81254721Semaste "void \n" 82254721Semaste "$__lldb_class::%s(void *$__lldb_arg) %s\n" 83254721Semaste "{ \n" 84254721Semaste " %s; \n" 85254721Semaste "} \n", 86254721Semaste g_expression_prefix, 87254721Semaste m_prefix.c_str(), 88254721Semaste m_name.c_str(), 89254721Semaste (const_object ? "const" : ""), 90254721Semaste m_body.c_str()); 91254721Semaste break; 92254721Semaste case lldb::eLanguageTypeObjC: 93254721Semaste if (static_method) 94254721Semaste { 95254721Semaste wrap_stream.Printf("%s \n" 96254721Semaste "%s \n" 97254721Semaste "@interface $__lldb_objc_class ($__lldb_category) \n" 98254721Semaste "+(void)%s:(void *)$__lldb_arg; \n" 99254721Semaste "@end \n" 100254721Semaste "@implementation $__lldb_objc_class ($__lldb_category) \n" 101254721Semaste "+(void)%s:(void *)$__lldb_arg \n" 102254721Semaste "{ \n" 103254721Semaste " %s; \n" 104254721Semaste "} \n" 105254721Semaste "@end \n", 106254721Semaste g_expression_prefix, 107254721Semaste m_prefix.c_str(), 108254721Semaste m_name.c_str(), 109254721Semaste m_name.c_str(), 110254721Semaste m_body.c_str()); 111254721Semaste } 112254721Semaste else 113254721Semaste { 114254721Semaste wrap_stream.Printf("%s \n" 115254721Semaste "%s \n" 116254721Semaste "@interface $__lldb_objc_class ($__lldb_category) \n" 117254721Semaste "-(void)%s:(void *)$__lldb_arg; \n" 118254721Semaste "@end \n" 119254721Semaste "@implementation $__lldb_objc_class ($__lldb_category) \n" 120254721Semaste "-(void)%s:(void *)$__lldb_arg \n" 121254721Semaste "{ \n" 122254721Semaste " %s; \n" 123254721Semaste "} \n" 124254721Semaste "@end \n", 125254721Semaste g_expression_prefix, 126254721Semaste m_prefix.c_str(), 127254721Semaste m_name.c_str(), 128254721Semaste m_name.c_str(), 129254721Semaste m_body.c_str()); 130254721Semaste } 131254721Semaste break; 132254721Semaste } 133254721Semaste 134254721Semaste text = wrap_stream.GetString(); 135254721Semaste } 136254721Semaste else 137254721Semaste { 138254721Semaste text.append(m_body); 139254721Semaste } 140254721Semaste 141254721Semaste return true; 142254721Semaste} 143