root/trunk/compiler/cppAst/ast/identifiers/EnumIdentifier.hpp
| 7 | krennw | /**
  | 
      |
  *
  | 
      |||
  *                  OOAS Compiler - C++ AST
  | 
      |||
  *
  | 
      |||
  * Copyright 2015, AIT Austrian Institute of Technology.
  | 
      |||
  * All rights reserved.
  | 
      |||
  *
  | 
      |||
  * SEE THE "LICENSE" FILE FOR THE TERMS UNDER WHICH THIS FILE IS PROVIDED.
  | 
      |||
  *
  | 
      |||
  * If you modify the file please update the list of contributors below to in-
  | 
      |||
  * clude your name. Please also stick to the coding convention of using TABs
  | 
      |||
  * to do the basic (block-level) indentation and spaces for anything after
  | 
      |||
  * that. (Enable the display of special chars and it should be pretty obvious
  | 
      |||
  * what this means.) Also, remove all trailing whitespace.
  | 
      |||
  *
  | 
      |||
  * Contributors:
  | 
      |||
  *               Willibald Krenn (AIT)
  | 
      |||
  *               Stephan Zimmerer (AIT)
  | 
      |||
  *               Christoph Czurda (AIT)
  | 
      |||
  *
  | 
      |||
  */
  | 
      |||
| 2 | krennw | ||
#pragma once
  | 
      |||
#include <cstdint>
  | 
      |||
#include <ast/identifiers/ValueIdentifier.hpp>
  | 
      |||
#include <ast/IScope.hpp>
  | 
      |||
#include <ast/types/Type.hpp>
  | 
      |||
namespace Ast {
  | 
      |||
class EnumIdentifier final
  | 
      |||
	: public ValueIdentifier
  | 
      |||
{
  | 
      |||
protected:
  | 
      |||
	std::int32_t m_value;
  | 
      |||
	bool m_haveValue;
  | 
      |||
	EnumIdentifier() :
  | 
      |||
		ValueIdentifier(IdentifierKind::EnumIdentifier),
  | 
      |||
		m_value (-1),
  | 
      |||
		m_haveValue (false)
  | 
      |||
	{};
  | 
      |||
	EnumIdentifier(const EnumIdentifier& toCopy) :
  | 
      |||
		ValueIdentifier (toCopy),
  | 
      |||
		m_value (toCopy.m_value),
  | 
      |||
		m_haveValue (toCopy.m_haveValue)
  | 
      |||
	{};
  | 
      |||
	static EnumIdentifier* create() {return new EnumIdentifier();}
  | 
      |||
	static EnumIdentifier* createCopy(const EnumIdentifier& toCopy) {return new EnumIdentifier(toCopy);}
  | 
      |||
public:
  | 
      |||
	friend class Ast;
  | 
      |||
	friend class Identifier;
  | 
      |||
	std::int32_t value() const { return m_value; };
  | 
      |||
	bool haveValue() const { return m_haveValue; };
  | 
      |||
	void init(std::int32_t line, std::int32_t col, const char* text,
  | 
      |||
			IScope* scopeRef, Type* typeRef, bool haveValue,
  | 
      |||
			std::int32_t value)
  | 
      |||
	{
  | 
      |||
		ValueIdentifier::init(line, col, text, scopeRef, typeRef);
  | 
      |||
		m_value = value;
  | 
      |||
		m_haveValue = haveValue;
  | 
      |||
	}
  | 
      |||
	void accept(IAstVisitor& visitor) override
  | 
      |||
	{
  | 
      |||
		visitor.visit(this);
  | 
      |||
	}
  | 
      |||
};
  | 
      |||
}
  |