2 /* Compiler implementation of the D programming language
3 * Copyright (C) 1999-2023 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 StructInitializer
;
24 class ArrayInitializer
;
28 enum NeedInterpret
{ INITnointerpret
, INITinterpret
};
30 class Initializer
: public ASTNode
36 DYNCAST
dyncast() const override
{ return DYNCAST_INITIALIZER
; }
38 ErrorInitializer
*isErrorInitializer();
39 VoidInitializer
*isVoidInitializer();
40 StructInitializer
*isStructInitializer();
41 ArrayInitializer
*isArrayInitializer();
42 ExpInitializer
*isExpInitializer();
43 CInitializer
*isCInitializer();
45 void accept(Visitor
*v
) override
{ v
->visit(this); }
48 class VoidInitializer final
: public Initializer
51 Type
*type
; // type that this will initialize to
53 void accept(Visitor
*v
) override
{ v
->visit(this); }
56 class ErrorInitializer final
: public Initializer
59 void accept(Visitor
*v
) override
{ v
->visit(this); }
62 class StructInitializer final
: public Initializer
65 Identifiers field
; // of Identifier *'s
66 Initializers value
; // parallel array of Initializer *'s
68 void accept(Visitor
*v
) override
{ v
->visit(this); }
71 class ArrayInitializer final
: public Initializer
74 Expressions index
; // indices
75 Initializers value
; // of Initializer *'s
76 unsigned dim
; // length of array being initialized
77 Type
*type
; // type that array will be used to initialize
78 d_bool sem
; // true if semantic() is run
79 d_bool isCarray
; // C array semantics
81 bool isAssociativeArray() const;
83 void accept(Visitor
*v
) override
{ v
->visit(this); }
86 class ExpInitializer final
: public Initializer
92 void accept(Visitor
*v
) override
{ v
->visit(this); }
103 Designators
*designatorList
;
104 Initializer
*initializer
;
107 class CInitializer final
: public Initializer
110 DesigInits initializerList
;
111 Type
*type
; // type that array will be used to initialize
112 d_bool sem
; // true if semantic() is run
114 void accept(Visitor
*v
) override
{ v
->visit(this); }
117 Expression
*initializerToExpression(Initializer
*init
, Type
*t
= NULL
, const bool isCfile
= false);