mirror of
https://github.com/github/codeql.git
synced 2026-05-03 04:39:29 +02:00
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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user