1 2 /* Copyright (C) 1999-2021 by The D Language Foundation, All Rights Reserved 3 * http://www.digitalmars.com 4 * Distributed under the Boost Software License, Version 1.0. 5 * (See accompanying file LICENSE or copy at http://www.boost.org/LICENSE_1_0.txt) 6 * https://github.com/dlang/dmd/blob/master/src/root/object.h 7 */ 8 9 #pragma once 10 11 #include "dsystem.h" 12 13 typedef size_t hash_t; 14 15 struct OutBuffer; 16 17 enum DYNCAST 18 { 19 DYNCAST_OBJECT, 20 DYNCAST_EXPRESSION, 21 DYNCAST_DSYMBOL, 22 DYNCAST_TYPE, 23 DYNCAST_IDENTIFIER, 24 DYNCAST_TUPLE, 25 DYNCAST_PARAMETER, 26 DYNCAST_STATEMENT 27 }; 28 29 /* 30 * Root of our class library. 31 */ 32 class RootObject 33 { 34 public: RootObject()35 RootObject() { } 36 37 virtual bool equals(RootObject *o); 38 39 /** 40 * Return <0, ==0, or >0 if this is less than, equal to, or greater than obj. 41 * Useful for sorting Objects. 42 */ 43 virtual int compare(RootObject *obj); 44 45 /** 46 * Pretty-print an Object. Useful for debugging the old-fashioned way. 47 */ 48 virtual void print(); 49 50 virtual const char *toChars(); 51 virtual void toBuffer(OutBuffer *buf); 52 53 /** 54 * Used as a replacement for dynamic_cast. Returns a unique number 55 * defined by the library user. For Object, the return value is 0. 56 */ 57 virtual int dyncast() const; 58 }; 59