mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-09 11:25:55 +00:00
[llvm-c] Expose IRReader interface
Original patch by Chris Wailes git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194137 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
40
include/llvm-c/IRReader.h
Normal file
40
include/llvm-c/IRReader.h
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
/*===-- llvm-c/IRReader.h - IR Reader C Interface -----------------*- C -*-===*\
|
||||||
|
|* *|
|
||||||
|
|* The LLVM Compiler Infrastructure *|
|
||||||
|
|* *|
|
||||||
|
|* This file is distributed under the University of Illinois Open Source *|
|
||||||
|
|* License. See LICENSE.TXT for details. *|
|
||||||
|
|* *|
|
||||||
|
|*===----------------------------------------------------------------------===*|
|
||||||
|
|* *|
|
||||||
|
|* This file defines the C interface to the IR Reader. *|
|
||||||
|
|* *|
|
||||||
|
\*===----------------------------------------------------------------------===*/
|
||||||
|
|
||||||
|
#ifndef LLVM_C_IRREADER_H
|
||||||
|
#define LLVM_C_IRREADER_H
|
||||||
|
|
||||||
|
#include "llvm-c/Core.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read LLVM IR from a memory buffer and convert it into an in-memory Module
|
||||||
|
* object. Returns 0 on success.
|
||||||
|
* Optionally returns a human-readable description of any errors that
|
||||||
|
* occured during parsing IR. OutMessage must be disposed with
|
||||||
|
* LLVMDisposeMessage.
|
||||||
|
*
|
||||||
|
* @see llvm::ParseIR()
|
||||||
|
*/
|
||||||
|
LLVMBool LLVMParseIRInContext(LLVMContextRef ContextRef,
|
||||||
|
LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutM,
|
||||||
|
char **OutMessage);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
@@ -11,10 +11,15 @@
|
|||||||
#include "llvm/ADT/OwningPtr.h"
|
#include "llvm/ADT/OwningPtr.h"
|
||||||
#include "llvm/Assembly/Parser.h"
|
#include "llvm/Assembly/Parser.h"
|
||||||
#include "llvm/Bitcode/ReaderWriter.h"
|
#include "llvm/Bitcode/ReaderWriter.h"
|
||||||
|
#include "llvm/IR/LLVMContext.h"
|
||||||
|
#include "llvm/IR/Module.h"
|
||||||
#include "llvm/Support/MemoryBuffer.h"
|
#include "llvm/Support/MemoryBuffer.h"
|
||||||
#include "llvm/Support/SourceMgr.h"
|
#include "llvm/Support/SourceMgr.h"
|
||||||
#include "llvm/Support/system_error.h"
|
#include "llvm/Support/system_error.h"
|
||||||
#include "llvm/Support/Timer.h"
|
#include "llvm/Support/Timer.h"
|
||||||
|
#include "llvm/Support/raw_ostream.h"
|
||||||
|
#include "llvm-c/Core.h"
|
||||||
|
#include "llvm-c/IRReader.h"
|
||||||
|
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
@@ -87,3 +92,30 @@ Module *llvm::ParseIRFile(const std::string &Filename, SMDiagnostic &Err,
|
|||||||
|
|
||||||
return ParseIR(File.take(), Err, Context);
|
return ParseIR(File.take(), Err, Context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
// C API.
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
LLVMBool LLVMParseIRInContext(LLVMContextRef ContextRef,
|
||||||
|
LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutM,
|
||||||
|
char **OutMessage) {
|
||||||
|
SMDiagnostic Diag;
|
||||||
|
|
||||||
|
*OutM = wrap(ParseIR(unwrap(MemBuf), Diag, *unwrap(ContextRef)));
|
||||||
|
|
||||||
|
if(!*OutM) {
|
||||||
|
if (OutMessage) {
|
||||||
|
std::string buf;
|
||||||
|
raw_string_ostream os(buf);
|
||||||
|
|
||||||
|
Diag.print(NULL, os, false);
|
||||||
|
os.flush();
|
||||||
|
|
||||||
|
*OutMessage = strdup(buf.c_str());
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user