1f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//===- RpnEvaluator.h -----------------------------------------------------===//
2f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//
3f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//                     The MCLinker Project
4f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//
5f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// This file is distributed under the University of Illinois Open Source
6f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// License. See LICENSE.TXT for details.
7f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//
8f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//===----------------------------------------------------------------------===//
937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#ifndef MCLD_SCRIPT_RPNEVALUATOR_H_
1037b74a387bb3993387029859c2d9d051c41c724eStephen Hines#define MCLD_SCRIPT_RPNEVALUATOR_H_
1137b74a387bb3993387029859c2d9d051c41c724eStephen Hines
1237b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include <cstdint>
13f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
14f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hinesnamespace mcld {
15f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
16f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hinesclass Module;
1737b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass RpnExpr;
18f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hinesclass TargetLDBackend;
19f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
20f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines/** \class RpnEvaluator
21f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines *  \brief RpnEvaluator evaluate a rpn expression
22f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines */
2337b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass RpnEvaluator {
2437b74a387bb3993387029859c2d9d051c41c724eStephen Hines public:
25f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  RpnEvaluator(const Module& pModule, const TargetLDBackend& pBackend);
26f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
27f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  // evaluate a valid expression and set the value in the second parameter
28f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  bool eval(const RpnExpr& pExpr, uint64_t& pResult);
29f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
3037b74a387bb3993387029859c2d9d051c41c724eStephen Hines private:
31f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  const Module& m_Module;
32f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  const TargetLDBackend& m_Backend;
33f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines};
34f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
3537b74a387bb3993387029859c2d9d051c41c724eStephen Hines}  // namespace mcld
36f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
3737b74a387bb3993387029859c2d9d051c41c724eStephen Hines#endif  // MCLD_SCRIPT_RPNEVALUATOR_H_
38