]> gcc.gnu.org Git - gcc.git/blob - gcc/d/dmd/init.h
296c31d1a5e1d4f6d2b9d8f8d23eea463c6bc564
[gcc.git] / gcc / d / dmd / init.h
1
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
9 */
10
11 #pragma once
12
13 #include "ast_node.h"
14 #include "globals.h"
15 #include "arraytypes.h"
16 #include "visitor.h"
17
18 class Identifier;
19 class Expression;
20 class Type;
21 class ErrorInitializer;
22 class VoidInitializer;
23 class StructInitializer;
24 class ArrayInitializer;
25 class ExpInitializer;
26 class CInitializer;
27
28 enum NeedInterpret { INITnointerpret, INITinterpret };
29
30 class Initializer : public ASTNode
31 {
32 public:
33 Loc loc;
34 unsigned char kind;
35
36 DYNCAST dyncast() const override { return DYNCAST_INITIALIZER; }
37
38 const char *toChars() const override final;
39
40 ErrorInitializer *isErrorInitializer();
41 VoidInitializer *isVoidInitializer();
42 StructInitializer *isStructInitializer();
43 ArrayInitializer *isArrayInitializer();
44 ExpInitializer *isExpInitializer();
45 CInitializer *isCInitializer();
46
47 void accept(Visitor *v) override { v->visit(this); }
48 };
49
50 class VoidInitializer final : public Initializer
51 {
52 public:
53 Type *type; // type that this will initialize to
54
55 void accept(Visitor *v) override { v->visit(this); }
56 };
57
58 class ErrorInitializer final : public Initializer
59 {
60 public:
61 void accept(Visitor *v) override { v->visit(this); }
62 };
63
64 class StructInitializer final : public Initializer
65 {
66 public:
67 Identifiers field; // of Identifier *'s
68 Initializers value; // parallel array of Initializer *'s
69
70 void accept(Visitor *v) override { v->visit(this); }
71 };
72
73 class ArrayInitializer final : public Initializer
74 {
75 public:
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
81
82 bool isAssociativeArray() const;
83 Expression *toAssocArrayLiteral();
84
85 void accept(Visitor *v) override { v->visit(this); }
86 };
87
88 class ExpInitializer final : public Initializer
89 {
90 public:
91 bool expandTuples;
92 Expression *exp;
93
94 void accept(Visitor *v) override { v->visit(this); }
95 };
96
97 struct Designator
98 {
99 Expression *exp;
100 Identifier *ident;
101 };
102
103 struct DesigInit
104 {
105 Designators *designatorList;
106 Initializer *initializer;
107 };
108
109 class CInitializer final : public Initializer
110 {
111 public:
112 DesigInits initializerList;
113 Type *type; // type that array will be used to initialize
114 bool sem; // true if semantic() is run
115
116 void accept(Visitor *v) override { v->visit(this); }
117 };
118
119 Expression *initializerToExpression(Initializer *init, Type *t = NULL, const bool isCfile = false);
This page took 0.039679 seconds and 4 git commands to generate.