/* Copyright (C) 1999-2021 by The D Language Foundation, All Rights Reserved
 * http://www.digitalmars.com
 * Distributed under the Boost Software License, Version 1.0.
 * (See accompanying file LICENSE or copy at http://www.boost.org/LICENSE_1_0.txt)
 * https://github.com/D-Programming-Language/dmd/blob/master/src/root/object.c
 */

#include "dsystem.h"
#include "object.h"
#include "outbuffer.h"

/****************************** Object ********************************/

bool RootObject::equals(RootObject *o)
{
    return o == this;
}

int RootObject::compare(RootObject *obj)
{
    size_t lhs = (size_t)this;
    size_t rhs = (size_t)obj;
    if (lhs < rhs)
        return -1;
    else if (lhs > rhs)
        return 1;
    return 0;
}

void RootObject::print()
{
    printf("%s %p\n", toChars(), this);
}

const char *RootObject::toChars()
{
    return "Object";
}

int RootObject::dyncast() const
{
    return DYNCAST_OBJECT;
}

void RootObject::toBuffer(OutBuffer *b)
{
    b->writestring("Object");
}
