feat(report): add T-Assign rule
This commit is contained in:
@@ -173,6 +173,8 @@ Finally, expressions can be used in statements, which are special constructs tha
|
|||||||
|
|
||||||
#smallcaps[T-Annot] is a rule which handles Python type annotations. It states that the type checker must take note of type hints in the context.
|
#smallcaps[T-Annot] is a rule which handles Python type annotations. It states that the type checker must take note of type hints in the context.
|
||||||
|
|
||||||
|
#smallcaps[T-Assign] handles assignments to variables. For an assignment to be valid, the value must be of the same type as the variable's type (modulo subsumption, #smallcaps[T-Sub]).
|
||||||
|
|
||||||
#smallcaps[T-Seq] allows sequences of statements.
|
#smallcaps[T-Seq] allows sequences of statements.
|
||||||
|
|
||||||
#smallcaps[T-IfElse], like #smallcaps[T-Tern] is a stricter version of how Python processes `if` statements. Indeed, Midas will not allow leaking context from inside the bodies of any branch. If a variable is declared inside an `if` statement, Midas will not allow references outside of it.
|
#smallcaps[T-IfElse], like #smallcaps[T-Tern] is a stricter version of how Python processes `if` statements. Indeed, Midas will not allow leaking context from inside the bodies of any branch. If a variable is declared inside an `if` statement, Midas will not allow references outside of it.
|
||||||
|
|||||||
@@ -95,6 +95,13 @@
|
|||||||
$Gamma tack "x": "T" tack.l Gamma, "x": "T"$,
|
$Gamma tack "x": "T" tack.l Gamma, "x": "T"$,
|
||||||
```py x: T```,
|
```py x: T```,
|
||||||
),
|
),
|
||||||
|
rule(
|
||||||
|
"T-Assign",
|
||||||
|
$Gamma tack "x": "T"$,
|
||||||
|
$Gamma tack "t": "T"$,
|
||||||
|
$Gamma tack "x" = "t" tack.l Gamma$,
|
||||||
|
```py x = t```,
|
||||||
|
),
|
||||||
rule(
|
rule(
|
||||||
"T-Seq",
|
"T-Seq",
|
||||||
$Gamma tack "s"_1 tack.l Gamma'$,
|
$Gamma tack "s"_1 tack.l Gamma'$,
|
||||||
|
|||||||
@@ -121,7 +121,7 @@ During parsing, a statement such as ```python foo: int = 3```, represented in Py
|
|||||||
|
|
||||||
This method basically materializes #smallcaps[T-Annot] from @tab:typing-statements.
|
This method basically materializes #smallcaps[T-Annot] from @tab:typing-statements.
|
||||||
|
|
||||||
Handling the variable assignment part is a bit more involved, because Python (and our type checker) allows both assigning to multiple targets simultaneously (@fig:python-visit_assign_stmt:3) and assigning to attributes and subscripts (not only variables). This is the reason we use a `match` statement in @fig:python-visit_assign_stmt.
|
Handling the variable assignment part is a bit more involved, because Python (and our type checker) allows both assigning to multiple targets simultaneously (@fig:python-visit_assign_stmt:3) and assigning to attributes and subscripts (not only variables). This is the reason we use a `match` statement in @fig:python-visit_assign_stmt. This function embodies #smallcaps[T-Assign].
|
||||||
|
|
||||||
#codly(
|
#codly(
|
||||||
ranges: (
|
ranges: (
|
||||||
|
|||||||
Reference in New Issue
Block a user