187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines//===- ScriptCommand.h ----------------------------------------------------===//
287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines//
387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines//                     The MCLinker Project
487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines//
587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines// This file is distributed under the University of Illinois Open Source
687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines// License. See LICENSE.TXT for details.
787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines//
887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines//===----------------------------------------------------------------------===//
937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#ifndef MCLD_SCRIPT_SCRIPTCOMMAND_H_
1037b74a387bb3993387029859c2d9d051c41c724eStephen Hines#define MCLD_SCRIPT_SCRIPTCOMMAND_H_
1187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
1287f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesnamespace mcld {
1387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
1487f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesclass Module;
1587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
1687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/** \class ScriptCommand
1787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines *  \brief This class defines the interfaces to a script command.
1887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines */
1937b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass ScriptCommand {
2037b74a387bb3993387029859c2d9d051c41c724eStephen Hines public:
2187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  enum Kind {
2237b74a387bb3993387029859c2d9d051c41c724eStephen Hines    ASSERT,
2337b74a387bb3993387029859c2d9d051c41c724eStephen Hines    ASSIGNMENT,
2487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines    ENTRY,
2587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines    GROUP,
2637b74a387bb3993387029859c2d9d051c41c724eStephen Hines    INPUT,
2737b74a387bb3993387029859c2d9d051c41c724eStephen Hines    INPUT_SECT_DESC,
2887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines    OUTPUT,
2987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines    OUTPUT_ARCH,
3037b74a387bb3993387029859c2d9d051c41c724eStephen Hines    OUTPUT_FORMAT,
3137b74a387bb3993387029859c2d9d051c41c724eStephen Hines    SEARCH_DIR,
3287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines    OUTPUT_SECT_DESC,
3337b74a387bb3993387029859c2d9d051c41c724eStephen Hines    SECTIONS
3487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  };
3587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
3637b74a387bb3993387029859c2d9d051c41c724eStephen Hines protected:
3737b74a387bb3993387029859c2d9d051c41c724eStephen Hines  explicit ScriptCommand(Kind pKind) : m_Kind(pKind) {}
3887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
3937b74a387bb3993387029859c2d9d051c41c724eStephen Hines public:
4087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  virtual ~ScriptCommand() = 0;
4187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
4287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  virtual void dump() const = 0;
4387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
4487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  virtual void activate(Module&) = 0;
4587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
4687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  Kind getKind() const { return m_Kind; }
4787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
4837b74a387bb3993387029859c2d9d051c41c724eStephen Hines private:
4987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  Kind m_Kind;
5087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines};
5187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
5237b74a387bb3993387029859c2d9d051c41c724eStephen Hines}  // namespace mcld
5387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
5437b74a387bb3993387029859c2d9d051c41c724eStephen Hines#endif  // MCLD_SCRIPT_SCRIPTCOMMAND_H_
55