forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			143 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			143 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			C++
		
	
	
	
//===-- ExpressionSourceCode.cpp --------------------------------*- C++ -*-===//
 | 
						|
//
 | 
						|
//                     The LLVM Compiler Infrastructure
 | 
						|
//
 | 
						|
// This file is distributed under the University of Illinois Open Source
 | 
						|
// License. See LICENSE.TXT for details.
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
 | 
						|
#include "lldb/Expression/ExpressionSourceCode.h"
 | 
						|
 | 
						|
#include "lldb/Core/StreamString.h"
 | 
						|
 | 
						|
using namespace lldb_private;
 | 
						|
 | 
						|
const char *
 | 
						|
ExpressionSourceCode::g_expression_prefix = R"(
 | 
						|
#undef NULL
 | 
						|
#undef Nil
 | 
						|
#undef nil
 | 
						|
#undef YES
 | 
						|
#undef NO
 | 
						|
#define NULL (__null)
 | 
						|
#define Nil (__null)
 | 
						|
#define nil (__null)
 | 
						|
#define YES ((BOOL)1)
 | 
						|
#define NO ((BOOL)0)
 | 
						|
typedef signed char BOOL;
 | 
						|
typedef signed __INT8_TYPE__ int8_t;
 | 
						|
typedef unsigned __INT8_TYPE__ uint8_t;
 | 
						|
typedef signed __INT16_TYPE__ int16_t;
 | 
						|
typedef unsigned __INT16_TYPE__ uint16_t;
 | 
						|
typedef signed __INT32_TYPE__ int32_t;
 | 
						|
typedef unsigned __INT32_TYPE__ uint32_t;
 | 
						|
typedef signed __INT64_TYPE__ int64_t;
 | 
						|
typedef unsigned __INT64_TYPE__ uint64_t;
 | 
						|
typedef signed __INTPTR_TYPE__ intptr_t;
 | 
						|
typedef unsigned __INTPTR_TYPE__ uintptr_t;
 | 
						|
typedef __SIZE_TYPE__ size_t;
 | 
						|
typedef __PTRDIFF_TYPE__ ptrdiff_t;
 | 
						|
typedef unsigned short unichar;
 | 
						|
)";
 | 
						|
 | 
						|
 | 
						|
bool ExpressionSourceCode::GetText (std::string &text, lldb::LanguageType wrapping_language, bool const_object, bool static_method) const
 | 
						|
{
 | 
						|
    if (m_wrap)
 | 
						|
    {
 | 
						|
        switch (wrapping_language) 
 | 
						|
        {
 | 
						|
        default:
 | 
						|
            return false;
 | 
						|
        case lldb::eLanguageTypeC:
 | 
						|
        case lldb::eLanguageTypeC_plus_plus:
 | 
						|
        case lldb::eLanguageTypeObjC:
 | 
						|
            break;
 | 
						|
        }
 | 
						|
        
 | 
						|
        StreamString wrap_stream;
 | 
						|
        
 | 
						|
        switch (wrapping_language) 
 | 
						|
        {
 | 
						|
        default:
 | 
						|
            break;
 | 
						|
        case lldb::eLanguageTypeC:
 | 
						|
            wrap_stream.Printf("%s                             \n"
 | 
						|
                               "%s                             \n"
 | 
						|
                               "void                           \n"
 | 
						|
                               "%s(void *$__lldb_arg)          \n"
 | 
						|
                               "{                              \n"
 | 
						|
                               "    %s;                        \n" 
 | 
						|
                               "}                              \n",
 | 
						|
                               g_expression_prefix,
 | 
						|
                               m_prefix.c_str(),
 | 
						|
                               m_name.c_str(),
 | 
						|
                               m_body.c_str());
 | 
						|
            break;
 | 
						|
        case lldb::eLanguageTypeC_plus_plus:
 | 
						|
            wrap_stream.Printf("%s                                     \n"
 | 
						|
                               "%s                                     \n"
 | 
						|
                               "void                                   \n"
 | 
						|
                               "$__lldb_class::%s(void *$__lldb_arg) %s\n"
 | 
						|
                               "{                                      \n"
 | 
						|
                               "    %s;                                \n" 
 | 
						|
                               "}                                      \n",
 | 
						|
                               g_expression_prefix,
 | 
						|
                               m_prefix.c_str(),
 | 
						|
                               m_name.c_str(),
 | 
						|
                               (const_object ? "const" : ""),
 | 
						|
                               m_body.c_str());
 | 
						|
            break;
 | 
						|
        case lldb::eLanguageTypeObjC:
 | 
						|
            if (static_method)
 | 
						|
            {
 | 
						|
                wrap_stream.Printf("%s                                                      \n"
 | 
						|
                                   "%s                                                      \n"
 | 
						|
                                   "@interface $__lldb_objc_class ($__lldb_category)        \n"
 | 
						|
                                   "+(void)%s:(void *)$__lldb_arg;                          \n"
 | 
						|
                                   "@end                                                    \n"
 | 
						|
                                   "@implementation $__lldb_objc_class ($__lldb_category)   \n"
 | 
						|
                                   "+(void)%s:(void *)$__lldb_arg                           \n"
 | 
						|
                                   "{                                                       \n"
 | 
						|
                                   "    %s;                                                 \n"
 | 
						|
                                   "}                                                       \n"
 | 
						|
                                   "@end                                                    \n",
 | 
						|
                                   g_expression_prefix,
 | 
						|
                                   m_prefix.c_str(),
 | 
						|
                                   m_name.c_str(),
 | 
						|
                                   m_name.c_str(),
 | 
						|
                                   m_body.c_str());
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                wrap_stream.Printf("%s                                                     \n"
 | 
						|
                                   "%s                                                     \n"
 | 
						|
                                   "@interface $__lldb_objc_class ($__lldb_category)       \n"
 | 
						|
                                   "-(void)%s:(void *)$__lldb_arg;                         \n"
 | 
						|
                                   "@end                                                   \n"
 | 
						|
                                   "@implementation $__lldb_objc_class ($__lldb_category)  \n"
 | 
						|
                                   "-(void)%s:(void *)$__lldb_arg                          \n"
 | 
						|
                                   "{                                                      \n"
 | 
						|
                                   "    %s;                                                \n"
 | 
						|
                                   "}                                                      \n"
 | 
						|
                                   "@end                                                   \n",
 | 
						|
                                   g_expression_prefix,
 | 
						|
                                   m_prefix.c_str(),
 | 
						|
                                   m_name.c_str(),
 | 
						|
                                   m_name.c_str(),
 | 
						|
                                   m_body.c_str());
 | 
						|
            }
 | 
						|
            break;
 | 
						|
        }
 | 
						|
        
 | 
						|
        text = wrap_stream.GetString();
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
        text.append(m_body);
 | 
						|
    }
 | 
						|
    
 | 
						|
    return true;
 | 
						|
}
 |