1 /** 2 * Provide the root object that AST classes in dmd inherit from. 3 * 4 * Copyright: Copyright (C) 1999-2023 by The D Language Foundation, All Rights Reserved 5 * Authors: Walter Bright, https://www.digitalmars.com 6 * License: $(LINK2 https://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) 7 * Source: $(LINK2 https://github.com/dlang/dmd/blob/master/src/dmd/rootobject.d, _rootobject.d) 8 * Documentation: https://dlang.org/phobos/dmd_rootobject.html 9 * Coverage: https://codecov.io/gh/dlang/dmd/src/master/src/dmd/rootobject.d 10 */ 11 12 module dmd.rootobject; 13 14 /*********************************************************** 15 */ 16 17 enum DYNCAST : int 18 { 19 object, 20 expression, 21 dsymbol, 22 type, 23 identifier, 24 tuple, 25 parameter, 26 statement, 27 condition, 28 templateparameter, 29 initializer, 30 } 31 32 /*********************************************************** 33 */ 34 35 extern (C++) class RootObject 36 { 37 this() nothrow pure @nogc @safe scope 38 { 39 } 40 41 bool equals(const RootObject o) const 42 { 43 return o is this; 44 } 45 46 const(char)* toChars() const 47 { 48 assert(0); 49 } 50 51 /// 52 extern(D) const(char)[] toString() const 53 { 54 import core.stdc.string : strlen; 55 auto p = this.toChars(); 56 return p[0 .. strlen(p)]; 57 } 58 59 DYNCAST dyncast() const nothrow pure @nogc @safe 60 { 61 return DYNCAST.object; 62 } 63 }