forked from ForNeVeR/Cesium
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Declarations.cs
98 lines (77 loc) · 3.32 KB
/
Declarations.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
using System.Collections.Immutable;
namespace Cesium.Ast;
// 6.7 Declarations
public record Declaration(
ImmutableArray<IDeclarationSpecifier> Specifiers,
ImmutableArray<InitDeclarator>? InitDeclarators) : IBlockItem;
public record InitDeclarator(Declarator Declarator, Initializer? Initializer = null);
public interface IDeclarationSpecifier { }
// 6.7.1 Storage-class specifiers
public record StorageClassSpecifier(string Name) : IDeclarationSpecifier;
// 6.7.2 Type specifiers
public interface ITypeSpecifier : ISpecifierQualifierListItem { }
public record SimpleTypeSpecifier(string TypeName) : ITypeSpecifier;
public record StructOrUnionSpecifier(
ComplexTypeKind TypeKind,
string? Identifier,
ImmutableArray<StructDeclaration> StructDeclarations) : ITypeSpecifier;
public record NamedTypeSpecifier(string TypeDefName) : ITypeSpecifier;
// 6.7.2.1 Structure and union specifiers
public enum ComplexTypeKind
{
Struct
}
public record StructDeclaration(
ImmutableArray<ISpecifierQualifierListItem> SpecifiersQualifiers,
ImmutableArray<StructDeclarator>? Declarators);
public interface ISpecifierQualifierListItem : IDeclarationSpecifier {}
public record StructDeclarator(Declarator Declarator);
// 6.7.3 Type qualifiers
public record TypeQualifier(string Name) : ISpecifierQualifierListItem;
// 6.7.7 Type names
public record AbstractDeclarator(Pointer? Pointer = null, IDirectAbstractDeclarator? DirectAbstractDeclarator = null);
public interface IDirectAbstractDeclarator
{
IDirectAbstractDeclarator? Base { get; }
}
public record SimpleDirectAbstractDeclarator(AbstractDeclarator Declarator) : IDirectAbstractDeclarator
{
public IDirectAbstractDeclarator? Base => null;
};
public record ArrayDirectAbstractDeclarator(
IDirectAbstractDeclarator? Base,
ImmutableArray<TypeQualifier>? TypeQualifiers,
Expression? Size) : IDirectAbstractDeclarator;
// 6.7.6 Declarators
public record Declarator(Pointer? Pointer, IDirectDeclarator DirectDeclarator);
public interface IDirectDeclarator
{
IDirectDeclarator? Base { get; }
}
public record IdentifierDirectDeclarator(string Identifier) : IDirectDeclarator
{
public IDirectDeclarator? Base => null;
}
public record ArrayDirectDeclarator(
IDirectDeclarator Base,
ImmutableArray<TypeQualifier>? TypeQualifiers,
Expression? Size) : IDirectDeclarator;
public record ParameterListDirectDeclarator(IDirectDeclarator Base, ParameterTypeList Parameters) : IDirectDeclarator;
public record IdentifierListDirectDeclarator(
IDirectDeclarator Base,
ImmutableArray<string>? Identifiers) : IDirectDeclarator;
public record DeclaratorDirectDeclarator(Declarator Declarator) : IDirectDeclarator
{
public IDirectDeclarator? Base => null;
}
public record Pointer(ImmutableArray<TypeQualifier>? TypeQualifiers = null, Pointer? ChildPointer = null);
public record ParameterTypeList(ImmutableArray<ParameterDeclaration> Parameters, bool HasEllipsis = false);
public record ParameterDeclaration(
ImmutableArray<IDeclarationSpecifier> Specifiers,
Declarator? Declarator = null,
AbstractDeclarator? AbstractDeclarator = null);
// 6.7.9 Initialization
public abstract record Initializer;
public record AssignmentInitializer(Expression Expression) : Initializer;
// CLI extensions
public record CliImportSpecifier(string MemberName) : IDeclarationSpecifier;