Mana
GlobalAddressResolver.h
Go to the documentation of this file.
1 
8 #pragma once
9 #include "../runner/common/Setup.h"
10 #include <memory>
11 #include <vector>
12 
13 namespace mana
14 {
15  class CodeBuffer;
16  class Symbol;
17 
18  /*
19  グローバルアドレスを解決します
20  */
22  {
23  public:
24  explicit GlobalAddressResolver(const std::shared_ptr<CodeBuffer>& codeBuffer);
26 
27  void AddCallList(const int32_t address, const std::shared_ptr<Symbol>& symbol);
28  void ResolveAddress() const;
29 
30  private:
31  struct CallList final
32  {
33  std::shared_ptr<Symbol> mSymbol;
34  int32_t mAddress;
35 
36  CallList(const int32_t address, const std::shared_ptr<Symbol>& symbol)
37  : mSymbol(symbol)
38  , mAddress(address)
39  {}
40  };
41 
42  std::shared_ptr<CodeBuffer> mCodeBuffer;
43  std::vector<std::unique_ptr<CallList>> mCallList;
44  };
45 }
Definition: GlobalAddressResolver.h:22
void ResolveAddress() const
Definition: GlobalAddressResolver.cpp:24
GlobalAddressResolver(const std::shared_ptr< CodeBuffer > &codeBuffer)
Definition: GlobalAddressResolver.cpp:14
void AddCallList(const int32_t address, const std::shared_ptr< Symbol > &symbol)
Definition: GlobalAddressResolver.cpp:19
Definition: CodeBuffer.cpp:12
Definition: Noncopyable.h:18