1. 14 3月, 2019 2 次提交
    • C
      Fix failing tests: · 72ae5183
      Chris Sienkiewicz 提交于
      - Don't do analysis for speculative attributes
      - Manually call TryGetThisParameter, rather than MethodThisParameter which can throw
      72ae5183
    • C
      Rewrite analysis as part of nullable walker: · ce65b091
      Chris Sienkiewicz 提交于
      - Add an entry point to nullable walker for attribute analysis
      - Implement analyze attribute in the walker
      - Remove the analysis from binder_attributes and call nullable walker instead
      - Add extra fields to BoundAttribute that are needed for nullable analysis
      - Add some extra test scenarios
      ce65b091
  2. 13 3月, 2019 1 次提交
  3. 12 3月, 2019 5 次提交
  4. 09 3月, 2019 5 次提交
  5. 08 3月, 2019 4 次提交
  6. 07 3月, 2019 2 次提交
  7. 01 3月, 2019 3 次提交
  8. 28 2月, 2019 4 次提交
  9. 26 2月, 2019 4 次提交
  10. 25 2月, 2019 1 次提交
    • N
      Revise NullableWalker to use a two-state solution · 6c329e3e
      Neal Gafter 提交于
      The NullableWalker is revised so that the inferred state of an expression is either `NotNull` or `MaybeNull` (represented by the new type `NullableFlowState`).  There is no longer such as thing as an oblivious rvalue.  There are four kinds of lvalues:
      - oblivious lvalues read as NotNull but null can be written to them
      - annotated lvalues read as MaybeNull and null can be written to them
      - unannotated lvalues read as NotNull and null may not be written to them
      - unconstrained type parameters read as MaybeNull but null may not be written to them
      
      In order to preserve the safety in the face of such unconstrained type parameters, we warn immediately when a null value of such a type is introduced.  This is a safety warning.  The contexts in which such a warning are given are
      - `default` and `default(T)`
      - `null` conversion to `T` (when `T` is known to be ref type)
      - `e?.M()` when the return type is `T`
      - dynamic conversion or cast to `T` when the dynamic might be null
      - explicit conversion to `T`
      - `e as T` when there is not an implicit conversion from the type of `e` to `T`
      - a call to a method like `FirstOrDefault()` that is annotated with `[MaybeNull] (not yet implemented)
      
      We remove the hidden diagnostics previously computed by the NullableWalker.
      
      We add debugger display support for a number of types used by the NullableWalker.  The display for `NullableWalker` summarizes the computed nullability of variables in a nice compact form.
      
      We remove support for definite assignment in the NullableWalker.  Some scenarios involving the use of not-definitely-assigned variables may cause cascaded diagnostics.  We might remove them in the future by initializing all vaiables to the `NotNull` state when they enter scope.
      
      We overhaul and simplify the inplementation of conversions, the null-conditional operator, and result inference for lifted operators.
      
      We simplify the Meet and Join operations so that they form a lattice on both the NullableAnnotation and NullableFlowState.
      
      Catch variables are now initialized to a non-null state on entry to the catch block.
      
      In unreachable code, every expression produces a non-null rvalue.  An erroneous expression produces a non-null rvalue (to suppress cascaded diagnostics).
      6c329e3e
  11. 23 2月, 2019 3 次提交
  12. 20 2月, 2019 2 次提交
  13. 16 2月, 2019 2 次提交
  14. 15 2月, 2019 2 次提交