1. 01 10月, 2017 1 次提交
  2. 30 9月, 2017 2 次提交
  3. 29 9月, 2017 2 次提交
  4. 28 9月, 2017 1 次提交
  5. 22 9月, 2017 2 次提交
  6. 21 9月, 2017 1 次提交
  7. 20 9月, 2017 4 次提交
  8. 12 9月, 2017 1 次提交
  9. 07 9月, 2017 1 次提交
  10. 01 9月, 2017 1 次提交
  11. 31 8月, 2017 1 次提交
  12. 30 8月, 2017 5 次提交
  13. 26 8月, 2017 1 次提交
  14. 25 8月, 2017 2 次提交
  15. 18 8月, 2017 1 次提交
    • N
      Add tests for basic `private protected` functionality. (#20831) · 473a3f41
      Neal Gafter 提交于
      * Add tests for basic `private protected` functionality.
      * Constrain private protected to language version 7.2.
      * Add tests for VB, and adjust existing VB tests as needed.
      * Add test for SyntaxFacts production of source for private protected.
      * Add VB tests corresponding to all C# tests for private protected
      * Mention `private protected` in the compiler test plan.
      473a3f41
  16. 02 8月, 2017 1 次提交
  17. 01 8月, 2017 2 次提交
  18. 18 7月, 2017 1 次提交
    • C
      Don't report modifier errors while parsing. (#16339) · 001294be
      CyrusNajmabadi 提交于
      * Don't report modifier errors while parsing.
      
      * Fix bad merge.
      
      * restore code.
      
      * Fix test.
      
      * Remove old resource
      
      * Alternative way to do partial checking.
      
      * Alternative way to do partial checking.
      
      * Simplify formatting.
      
      * Restore formatting.
      
      * Restore formatting.
      
      * Restore formatting.
      
      * Restore formatting.
      
      * Restore formatting.
      
      * Give a proper message.
      
      * Update error positions.
      
      * Update error positions.
      
      * Update error positions.
      
      * Actually report error on bad modifier.
      001294be
  19. 16 7月, 2017 1 次提交
  20. 14 7月, 2017 1 次提交
    • A
      Initial tree data structure for closure conversion (#20715) · b867e8e7
      Andy Gocke 提交于
      This PR adds the initial work for a new closure conversion design based around a tree instead of a series of dictionaries. The tree should
      
      Make it easier to assert invariants as we perform rewriting.
      Make debugging simpler.
      Allow us to move to a series of cheap, simple passes over the simplified tree, rather than one, very complicated pass over the bound tree.
      Make it easier to move almost all logic into the analysis phase and make rewriting a simple mechanical transformation.
      The heart of the new design is the Scope tree, which consists of a series of nested Scopes, each of which hold relevant information about what variables and closures are declared in that scope. The Closure, meanwhile, holds information for each closure, including a list of captured variables. By carefully visiting the bound node once we should be able to encode all relevant information into the Scope tree, and then iterate over a series of quick, simple passes to create the fully converted form.
      b867e8e7
  21. 12 7月, 2017 1 次提交
  22. 05 7月, 2017 1 次提交
  23. 30 6月, 2017 2 次提交
    • A
      Refactor to remove LocalFunctionTypeParameterSymbol (#20340) · 888d7c5b
      Andy Gocke 提交于
      LocalFunctionTypeParameterSymbol isn't necessary as long as the functionality around type constraints can be moved into a shared base class between ordinary method symbols and local function symbols.
      In fact, it would be very useful to have a shared base symbol aside from MethodSymbol between local functions, lambdas, and other source method symbols. To this end, I've renamed SourceMemberMethodSymbol to SourceOrdinaryMethodSymbol (since it is just used for ordinary member-level methods), SourceMethodSymbol to SourceMemberMethodSymbol (since it is only used as a base class for member-level method-like functions like ordinary methods, constructors, property accessors, et al.), and added a new abstract class SourceMethodSymbol that is the root of both LocalFunctionSymbol and SourceMemberMethodSymbol. This lets us unify all source method-like symbols under a single base class, SourceMethodSymbol.
      The first three commits perform the refactoring, while the last commit actually removes LocalFunctionTypeParameterSymbol and moves the necessary functionality into SourceMethodSymbol. I expect more functionality to be moved over in subsequent PRs.
      
      Fixes #17244
      888d7c5b
    • V
      In some cases `fixed` statement used a peculiar codegen strategy. · f692ac46
      vsadov 提交于
      Instead of mapping the pointer to a pointer temp, it was mapped to the managed pinned reference (which does not even have the same type).
      At all the places where the pointer was used, the actual reference was converted to the pointer, repeatedly.
      
      I.E.
      
      ```C#
      fixed(int * p = &v)
      {
          Use(p);
          Use(p);
          Use(p);
      }
      ```
      was emitted as
      
      ```C#
      try
      {
           pinned ref int refTemp = ref v;
      
          Use((int*)refTemp);      // unsafely cast pinned ref
          Use((int*)refTemp);      // unsafely cast pinned ref
          Use((int*)refTemp);      // unsafely cast pinned ref
      }
      finally
      {
            // zero-out refTemp
      }
      ```
      instead of logical pattern matching the semantics:
      ```C#
      try
      {
           pinned ref int refTemp = ref v;
           int * p = (int*)refTemp;  // unsafely cast pinned ref
      
          Use(p);
          Use(p);
          Use(p);
      }
      finally
      {
            // zero-out refTemp
      }
      ```
      
      The reason for the strange emit was never truly understood. In fact, in other cases, like fixed string, the more obvious variant was used.
      One theory was that this codegen was just because of the lack of internal expressiveness in the old compiler around byref locals and we simply carried it forward.
      The inconsistency required special casing of such `fixed` statements  in binding, lowering, codegen and in the semantical model, which must expose the "logical" shape of the statement.
      
      Another guess was that this kind of emit was better for JIT.
      That turned out to be not true. To the contrary - while a pointer temp would be very optimizable, repeated accesses to the pinned ref actually results in noticeable overhead in the JITted code, forcing users to use workarounds like:
      
      ```C#
      fixed(int * p = &v)
      {
          // PERF: accessing p has additional expenses, so store it in another temp;
          int * cheapP = p;
          Use(cheapP);
          Use(cheapP);
          Use(cheapP);
      }
      ```
      
      Users should not need to do the above. Compiler should do that in the first place.
      
      Fixes: #18615
      f692ac46
  24. 24 6月, 2017 4 次提交