Swift: collapse TypeRepr hierarchy

Now `TypeRepr` is a final class in the AST, which is more or less just
a type with a location in code.

As the frontend does not provide a direct way to get a type from a
type representation, this information must be provided when fetching
the label of a type repr.

This meant:
* removing the type repr field from `EnumIsCaseExpr`: this is a virtual
  AST node introduced in place of some kinds of `IsEpxr`. The type
  repr is still available from the `ConditionalCheckedCastExpr` wrapped
  by this virtual node, and we will rebuild the original `IsExpr` with
  the IPA layer.
* some logic to get the type of keypath roots has been added to
  `KeyPathExpr`. This was done to keep the `TypeRepr` to `Type` relation
  total in the DB, but goes against the design of a dumb extractor. The
  logic could be moved to QL in the future
* in the control flow library, `TypeRepr` children are now ignored. As
  far as I can tell, there is no runtime evaluation going on in
  `TypeRepr`s, so it does not make much sense to have control flow
  through them.
This commit is contained in:
Paolo Tranquilli
2022-07-12 10:33:54 +02:00
parent 70838fe57f
commit 033b239b22
98 changed files with 646 additions and 760 deletions

View File

@@ -7,8 +7,7 @@ _includes:
_directories:
decl: Decl$|Context$
pattern: Pattern$
type: Type$
typerepr: TypeRepr$
type: Type(Repr)?$
expr: Expr$
stmt: Stmt$
@@ -181,6 +180,7 @@ Stmt:
TypeRepr:
_extends: AstNode
type: Type
FunctionType:
_extends: AnyFunctionType
@@ -391,7 +391,6 @@ EnumIsCaseExpr:
_extends: Expr
_children:
sub_expr: Expr
type_repr: TypeRepr
element: EnumElementDecl
ErrorExpr:
@@ -442,7 +441,7 @@ KeyPathDotExpr:
KeyPathExpr:
_extends: Expr
_children:
parsed_root: Expr?
root: TypeRepr?
parsed_path: Expr?
LazyInitializerExpr:
@@ -1162,87 +1161,3 @@ FloatLiteralExpr:
IntegerLiteralExpr:
_extends: NumberLiteralExpr
string_value: string
ErrorTypeRepr:
_extends: TypeRepr
AttributedTypeRepr:
_extends: TypeRepr
IdentTypeRepr:
_extends: TypeRepr
ComponentIdentTypeRepr:
_extends: IdentTypeRepr
SimpleIdentTypeRepr:
_extends: ComponentIdentTypeRepr
GenericIdentTypeRepr:
_extends: ComponentIdentTypeRepr
CompoundIdentTypeRepr:
_extends: IdentTypeRepr
FunctionTypeRepr:
_extends: TypeRepr
ArrayTypeRepr:
_extends: TypeRepr
DictionaryTypeRepr:
_extends: TypeRepr
OptionalTypeRepr:
_extends: TypeRepr
ImplicitlyUnwrappedOptionalTypeRepr:
_extends: TypeRepr
TupleTypeRepr:
_extends: TypeRepr
CompositionTypeRepr:
_extends: TypeRepr
MetatypeTypeRepr:
_extends: TypeRepr
ProtocolTypeRepr:
_extends: TypeRepr
OpaqueReturnTypeRepr:
_extends: TypeRepr
NamedOpaqueReturnTypeRepr:
_extends: TypeRepr
ExistentialTypeRepr:
_extends: TypeRepr
PlaceholderTypeRepr:
_extends: TypeRepr
SpecifierTypeRepr:
_extends: TypeRepr
InOutTypeRepr:
_extends: SpecifierTypeRepr
SharedTypeRepr:
_extends: SpecifierTypeRepr
OwnedTypeRepr:
_extends: SpecifierTypeRepr
IsolatedTypeRepr:
_extends: SpecifierTypeRepr
CompileTimeConstTypeRepr:
_extends: SpecifierTypeRepr
FixedTypeRepr:
_extends: TypeRepr
SilBoxTypeRepr:
_extends: TypeRepr