#ifndef PORYGONLANG_NILEVALVALUE_HPP
#define PORYGONLANG_NILEVALVALUE_HPP

#include "EvalValue.hpp"

namespace Porygon::Evaluation{
    class NilEvalValue : public EvalValue{
        [[nodiscard]]
        inline TypeClass GetTypeClass() const final{
            return TypeClass ::Nil;
        }
        [[nodiscard]]
        inline bool operator==(const EvalValue *b) const final{
            return b->GetTypeClass() == TypeClass ::Nil;
        }

        [[nodiscard]]
        inline EvalValue* Clone() const final{
            return new NilEvalValue();
        }

        [[nodiscard]]
        inline std::size_t GetHashCode() const final{
            return 0;
        }
    };
}

#endif //PORYGONLANG_NILEVALVALUE_HPP
