1326947Sdim//===--- LLVM.h - Import various common LLVM datatypes ----------*- C++ -*-===//
2326947Sdim//
3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4353358Sdim// See https://llvm.org/LICENSE.txt for license information.
5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6326947Sdim//
7326947Sdim//===----------------------------------------------------------------------===//
8326947Sdim//
9326947Sdim// This file forward declares and imports various common LLVM datatypes that
10326947Sdim// lld wants to use unqualified.
11326947Sdim//
12326947Sdim//===----------------------------------------------------------------------===//
13326947Sdim
14326947Sdim#ifndef LLD_COMMON_LLVM_H
15326947Sdim#define LLD_COMMON_LLVM_H
16326947Sdim
17326947Sdim// This should be the only #include, force #includes of all the others on
18326947Sdim// clients.
19326947Sdim#include "llvm/ADT/Hashing.h"
20360784Sdim#include "llvm/ADT/StringRef.h"
21326947Sdim#include "llvm/Support/Casting.h"
22326947Sdim#include <utility>
23326947Sdim
24326947Sdimnamespace llvm {
25344779Sdim// ADT's.
26344779Sdimclass raw_ostream;
27344779Sdimclass Error;
28344779Sdimclass StringRef;
29344779Sdimclass Twine;
30344779Sdimclass MemoryBuffer;
31344779Sdimclass MemoryBufferRef;
32344779Sdimtemplate <typename T> class ArrayRef;
33353358Sdimtemplate <typename T> class MutableArrayRef;
34344779Sdimtemplate <unsigned InternalLen> class SmallString;
35344779Sdimtemplate <typename T, unsigned N> class SmallVector;
36344779Sdimtemplate <typename T> class ErrorOr;
37344779Sdimtemplate <typename T> class Expected;
38326947Sdim
39344779Sdimnamespace object {
40344779Sdimclass WasmObjectFile;
41344779Sdimstruct WasmSection;
42344779Sdimstruct WasmSegment;
43344779Sdimclass WasmSymbol;
44344779Sdim} // namespace object
45326947Sdim
46344779Sdimnamespace wasm {
47344779Sdimstruct WasmEvent;
48344779Sdimstruct WasmEventType;
49344779Sdimstruct WasmFunction;
50344779Sdimstruct WasmGlobal;
51344779Sdimstruct WasmGlobalType;
52344779Sdimstruct WasmRelocation;
53344779Sdimstruct WasmSignature;
54344779Sdim} // namespace wasm
55344779Sdim} // namespace llvm
56326947Sdim
57326947Sdimnamespace lld {
58360784Sdimllvm::raw_ostream &outs();
59360784Sdimllvm::raw_ostream &errs();
60360784Sdim
61344779Sdim// Casting operators.
62344779Sdimusing llvm::cast;
63344779Sdimusing llvm::cast_or_null;
64344779Sdimusing llvm::dyn_cast;
65344779Sdimusing llvm::dyn_cast_or_null;
66344779Sdimusing llvm::isa;
67326947Sdim
68344779Sdim// ADT's.
69344779Sdimusing llvm::ArrayRef;
70353358Sdimusing llvm::MutableArrayRef;
71344779Sdimusing llvm::Error;
72344779Sdimusing llvm::ErrorOr;
73344779Sdimusing llvm::Expected;
74344779Sdimusing llvm::MemoryBuffer;
75344779Sdimusing llvm::MemoryBufferRef;
76344779Sdimusing llvm::raw_ostream;
77344779Sdimusing llvm::SmallString;
78344779Sdimusing llvm::SmallVector;
79344779Sdimusing llvm::StringRef;
80344779Sdimusing llvm::Twine;
81326947Sdim
82344779Sdimusing llvm::object::WasmObjectFile;
83344779Sdimusing llvm::object::WasmSection;
84344779Sdimusing llvm::object::WasmSegment;
85344779Sdimusing llvm::object::WasmSymbol;
86344779Sdimusing llvm::wasm::WasmEvent;
87344779Sdimusing llvm::wasm::WasmEventType;
88344779Sdimusing llvm::wasm::WasmFunction;
89344779Sdimusing llvm::wasm::WasmGlobal;
90344779Sdimusing llvm::wasm::WasmGlobalType;
91344779Sdimusing llvm::wasm::WasmRelocation;
92344779Sdimusing llvm::wasm::WasmSignature;
93326947Sdim} // end namespace lld.
94326947Sdim
95326947Sdimnamespace std {
96326947Sdimtemplate <> struct hash<llvm::StringRef> {
97326947Sdimpublic:
98326947Sdim  size_t operator()(const llvm::StringRef &s) const {
99326947Sdim    return llvm::hash_value(s);
100326947Sdim  }
101326947Sdim};
102344779Sdim} // namespace std
103326947Sdim
104326947Sdim#endif
105