2 /* Compiler implementation of the D programming language
3 * Copyright (C) 1999-2022 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 const char *toChars() const override final
;
40 ErrorInitializer
*isErrorInitializer();
41 VoidInitializer
*isVoidInitializer();
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 ErrorInitializer final
: public Initializer
61 void accept(Visitor
*v
) override
{ v
->visit(this); }
64 class StructInitializer final
: public Initializer
67 Identifiers field
; // of Identifier *'s
68 Initializers value
; // parallel array of Initializer *'s
70 void accept(Visitor
*v
) override
{ v
->visit(this); }
73 class ArrayInitializer final
: public Initializer
76 Expressions index
; // indices
77 Initializers value
; // of Initializer *'s
78 unsigned dim
; // length of array being initialized
79 Type
*type
; // type that array will be used to initialize
80 bool sem
; // true if semantic() is run
82 bool isAssociativeArray() const;
83 Expression
*toAssocArrayLiteral();
85 void accept(Visitor
*v
) override
{ v
->visit(this); }
88 class ExpInitializer final
: public Initializer
94 void accept(Visitor
*v
) override
{ v
->visit(this); }
105 Designators
*designatorList
;
106 Initializer
*initializer
;
109 class CInitializer final
: public Initializer
112 DesigInits initializerList
;
113 Type
*type
; // type that array will be used to initialize
114 bool sem
; // true if semantic() is run
116 void accept(Visitor
*v
) override
{ v
->visit(this); }
119 Expression
*initializerToExpression(Initializer
*init
, Type
*t
= NULL
, const bool isCfile
= false);