Initial import of lldb
Change-Id: Ib244e837bee349effa12b2ff6ffffbe3d730e929
This commit is contained in:
142
external/bsd/llvm/dist/lldb/source/Expression/ExpressionSourceCode.cpp
vendored
Normal file
142
external/bsd/llvm/dist/lldb/source/Expression/ExpressionSourceCode.cpp
vendored
Normal file
@@ -0,0 +1,142 @@
|
||||
//===-- 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;
|
||||
}
|
||||
Reference in New Issue
Block a user