mirror of
https://github.com/luau-lang/luau.git
synced 2025-04-07 20:30:53 +01:00
Added behavior of the operator during typechecking
Prohibited operator use on a nil type.
This commit is contained in:
parent
5429b7ba11
commit
4e139dd295
1 changed files with 8 additions and 3 deletions
|
@ -43,7 +43,7 @@ primaryexp ::= prefixexp [`!'] { postfixeexp }
|
||||||
|
|
||||||
When we get the `!` token, we will wrap the expression that we have into a new AstExprNonNilAssertion node.
|
When we get the `!` token, we will wrap the expression that we have into a new AstExprNonNilAssertion node.
|
||||||
|
|
||||||
This operator doesn't have any impact on the run-time behavior of the program, it will only change the type of the expression in the typechecker.
|
This operator doesn't have any impact on the run-time behavior of the program, it will only affect the type of the expression in the typechecker.
|
||||||
|
|
||||||
---
|
---
|
||||||
While parsing an assignment expression starts with a *primaryexp*, it performs a check that it has an l-value based on a fixed set of AstNode types.
|
While parsing an assignment expression starts with a *primaryexp*, it performs a check that it has an l-value based on a fixed set of AstNode types.
|
||||||
|
@ -54,9 +54,14 @@ p.a! = b
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
If the operator is used on expression of type that is already non-nil, it has no effect and doesn't generate additional warnings.
|
When operator is used on expression of a union type with a 'nil' option, it removes that option from the set.
|
||||||
|
If only one option remains, the union type is replaced with the type of a single option.
|
||||||
|
|
||||||
The reason for this is to simplify movement of existing code where context in each location is slightly different.
|
If the type is `nil`, typechecker will generate a warning that the operator cannot be applied to the expression.
|
||||||
|
|
||||||
|
For any other type, it has no effect and doesn't generate additional warnings.
|
||||||
|
|
||||||
|
The reason for the last rule is to simplify movement of existing code where context in each location is slightly different.
|
||||||
|
|
||||||
As an example from Roblox, instance path could dynamically change from being know to exist to be missing when script is changed in edit mode.
|
As an example from Roblox, instance path could dynamically change from being know to exist to be missing when script is changed in edit mode.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue