d: Merge dmd, druntime d8e3976a58, phobos 7a6e95688
[official-gcc.git] / gcc / d / dmd / init.h
blobb4e15e3fa9861f58070f4e92202cc43bd4715b1a
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
9 */
11 #pragma once
13 #include "ast_node.h"
14 #include "globals.h"
15 #include "arraytypes.h"
16 #include "visitor.h"
18 class Identifier;
19 class Expression;
20 class Type;
21 class ErrorInitializer;
22 class VoidInitializer;
23 class DefaultInitializer;
24 class StructInitializer;
25 class ArrayInitializer;
26 class ExpInitializer;
27 class CInitializer;
29 enum NeedInterpret { INITnointerpret, INITinterpret };
31 class Initializer : public ASTNode
33 public:
34 Loc loc;
35 unsigned char kind;
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
52 public:
53 Type *type; // type that this will initialize to
55 void accept(Visitor *v) override { v->visit(this); }
58 class DefaultInitializer final : public Initializer
60 public:
61 Type *type; // type that this will initialize to
63 void accept(Visitor *v) override { v->visit(this); }
66 class ErrorInitializer final : public Initializer
68 public:
69 void accept(Visitor *v) override { v->visit(this); }
72 class StructInitializer final : public Initializer
74 public:
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
83 public:
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
98 public:
99 d_bool expandTuples;
100 Expression *exp;
102 void accept(Visitor *v) override { v->visit(this); }
105 struct Designator
107 Expression *exp;
108 Identifier *ident;
111 struct DesigInit
113 Designators *designatorList;
114 Initializer *initializer;
117 class CInitializer final : public Initializer
119 public:
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);