1. 19 2月, 2020 1 次提交
  2. 23 1月, 2020 1 次提交
  3. 04 1月, 2020 1 次提交
  4. 18 12月, 2019 1 次提交
    • J
      Remove dedicated tuple type symbol (#39370) · cc306748
      Julien Couvreur 提交于
      * Refactor tuple implementation
      
      * Tweaks
      
      * Address PR feedback
      
      * Pass tuple data in constructors
      
      * Address more feedback
      
      * Tweak comparison
      
      * Restore constructWithTypeParameters flag to avoid overflow
      
      * Assert that tuple parameter matches TupleUnderlyingType somewhat
      
      * Rename to TupleData. Address some IDE feedback
      
      * Remaining TODO2's
      
      * Fix last IDE test!
      
      * Factor array comparison
      
      * Tweak WithTupleData and EqualsIgnoringTupleUnderlyingType
      
      * Expand a test
      
      * Remove duplicate line
      
      * Remove an EE test for badly formed ValueTuple type
      
      * PR feedback from Neal
      
      * Restore an IDE test without ValueTuple
      
      * Rename constants
      
      * Restore formatting
      cc306748
  5. 02 11月, 2019 1 次提交
  6. 30 10月, 2019 1 次提交
  7. 08 10月, 2019 1 次提交
  8. 05 10月, 2019 1 次提交
    • A
      Fix crash in flow analysis (#38929) · 8ef79900
      Andy Gocke 提交于
      When we added support for tracking static fields as part of nullable
      analysis, we used -1 for their containing slot. Negative numbers are
      not meant to be used as actual slots and flowed through the flow analysis
      code, they are only used as sentinels from slot-returning methods to indicate
      that the variable in question is not tracked. The appropriate root
      slot for a static variable is the same as the root slot for a top-level tracked
      variable (like a local), which is 0.
      
      Fixes #38725
      8ef79900
  9. 03 10月, 2019 1 次提交
  10. 25 9月, 2019 1 次提交
  11. 21 9月, 2019 1 次提交
  12. 20 9月, 2019 2 次提交
  13. 17 9月, 2019 1 次提交
  14. 06 9月, 2019 1 次提交
  15. 25 8月, 2019 1 次提交
  16. 12 8月, 2019 1 次提交
  17. 10 8月, 2019 1 次提交
  18. 02 8月, 2019 1 次提交
  19. 13 7月, 2019 1 次提交
    • T
      Handle synthesized top-level types in EnC symbol matcher (#36854) · 886d79e0
      Tomáš Matoušek 提交于
      * Top-level types enumeration refactoring
      
      * Simplify DefinitionMap
      
      * Include namespaces in synthesized definition map
      
      * Add SynthesizedNamespaceSymbol
      
      * Embedded Attributes
      
      * Test synthesized attributes
      
      * Clean up EnC tests
      
      * Clean up symbol matcher tests
      
      * Ref readonly return type, in parameter symbol matching tests
      
      * Enable using ref readonly returns, in parameters, ref structs during debugging
      
      * More tests
      
      * ReadOnly struct members
      
      * Fix langauge version mismatch
      
      * Merge fix ups
      
      * Feedback, skip tests
      886d79e0
  20. 29 6月, 2019 1 次提交
  21. 27 6月, 2019 1 次提交
  22. 15 6月, 2019 1 次提交
  23. 11 5月, 2019 1 次提交
  24. 02 5月, 2019 1 次提交
    • T
      Project cleanup (#35403) · e051790e
      Tomáš Matoušek 提交于
      * Remove RoslynProjectType
      
      * Remove ToolsVersion, namespace from Project tags
      
      * Remove updating of MSBuildAllProjects
      
      * Update BuildBoss
      
      * Delete DeployTooolsetCompiler
      e051790e
  25. 16 4月, 2019 1 次提交
    • A
      Avoid boxing in string concatenation · b23df16f
      Antony Male 提交于
      This changes the order of evaluation for string concatenation to follow
      the C# specification.
      
      Previously, when the compiler lowered a string concatenation containing
      any objects which were not strings (or implicitly convertible to
      strings), it would generate a call to an appropriate overload of
      `string.Concat` taking `objects`. This meant that all expressions being
      concatenated were evaluated, then `string.Concat` called, which called
      `.ToString()` on all of them.
      
      E.g.
      
          "x" + y + z
      
      got compiled to :
      
          string.Concat("x", y, z)
      
      Here, `y` and `z` are evaluated to `object` (boxing them if necessary),
      and then they have `.ToString()` called on them by `string.Concat`.
      
      This is technically against the C# specification, which defines string
      concatenation as a sequence of left-associative calls to one of:
      
          string operator +(string x, string y);
          string operator +(string x, object y);
          string operator +(object x, string y);
      
      So the above expression should conceptually be compiled to:
      
          op_Addition(op_Addition("x", y), z)
      
      That is, `y` is evaluated to `object` and concatenated with `"x"`
      before `z` is evaluated to `object`.
      
      The decision was made to change this behaviour in #522.
      
      This change brings a very important advantage: we can now fully evaluate
      `y` to a string before we evaluate `z`, which means we're allowed to
      compile the above to:
      
          string.Concat("x", y.ToString(), z.ToString())
      
      This means that:
      
       - We don't box `y` and `z` if they're value types
       - We don't call `ToString()` on `"x"` (which is harmless but pointless)
      
      This commit implements this change.
      
      Calls are no longer emitted to overloads of `string.Concat` which take
      `object` - instead, all parameters are evaluated to a string, and then
      an appropriate overload of `string.Concat` which takes `strings` is
      called.
      
      Care is taken to deal with different types of expressions in different
      ways:
      
       - Strings or types which are implicitly convertible to string never have
         .ToString called on them
       - Reference types (and unconstrained generics) have ?.ToString() called
         on them
       - A copy is made of non-readonly non-constant value types (and
         unconstrained generics), before.ToString() is called on the copy. This
         is to preserve the previous behaviour where value types were boxed, and
         so any side-effects of ToString() weren't reflected in the original.
       - A copy isn't made of readonly value types, as we know that ToString()
         can't have side-effects.
      
      We emit `call` to special struct types, as we know these have their own
      ToString implementation which won't be removed. For other value types,
      we emit a constrained virtual call. This follows the precedent set in
      
      For unary concatenation (e.g. `thing + ""`) we now emit
      `thing?.ToString() ?? ""` instead of `string.Concat(thing) ?? ""`.
      
      This does increase the size of generated code. My impression is that the
      unit tests which were affected by this changed increased in size by
      about 10%. This is somewhat offset by the fact that we can now call
      
          string.Concat(string, string, string, string)
      
      instead of
      
          string.Concat(object[])
      
      (since there is no overload of string.Concat which takes 4 objects),
      which reduces the size of some methods significantly.
      
      Fixes #522
      b23df16f
  26. 13 3月, 2019 1 次提交
  27. 09 3月, 2019 1 次提交
  28. 01 3月, 2019 1 次提交
  29. 16 2月, 2019 1 次提交
  30. 15 2月, 2019 1 次提交
  31. 08 2月, 2019 1 次提交
  32. 30 1月, 2019 3 次提交
  33. 29 1月, 2019 5 次提交