- 15 5月, 2015 1 次提交
-
-
由 Tomas Matousek 提交于
-
- 13 5月, 2015 1 次提交
-
-
由 Andrew Casey 提交于
This reverts commit cdf6029c.
-
- 12 5月, 2015 1 次提交
-
-
由 Andrew Casey 提交于
This is cleanup from DevDiv #1043494.
-
- 29 3月, 2015 1 次提交
-
-
由 tmat 提交于
-
- 01 2月, 2015 1 次提交
-
-
由 beep boop 提交于
Background: As discussed in the dev team all hands all code under the GitHub dotnet foundation is using a single process for contribution, API review, infrastructure and coding style. The idea is to present a unified view to our customer and give them a single story for contributing to any project under the dotnet foundation. https://github.com/dotnet/corefx/wiki/Contributing#c-coding-style The coding style transition is automated using a Roslyn based rewrite tool: https://github.com/dotnet/codeformatter This will be applied in stages across our developer tree. Right now the focus is on the Open directory as this is what is being presented on github. Code owners will be contacted before the transition happens. Note: this is a soft style requirement. There are no build errors that come from this change. (changeset 1408227)
-
- 15 1月, 2015 1 次提交
-
-
由 jaredpar 提交于
-
- 14 1月, 2015 1 次提交
-
-
由 RoslynTeam 提交于
-
- 09 10月, 2014 1 次提交
-
-
由 acasey 提交于
-
- 06 10月, 2014 1 次提交
-
-
由 TomasMatousek 提交于
-
- 04 10月, 2014 1 次提交
-
-
由 TomasMatousek 提交于
Current approach and issues When emitting method body of a method updated during EnC the compiler needs to assign local variables the same slots they had before the edit, so that state stored in those locals gets preserved. To implement this slot mapping we used to encode information into synthesized variable names that identified the syntax node that produced the variable and ultimately allowed us to calculate the slot mapping. For user variables we identified the slot by name. In both cases we relied on an assumption that the compiler assigns slots in syntax order. This assumption is false in some cases. We could make it true but the requirement would be fragile and hard to enforce when new features are implemented in the compiler since the entire lowering pipeline would need to preserve the assumption. New approach In the new approach we calculate a "syntax offset" for each user-defined and long-lived synthesized variable. Every such variable symbol has to be associated with a syntax node (its declarator). In usual cases this is the textual distance of the declarator from the start of the method body. It gets a bit complicated when the containing method body is not contiguous (constructors). If the variable is in the body of the constructor the definition of syntax offset is the same. If the variable is defined in a constructor initializer or in a member initializer (this is only possible when declaration expressions or closures in primary constructors are involved) then the distance is a negative sum of the widths of all the initializers that succeed the declarator of the variable in the emitted constructor body plus the relative offset of the declarator from the start of the containing initializer. If a single node is a declarator for multiple variables of the same synthesized kind (it can only happen for synthesized variables) we calculate additional number "ordinal" for such variable. We assign the ordinals to the synthesized variables with the same kind and syntax offset in the order as they appear in the lowered bound tree. It is important that a valid EnC edit can't change the ordinal of a synthesized variable. If it could it would need to be assigned a different kind or associated with a different declarator node. To support EnC of async method we will assign another number "subordinal" to certain synthesized locals (produced by spilling by-ref variables) to simplify the mapping. Assigning of such number is not yet implemented in this change. Together (syntax offset, ordinal, subordinal) form a LocalDebugId of a variable. Since this id needs to be stored in PDB for both user-defined and long-lived synthesized variables we can’t encode it in the name of the variable (the names of user-defined variables have to be their user specified names). Therefore this change introduces a new custom debug info record that is associated with a method. The record encodes the kind and id for each local slot of the method. As a consequence we no longer emit names for synthesized long-lived variables (“CS$...”) unless it’s necessary for backward comp with Dev12 EE (only display class local names need to be emitted for this reason). (changeset 1348066)
-
- 10 9月, 2014 1 次提交
-
-
由 VSadov 提交于
Making codegen for compound operators over properties with generic receivers same as in Dev12 for compatibility reasons. This affects cases like T x; x.P1 += foo(ref x); x[1] += foo(ref x); ***NO_CI*** (changeset 1330113)
-
- 15 8月, 2014 3 次提交
-
-
由 TomasMatousek 提交于
-
由 TomasMatousek 提交于
Updates tests to use either Release or Debug. Skips tests that are broken when PDB emit is enabled. (changeset 1314373)
-
由 TomasMatousek 提交于
Reduce the variety of optimization related compilation option values used in tests to: Release, DebuggableRelease and Debug. By default tests should use Release, which enables all optimizations. PDB tests should mostly use Debug. We should have targeted tests for DebuggableRelease, for optimizations that are selectively disabled to improve debuggability of release builds. (changeset 1312277)
-
- 18 7月, 2014 1 次提交
-
-
由 TomasMatousek 提交于
For every conditional branch that consumes a value of an expression that might contain calls to user code and that jumps across user code with sequence points, we need to store the value into a synthesized named local, emit stloc and ldloc and place a hidden sequence point on the ldloc instruction. Furthermore, the synthesized local variable has to be associated with the statement syntax whose lowering produces the conditional branch so that EnC infrastructure can map the local variable defined for the branch to the previous generation. In essence this is what’s going on: [|if (F())|] { … true … } else { … false … } IL: call F() stloc $value <-- hidden sequence point --> ldloc $value brfalse label_false <-- sequence point for “{“ of true-block --> … true … br label_end label_false: <-- sequence point for “{“of false-block --> … false … label_end: When the call to F() returns after an update has been performed on the caller the code execution continues in the old version of the caller body until a special remapping breakpoint is hit. These breakpoints are put on all sequence points of the method. If we didn’t put the hidden sequence point in front of the conditional branch the execution would continue in the old code until another sequence point is hit. Such a sequence point can be arbitrary (suppose e.g. that the else block of the if statement is deleted by an edit). The debugger only knows how to map IP of active statements in the old IL to an IP in the new IL, not arbitrary sequence points. By inserting the hidden sequence point we force the mapping to be performed at well-defined point that we can map to the new method body. The presence of the hidden sequence point then implies the need of storing the value of the if-statement condition to a long-lived local and reloading it back right after the sequence point. The store will happen before the IP is remapped and the load will happen in the new frame. The synthesized local must be allocated the same slot in the new frame so that its value is transferred from the old frame to the new frame. Fixes bug 927151: Edit and Continue breaks If statements while inside the conditional method. This change also includes an update to the test infrastructure to 1) make it easier to update failing test that checks for an expected IL If a VerifyIL fails it synthesizes a temp file containing the unit test source and prints out a link that launches a diff tool (using ROSLYN_DIFFTOOL environment variable). 2) to be able to directly test correspondence of sequence points to IL. VerifyIL has now an optional argument “sequencePoints”. When specified the printed IL will contain marks that designate presence of sequence points at IL offsets. “-“ for regular sequence point, “~” for hidden sequence points. I have updated some tests that are supposed to validate correspondence of sequence points to IL instructions to use this new format. (changeset 1299447)
-
- 15 4月, 2014 1 次提交
-
-
由 YingP99 提交于
-
- 23 3月, 2014 1 次提交
-
-
由 Pilchie 提交于
-
- 19 3月, 2014 1 次提交
-
-
由 Pilchie 提交于
-