~ubuntu-branches/ubuntu/quantal/llvm-3.1/quantal

« back to all changes in this revision

Viewing changes to lib/AsmParser/Parser.cpp

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2012-03-29 19:09:51 UTC
  • Revision ID: package-import@ubuntu.com-20120329190951-aq83ivog4cg8bxun
Tags: upstream-3.1~svn153643
ImportĀ upstreamĀ versionĀ 3.1~svn153643

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
//===- Parser.cpp - Main dispatch module for the Parser library -----------===//
 
2
//
 
3
//                     The LLVM Compiler Infrastructure
 
4
//
 
5
// This file is distributed under the University of Illinois Open Source
 
6
// License. See LICENSE.TXT for details.
 
7
//
 
8
//===----------------------------------------------------------------------===//
 
9
//
 
10
// This library implements the functionality defined in llvm/Assembly/Parser.h
 
11
//
 
12
//===----------------------------------------------------------------------===//
 
13
 
 
14
#include "llvm/Assembly/Parser.h"
 
15
#include "LLParser.h"
 
16
#include "llvm/Module.h"
 
17
#include "llvm/ADT/OwningPtr.h"
 
18
#include "llvm/Support/SourceMgr.h"
 
19
#include "llvm/Support/MemoryBuffer.h"
 
20
#include "llvm/Support/raw_ostream.h"
 
21
#include "llvm/Support/system_error.h"
 
22
#include <cstring>
 
23
using namespace llvm;
 
24
 
 
25
Module *llvm::ParseAssembly(MemoryBuffer *F,
 
26
                            Module *M,
 
27
                            SMDiagnostic &Err,
 
28
                            LLVMContext &Context) {
 
29
  SourceMgr SM;
 
30
  SM.AddNewSourceBuffer(F, SMLoc());
 
31
 
 
32
  // If we are parsing into an existing module, do it.
 
33
  if (M)
 
34
    return LLParser(F, SM, Err, M).Run() ? 0 : M;
 
35
 
 
36
  // Otherwise create a new module.
 
37
  OwningPtr<Module> M2(new Module(F->getBufferIdentifier(), Context));
 
38
  if (LLParser(F, SM, Err, M2.get()).Run())
 
39
    return 0;
 
40
  return M2.take();
 
41
}
 
42
 
 
43
Module *llvm::ParseAssemblyFile(const std::string &Filename, SMDiagnostic &Err,
 
44
                                LLVMContext &Context) {
 
45
  OwningPtr<MemoryBuffer> File;
 
46
  if (error_code ec = MemoryBuffer::getFileOrSTDIN(Filename.c_str(), File)) {
 
47
    Err = SMDiagnostic(Filename, SourceMgr::DK_Error,
 
48
                       "Could not open input file: " + ec.message());
 
49
    return 0;
 
50
  }
 
51
 
 
52
  return ParseAssembly(File.take(), 0, Err, Context);
 
53
}
 
54
 
 
55
Module *llvm::ParseAssemblyString(const char *AsmString, Module *M,
 
56
                                  SMDiagnostic &Err, LLVMContext &Context) {
 
57
  MemoryBuffer *F =
 
58
    MemoryBuffer::getMemBuffer(StringRef(AsmString, strlen(AsmString)),
 
59
                               "<string>");
 
60
 
 
61
  return ParseAssembly(F, M, Err, Context);
 
62
}