1 //===--- LLVM.h - Import various common LLVM datatypes ----------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file forward declares and imports various common LLVM datatypes that
10 // lld wants to use unqualified.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef LLD_COMMON_LLVM_H
15 #define LLD_COMMON_LLVM_H
16 
17 // This should be the only #include, force #includes of all the others on
18 // clients.
19 #include "llvm/ADT/Hashing.h"
20 #include "llvm/ADT/StringRef.h"
21 #include "llvm/Support/Casting.h"
22 #include <utility>
23 
24 namespace llvm {
25 // ADT's.
26 class raw_ostream;
27 class Error;
28 class StringRef;
29 class Twine;
30 class MemoryBuffer;
31 class MemoryBufferRef;
32 template <typename T> class ArrayRef;
33 template <typename T> class MutableArrayRef;
34 template <unsigned InternalLen> class SmallString;
35 template <typename T, unsigned N> class SmallVector;
36 template <typename T> class ErrorOr;
37 template <typename T> class Expected;
38 
39 namespace object {
40 class WasmObjectFile;
41 struct WasmSection;
42 struct WasmSegment;
43 class WasmSymbol;
44 } // namespace object
45 
46 namespace wasm {
47 struct WasmEvent;
48 struct WasmEventType;
49 struct WasmFunction;
50 struct WasmGlobal;
51 struct WasmGlobalType;
52 struct WasmLimits;
53 struct WasmRelocation;
54 struct WasmSignature;
55 struct WasmTable;
56 struct WasmTableType;
57 } // namespace wasm
58 } // namespace llvm
59 
60 namespace lld {
61 llvm::raw_ostream &outs();
62 llvm::raw_ostream &errs();
63 
64 // Casting operators.
65 using llvm::cast;
66 using llvm::cast_or_null;
67 using llvm::dyn_cast;
68 using llvm::dyn_cast_or_null;
69 using llvm::isa;
70 
71 // ADT's.
72 using llvm::ArrayRef;
73 using llvm::MutableArrayRef;
74 using llvm::Error;
75 using llvm::ErrorOr;
76 using llvm::Expected;
77 using llvm::MemoryBuffer;
78 using llvm::MemoryBufferRef;
79 using llvm::raw_ostream;
80 using llvm::SmallString;
81 using llvm::SmallVector;
82 using llvm::StringRef;
83 using llvm::Twine;
84 
85 using llvm::object::WasmObjectFile;
86 using llvm::object::WasmSection;
87 using llvm::object::WasmSegment;
88 using llvm::object::WasmSymbol;
89 using llvm::wasm::WasmEvent;
90 using llvm::wasm::WasmEventType;
91 using llvm::wasm::WasmFunction;
92 using llvm::wasm::WasmGlobal;
93 using llvm::wasm::WasmGlobalType;
94 using llvm::wasm::WasmLimits;
95 using llvm::wasm::WasmRelocation;
96 using llvm::wasm::WasmSignature;
97 using llvm::wasm::WasmTable;
98 using llvm::wasm::WasmTableType;
99 } // end namespace lld.
100 
101 namespace std {
102 template <> struct hash<llvm::StringRef> {
103 public:
104   size_t operator()(const llvm::StringRef &s) const {
105     return llvm::hash_value(s);
106   }
107 };
108 } // namespace std
109 
110 #endif
111