typo: Double word "the"

This commit is contained in:
Nick Schonning 2019-04-13 14:44:05 -04:00
parent 8e4e1a825a
commit 00de1a1c74
4 changed files with 5 additions and 5 deletions

View file

@ -90,7 +90,7 @@ You need to get into weird-ish stuff like this:
base(I3).(I1.M1)<string>(1, 2, 3); // Call I3's implementation of I1's M1
```
If we want to do something like this, we would also consider allowing *classes* to pick which one they grab the implementation from: even though classes have no ambiguity about which is the the most *specific* override, you could potentially allow "reaching around" and grabbing an older one.
If we want to do something like this, we would also consider allowing *classes* to pick which one they grab the implementation from: even though classes have no ambiguity about which is the most *specific* override, you could potentially allow "reaching around" and grabbing an older one.
## Deimplementation

View file

@ -258,7 +258,7 @@ The life time of the argument temporaries matches the closest encompassing scope
The formal life time of temporary variables is semantically significant in scenarios involving escape analysis of variables returned by reference.
### Metadata representation of `in` parameters.
When `System.Runtime.CompilerServices.IsReadOnlyAttribute` is applied to a byref parameter, it means that the the parameter is an `in` parameter.
When `System.Runtime.CompilerServices.IsReadOnlyAttribute` is applied to a byref parameter, it means that the parameter is an `in` parameter.
In addition, if the method is *abstract* or *virtual*, then the signature of such parameters (and only such parameters) must have `modreq[System.Runtime.InteropServices.InAttribute]`.
@ -442,7 +442,7 @@ readonly struct Vector3
**Motivation:** consequence of restriction on instance fields.
### Metadata representation.
When `System.Runtime.CompilerServices.IsReadOnlyAttribute` is applied to a value type, it means that the the type is a `readonly struct`.
When `System.Runtime.CompilerServices.IsReadOnlyAttribute` is applied to a value type, it means that the type is a `readonly struct`.
In particular:
- The identity of the `IsReadOnlyAttribute` type is unimportant. In fact it can be embedded by the compiler in the containing assembly if needed.

View file

@ -252,7 +252,7 @@ See [the pattern-matching specification](csharp-8.0/patterns.md#positional-patte
Unless there is a user-declared member named `With` declared, a record type has a compiler-provided method named `With` whose return type is the record type itself, and containing one value parameter corresponding to each *record-parameter* in the same order that these parameters appear in the record type declaration. Each parameter shall have a *caller-receiver default-argument* of the corresponding property.
In an `abstract` record class, the compiler-provided `With` method is abstract. In a record struct, or a sealed record class, the compiler-provided `With` method is `sealed`. Otherwise the compiler-provided `With` method is `virtual and its implementation shall return a new instance produced by invoking the the primary constructor with the parameters as arguments to create a new instance from the parameters, and return that new instance.
In an `abstract` record class, the compiler-provided `With` method is abstract. In a record struct, or a sealed record class, the compiler-provided `With` method is `sealed`. Otherwise the compiler-provided `With` method is `virtual and its implementation shall return a new instance produced by invoking the primary constructor with the parameters as arguments to create a new instance from the parameters, and return that new instance.
- [ ] **Open issue**: We should also specify under what conditions we override or implement inherited virtual `With` methods or `With` methods from implemented interfaces.
- [ ] **Open issue**: We should say what happens when we inherit a non-virtual `With` method.

View file

@ -566,7 +566,7 @@ For an expression *expr* of the form `expr_first ?? expr_second`:
* The definite assignment state of *v* before *expr_first* is the same as the definite assignment state of *v* before *expr*.
* The definite assignment state of *v* before *expr_second* is the same as the definite assignment state of *v* after *expr_first*.
* The definite assignment statement of *v* after *expr* is determined by:
* If *expr_first* is a constant expression ([Constant expressions](expressions.md#constant-expressions)) with value null, then the the state of *v* after *expr* is the same as the state of *v* after *expr_second*.
* If *expr_first* is a constant expression ([Constant expressions](expressions.md#constant-expressions)) with value null, then the state of *v* after *expr* is the same as the state of *v* after *expr_second*.
* Otherwise, the state of *v* after *expr* is the same as the definite assignment state of *v* after *expr_first*.
#### ?: (conditional) expressions