2 /* Compiler implementation of the D programming language
3 * Copyright (C) 1999-2024 by The D Language Foundation, All Rights Reserved
4 * written by Walter Bright
5 * https://www.digitalmars.com
6 * Distributed under the Boost Software License, Version 1.0.
7 * https://www.boost.org/LICENSE_1_0.txt
8 * https://github.com/dlang/dmd/blob/master/src/dmd/init.h
15 #include "arraytypes.h"
21 class ErrorInitializer
;
22 class VoidInitializer
;
23 class DefaultInitializer
;
24 class StructInitializer
;
25 class ArrayInitializer
;
29 enum NeedInterpret
{ INITnointerpret
, INITinterpret
};
31 class Initializer
: public ASTNode
37 DYNCAST
dyncast() const override
{ return DYNCAST_INITIALIZER
; }
39 ErrorInitializer
*isErrorInitializer();
40 VoidInitializer
*isVoidInitializer();
41 DefaultInitializer
*isDefaultInitializer();
42 StructInitializer
*isStructInitializer();
43 ArrayInitializer
*isArrayInitializer();
44 ExpInitializer
*isExpInitializer();
45 CInitializer
*isCInitializer();
47 void accept(Visitor
*v
) override
{ v
->visit(this); }
50 class VoidInitializer final
: public Initializer
53 Type
*type
; // type that this will initialize to
55 void accept(Visitor
*v
) override
{ v
->visit(this); }
58 class DefaultInitializer final
: public Initializer
61 Type
*type
; // type that this will initialize to
63 void accept(Visitor
*v
) override
{ v
->visit(this); }
66 class ErrorInitializer final
: public Initializer
69 void accept(Visitor
*v
) override
{ v
->visit(this); }
72 class StructInitializer final
: public Initializer
75 Identifiers field
; // of Identifier *'s
76 Initializers value
; // parallel array of Initializer *'s
78 void accept(Visitor
*v
) override
{ v
->visit(this); }
81 class ArrayInitializer final
: public Initializer
84 Expressions index
; // indices
85 Initializers value
; // of Initializer *'s
86 unsigned dim
; // length of array being initialized
87 Type
*type
; // type that array will be used to initialize
88 d_bool sem
; // true if semantic() is run
89 d_bool isCarray
; // C array semantics
91 bool isAssociativeArray() const;
93 void accept(Visitor
*v
) override
{ v
->visit(this); }
96 class ExpInitializer final
: public Initializer
102 void accept(Visitor
*v
) override
{ v
->visit(this); }
113 Designators
*designatorList
;
114 Initializer
*initializer
;
117 class CInitializer final
: public Initializer
120 DesigInits initializerList
;
121 Type
*type
; // type that array will be used to initialize
122 d_bool sem
; // true if semantic() is run
124 void accept(Visitor
*v
) override
{ v
->visit(this); }
127 Expression
*initializerToExpression(Initializer
*init
, Type
*t
= NULL
, const bool isCfile
= false);