本文整理汇总了C++中llvm::StringRef::str方法的典型用法代码示例。如果您正苦于以下问题:C++ StringRef::str方法的具体用法?C++ StringRef::str怎么用?C++ StringRef::str使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类llvm::StringRef
的用法示例。
在下文中一共展示了StringRef::str方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: actOnICommand
void MetaSema::actOnICommand(llvm::StringRef path) const {
if (path.empty())
m_Interpreter.DumpIncludePath();
else
m_Interpreter.AddIncludePath(path.str());
}
示例2: AddModule
PythonModule PythonModule::AddModule(llvm::StringRef module) {
std::string str = module.str();
return PythonModule(PyRefType::Borrowed, PyImport_AddModule(str.c_str()));
}
示例3: AddName
bool Breakpoint::AddName(llvm::StringRef new_name) {
m_name_list.insert(new_name.str().c_str());
return true;
}
示例4: createOptionalString
static llvm::Optional<std::string> createOptionalString(const llvm::StringRef &value)
{
const std::string &string = value.str();
return string.size() ? llvm::Optional<std::string>(string) : llvm::Optional<std::string>();
}
示例5: verifyFormat
static void verifyFormat(
llvm::StringRef Code,
const FormatStyle &Style = getGoogleStyle(FormatStyle::LK_JavaScript)) {
EXPECT_EQ(Code.str(), format(test::messUp(Code), Style));
}
示例6: outputFile
ProtoBufExport::ProtoBufExport(std::FILE *file, llvm::StringRef const targetName, clang::CompilerInstance const &ci)
: outputFile(file), out(outputFile.get()), mapper(out, ci) {
ct::proto::Prelude prelude;
prelude.set_targetfile(targetName.str());
out.writeMessage<ct::proto::Prelude>(prelude);
}
示例7: assert
ExecutionContext::ExecutionResult
ExecutionContext::executeFunction(llvm::StringRef funcname,
const clang::ASTContext& Ctx,
clang::QualType retType,
StoredValueRef* returnValue)
{
// Call a function without arguments, or with an SRet argument, see SRet below
if (!m_CxaAtExitRemapped) {
// Rewire atexit:
llvm::Function* atExit = m_engine->FindFunctionNamed("__cxa_atexit");
llvm::Function* clingAtExit
= m_engine->FindFunctionNamed("cling_cxa_atexit");
if (atExit && clingAtExit) {
void* clingAtExitAddr = m_engine->getPointerToFunction(clingAtExit);
assert(clingAtExitAddr && "cannot find cling_cxa_atexit");
m_engine->updateGlobalMapping(atExit, clingAtExitAddr);
m_CxaAtExitRemapped = true;
}
}
// We don't care whether something was unresolved before.
m_unresolvedSymbols.clear();
llvm::Function* f = m_engine->FindFunctionNamed(funcname.str().c_str());
if (!f) {
llvm::errs() << "ExecutionContext::executeFunction: "
"could not find function named " << funcname << '\n';
return kExeFunctionNotCompiled;
}
m_engine->getPointerToFunction(f);
// check if there is any unresolved symbol in the list
if (!m_unresolvedSymbols.empty()) {
llvm::SmallVector<llvm::Function*, 100> funcsToFree;
for (std::set<std::string>::const_iterator i = m_unresolvedSymbols.begin(),
e = m_unresolvedSymbols.end(); i != e; ++i) {
llvm::errs() << "ExecutionContext::executeFunction: symbol '" << *i
<< "' unresolved while linking function '" << funcname
<< "'!\n";
llvm::Function *ff = m_engine->FindFunctionNamed(i->c_str());
assert(ff && "cannot find function to free");
funcsToFree.push_back(ff);
}
freeCallersOfUnresolvedSymbols(funcsToFree, m_engine.get());
m_unresolvedSymbols.clear();
return kExeUnresolvedSymbols;
}
std::vector<llvm::GenericValue> args;
bool wantReturn = (returnValue);
StoredValueRef aggregateRet;
if (f->hasStructRetAttr()) {
// Function expects to receive the storage for the returned aggregate as
// first argument. Allocate returnValue:
aggregateRet = StoredValueRef::allocate(Ctx, retType, f->getReturnType());
if (returnValue) {
*returnValue = aggregateRet;
} else {
returnValue = &aggregateRet;
}
args.push_back(returnValue->get().getGV());
// will get set as arg0, must not assign.
wantReturn = false;
}
if (wantReturn) {
llvm::GenericValue gvRet = m_engine->runFunction(f, args);
// rescue the ret value (which might be aggregate) from the stack
*returnValue = StoredValueRef::bitwiseCopy(Ctx, Value(gvRet, retType));
} else {
m_engine->runFunction(f, args);
}
return kExeSuccess;
}
示例8: in
Interpreter::CompilationResult
MetaProcessor::readInputFromFile(llvm::StringRef filename,
Value* result,
bool ignoreOutmostBlock /*=false*/) {
{
// check that it's not binary:
std::ifstream in(filename.str().c_str(), std::ios::in | std::ios::binary);
char magic[1024] = {0};
in.read(magic, sizeof(magic));
size_t readMagic = in.gcount();
if (readMagic >= 4) {
llvm::StringRef magicStr(magic,in.gcount());
llvm::sys::fs::file_magic fileType
= llvm::sys::fs::identify_magic(magicStr);
if (fileType != llvm::sys::fs::file_magic::unknown) {
llvm::errs() << "Error in cling::MetaProcessor: "
"cannot read input from a binary file!\n";
return Interpreter::kFailure;
}
unsigned printable = 0;
for (size_t i = 0; i < readMagic; ++i)
if (isprint(magic[i]))
++printable;
if (10 * printable < 5 * readMagic) {
// 50% printable for ASCII files should be a safe guess.
llvm::errs() << "Error in cling::MetaProcessor: "
"cannot read input from a (likely) binary file!\n" << printable;
return Interpreter::kFailure;
}
}
}
std::ifstream in(filename.str().c_str());
in.seekg(0, std::ios::end);
size_t size = in.tellg();
std::string content(size, ' ');
in.seekg(0);
in.read(&content[0], size);
if (ignoreOutmostBlock && !content.empty()) {
static const char whitespace[] = " \t\r\n";
std::string::size_type posNonWS = content.find_first_not_of(whitespace);
// Handle comments before leading {
while (content[posNonWS] == '/' && content[posNonWS+1] == '/') {
// Remove the comment line
posNonWS = content.find_first_of('\n', posNonWS+2)+1;
}
std::string::size_type replaced = posNonWS;
if (posNonWS != std::string::npos) {
if (content[posNonWS] == '{') {
// hide the curly brace:
content[posNonWS] = ' ';
// and the matching closing '}'
posNonWS = content.find_last_not_of(whitespace);
if (posNonWS != std::string::npos) {
if (content[posNonWS] == ';' && content[posNonWS-1] == '}') {
content[posNonWS--] = ' '; // replace ';' and enter next if
}
if (content[posNonWS] == '}') {
content[posNonWS] = ' '; // replace '}'
} else {
std::string::size_type posComment = content.find_last_of('}');
if (content[posComment] == '}') {
content[posComment] = ' '; // replace '}'
}
posComment = content.find_first_not_of(whitespace, posComment);
if (content[posComment] == '/' && content[posComment+1] == '/') {
// More text (comments) are okay after the last '}', but
// we can not easily find it to remove it (so we need to upgrade
// this code to better handle the case with comments or
// preprocessor code before and after the leading { and
// trailing })
while (posComment <= posNonWS) {
content[posComment++] = ' '; // replace '}' and comment
}
} else {
content[replaced] = '{';
// By putting the '{' back, we keep the code as consistent as
// the user wrote it ... but we should still warn that we not
// goint to treat this file an unamed macro.
llvm::errs()
<< "Warning in cling::MetaProcessor: can not find the closing '}', "
<< llvm::sys::path::filename(filename)
<< " is not handled as an unamed script!\n";
} // did not find '}''
} // remove comments after the trailing '}'
} // find '}'
} // have '{'
} // have non-whitespace
} // ignore outmost block
std::string strFilename(filename.str());
m_CurrentlyExecutingFile = strFilename;
bool topmost = !m_TopExecutingFile.data();
if (topmost)
m_TopExecutingFile = m_CurrentlyExecutingFile;
Interpreter::CompilationResult ret;
// We don't want to value print the results of a unnamed macro.
content = "#line 2 \"" + filename.str() + "\" \n" + content;
//.........这里部分代码省略.........
示例9: FileInfo
/// \brief Constructor.
FileInfo(llvm::StringRef Filename,
llvm::StringRef FileContents)
: Name(Filename.str()),
Contents(llvm::MemoryBuffer::getMemBuffer(FileContents, "", false))
{}
示例10: verifyFormat
static void verifyFormat(
llvm::StringRef Code,
const FormatStyle &Style = getGoogleStyle(FormatStyle::LK_Java)) {
EXPECT_EQ(Code.str(), format(Code, Style)) << "Expected code is not stable";
EXPECT_EQ(Code.str(), format(test::messUp(Code), Style));
}
示例11: appendArgument
// Append a string object argument to the top trace item.
void PPCallbacksTracker::appendArgument(const char *Name,
llvm::StringRef Value) {
appendArgument(Name, Value.str());
}
示例12: SetOptionValue
Status OptionGroupValueObjectDisplay::SetOptionValue(
uint32_t option_idx, llvm::StringRef option_arg,
ExecutionContext *execution_context) {
Status error;
const int short_option = g_option_table[option_idx].short_option;
bool success = false;
switch (short_option) {
case 'd': {
int32_t result;
result =
Args::StringToOptionEnum(option_arg, g_dynamic_value_types, 2, error);
if (error.Success())
use_dynamic = (lldb::DynamicValueType)result;
} break;
case 'T':
show_types = true;
break;
case 'L':
show_location = true;
break;
case 'F':
flat_output = true;
break;
case 'O':
use_objc = true;
break;
case 'R':
be_raw = true;
break;
case 'A':
ignore_cap = true;
break;
case 'D':
if (option_arg.getAsInteger(0, max_depth)) {
max_depth = UINT32_MAX;
error.SetErrorStringWithFormat("invalid max depth '%s'",
option_arg.str().c_str());
}
break;
case 'Z':
if (option_arg.getAsInteger(0, elem_count)) {
elem_count = UINT32_MAX;
error.SetErrorStringWithFormat("invalid element count '%s'",
option_arg.str().c_str());
}
break;
case 'P':
if (option_arg.getAsInteger(0, ptr_depth)) {
ptr_depth = 0;
error.SetErrorStringWithFormat("invalid pointer depth '%s'",
option_arg.str().c_str());
}
break;
case 'Y':
if (option_arg.empty())
no_summary_depth = 1;
else if (option_arg.getAsInteger(0, no_summary_depth)) {
no_summary_depth = 0;
error.SetErrorStringWithFormat("invalid pointer depth '%s'",
option_arg.str().c_str());
}
break;
case 'S':
use_synth = Args::StringToBoolean(option_arg, true, &success);
if (!success)
error.SetErrorStringWithFormat("invalid synthetic-type '%s'",
option_arg.str().c_str());
break;
case 'V':
run_validator = Args::StringToBoolean(option_arg, true, &success);
if (!success)
error.SetErrorStringWithFormat("invalid validate '%s'",
option_arg.str().c_str());
break;
default:
error.SetErrorStringWithFormat("unrecognized option '%c'", short_option);
break;
}
return error;
}
示例13: SetValueFromString
Error OptionValuePathMappings::SetValueFromString(llvm::StringRef value,
VarSetOperationType op) {
Error error;
Args args(value.str().c_str());
const size_t argc = args.GetArgumentCount();
switch (op) {
case eVarSetOperationClear:
Clear();
NotifyValueChanged();
break;
case eVarSetOperationReplace:
// Must be at least one index + 1 pair of paths, and the pair count must be
// even
if (argc >= 3 && (((argc - 1) & 1) == 0)) {
uint32_t idx =
StringConvert::ToUInt32(args.GetArgumentAtIndex(0), UINT32_MAX);
const uint32_t count = m_path_mappings.GetSize();
if (idx > count) {
error.SetErrorStringWithFormat(
"invalid file list index %u, index must be 0 through %u", idx,
count);
} else {
bool changed = false;
for (size_t i = 1; i < argc; i += 2, ++idx) {
const char *orginal_path = args.GetArgumentAtIndex(i);
const char *replace_path = args.GetArgumentAtIndex(i + 1);
if (VerifyPathExists(replace_path)) {
ConstString a(orginal_path);
ConstString b(replace_path);
if (!m_path_mappings.Replace(a, b, idx, m_notify_changes))
m_path_mappings.Append(a, b, m_notify_changes);
changed = true;
} else {
error.SetErrorStringWithFormat(
"the replacement path doesn't exist: \"%s\"", replace_path);
break;
}
}
if (changed)
NotifyValueChanged();
}
} else {
error.SetErrorString("replace operation takes an array index followed by "
"one or more path pairs");
}
break;
case eVarSetOperationAssign:
if (argc < 2 || (argc & 1)) {
error.SetErrorString("assign operation takes one or more path pairs");
break;
}
m_path_mappings.Clear(m_notify_changes);
// Fall through to append case
LLVM_FALLTHROUGH;
case eVarSetOperationAppend:
if (argc < 2 || (argc & 1)) {
error.SetErrorString("append operation takes one or more path pairs");
break;
} else {
bool changed = false;
for (size_t i = 0; i < argc; i += 2) {
const char *orginal_path = args.GetArgumentAtIndex(i);
const char *replace_path = args.GetArgumentAtIndex(i + 1);
if (VerifyPathExists(replace_path)) {
ConstString a(orginal_path);
ConstString b(replace_path);
m_path_mappings.Append(a, b, m_notify_changes);
m_value_was_set = true;
changed = true;
} else {
error.SetErrorStringWithFormat(
"the replacement path doesn't exist: \"%s\"", replace_path);
break;
}
}
if (changed)
NotifyValueChanged();
}
break;
case eVarSetOperationInsertBefore:
case eVarSetOperationInsertAfter:
// Must be at least one index + 1 pair of paths, and the pair count must be
// even
if (argc >= 3 && (((argc - 1) & 1) == 0)) {
uint32_t idx =
StringConvert::ToUInt32(args.GetArgumentAtIndex(0), UINT32_MAX);
const uint32_t count = m_path_mappings.GetSize();
if (idx > count) {
error.SetErrorStringWithFormat(
"invalid file list index %u, index must be 0 through %u", idx,
count);
} else {
bool changed = false;
if (op == eVarSetOperationInsertAfter)
++idx;
for (size_t i = 1; i < argc; i += 2, ++idx) {
//.........这里部分代码省略.........
示例14: demangle
static void demangle(llvm::raw_ostream &os, llvm::StringRef name,
swift::Demangle::Context &DCtx,
const swift::Demangle::DemangleOptions &options) {
bool hadLeadingUnderscore = false;
if (name.startswith("__")) {
hadLeadingUnderscore = true;
name = name.substr(1);
}
swift::Demangle::NodePointer pointer = DCtx.demangleSymbolAsNode(name);
if (ExpandMode || TreeOnly) {
llvm::outs() << "Demangling for " << name << '\n';
llvm::outs() << getNodeTreeAsString(pointer);
}
if (RemangleMode) {
std::string remangled;
if (!pointer || !(name.startswith(MANGLING_PREFIX_STR) ||
name.startswith("_S"))) {
// Just reprint the original mangled name if it didn't demangle or is in
// the old mangling scheme.
// This makes it easier to share the same database between the
// mangling and demangling tests.
remangled = name;
} else {
remangled = swift::Demangle::mangleNode(pointer);
// Also accept the future mangling prefix.
// TODO: remove the special "_S" handling as soon as MANGLING_PREFIX_STR
// gets "_S".
if (name.startswith("_S")) {
assert(remangled.find(MANGLING_PREFIX_STR) == 0);
remangled = "_S" + remangled.substr(3);
}
if (name != remangled) {
llvm::errs() << "\nError: re-mangled name \n " << remangled
<< "\ndoes not match original name\n " << name << '\n';
exit(1);
}
}
if (hadLeadingUnderscore) llvm::outs() << '_';
llvm::outs() << remangled;
return;
}
if (!TreeOnly) {
if (RemangleNew) {
if (!pointer) {
llvm::errs() << "Can't de-mangle " << name << '\n';
exit(1);
}
std::string remangled = swift::Demangle::mangleNode(pointer);
llvm::outs() << remangled;
return;
}
std::string string = swift::Demangle::nodeToString(pointer, options);
if (!CompactMode)
llvm::outs() << name << " ---> ";
if (Classify) {
std::string Classifications;
std::string cName = name.str();
if (!swift::Demangle::isSwiftSymbol(cName.c_str()))
Classifications += 'N';
if (DCtx.isThunkSymbol(name)) {
if (!Classifications.empty())
Classifications += ',';
Classifications += "T:";
Classifications += DCtx.getThunkTarget(name);
} else {
assert(DCtx.getThunkTarget(name).empty());
}
if (pointer && !DCtx.hasSwiftCallingConvention(name)) {
if (!Classifications.empty())
Classifications += ',';
Classifications += 'C';
}
if (!Classifications.empty())
llvm::outs() << '{' << Classifications << "} ";
}
llvm::outs() << (string.empty() ? name : llvm::StringRef(string));
}
DCtx.clear();
}
示例15: verifyFormat
static void verifyFormat(llvm::StringRef Code) {
EXPECT_EQ(Code.str(), format(Code)) << "Expected code is not stable";
EXPECT_EQ(Code.str(), format(test::messUp(Code)));
}