1 
2 /* Copyright (C) 1999-2021 by The D Language Foundation, All Rights Reserved
3  * written by Walter Bright
4  * http://www.digitalmars.com
5  * Distributed under the Boost Software License, Version 1.0.
6  * http://www.boost.org/LICENSE_1_0.txt
7  * https://github.com/dlang/dmd/blob/master/src/dmd/root/object.h
8  */
9 
10 #pragma once
11 
12 #include "dsystem.h"
13 #include "dcompat.h"
14 
15 typedef size_t hash_t;
16 
17 struct OutBuffer;
18 
19 enum DYNCAST
20 {
21     DYNCAST_OBJECT,
22     DYNCAST_EXPRESSION,
23     DYNCAST_DSYMBOL,
24     DYNCAST_TYPE,
25     DYNCAST_IDENTIFIER,
26     DYNCAST_TUPLE,
27     DYNCAST_PARAMETER,
28     DYNCAST_STATEMENT,
29     DYNCAST_TEMPLATEPARAMETER
30 };
31 
32 /*
33  * Root of our class library.
34  */
35 class RootObject
36 {
37 public:
RootObject()38     RootObject() { }
39 
40     virtual bool equals(const RootObject *o) const;
41 
42     /**
43      * Pretty-print an Object. Useful for debugging the old-fashioned way.
44      */
45     virtual const char *toChars() const;
46     /// This function is `extern(D)` and should not be called from C++,
47     /// as the ABI does not match on some platforms
48     virtual DString toString();
49 
50     /**
51      * Used as a replacement for dynamic_cast. Returns a unique number
52      * defined by the library user. For Object, the return value is 0.
53      */
54     virtual DYNCAST dyncast() const;
55 };
56