user stats

Member SinceJuly 12, 2006
Last VisitJanuary 7, 2015


coordinator for

MySQL Extensions for Phalanger

developer for

.NET Compiler Platform ("Roslyn")


personal statement

Developer at Microsoft.

activity stream

January 8, 2015 - .NET Compiler Platform ("Roslyn"): Committed bf2cd3bb97c0097007ccd2b6e9a1ddcba1860cf5, Implements misc CR feedback: naming, comments, moving code around, etc. (changeset 1393287)

January 8, 2015 - .NET Compiler Platform ("Roslyn"): Committed 74142c4ff70914c5e22ccb480322731a9cede9c7, Currently we include a method ordinal to the name of a synthesized member produced during lowering of the method. When a method is added during EnC in the middle of existing members the ordinal is not enough to avoid name conflicts with the previously emitted synthesized members. In order to guarantee uniqueness of the names we now include generation ordinal in synthesized names as well, wherever we use method ordinal. Generation ordinal 0 (regular build) is omitted - the additional number is only added to names of synthesized members created during EnC compilation. An alternative would be to find the highest existing ordinal and start indexing EnC members from there. Such approach would probably work but including the generation number is much simpler and imposes less constraints on the EnC compilation. In addition to including the generic ordinal this changeset also fixes a couple of bugs that were previously masked or we haven't had coverage of the scenarios: - the EnC changeset calculation was not properly handling additions of synthesized members into existing synthesized classes. - SymbolMatcher didn't map local variable types forward correctly for variables of synthesized types. - SymbolMatcher didn't handle generic static lambda display classes with generic. Currently we create generic parameters for these classes via alpha renaming of the type parameters of the top-level generic method. VB is constructing fresh generic parameters, which seems a better approach. I'll leave changing this to a follow-up changeset. As a byproduct of this change we can now enable editing of methods containing dynamic operations. It just works now! Each update of such method creates a new set of dynamic sites. We don't attempt to reuse existing sites. It's little bit wasteful but it also avoids the need of invalidating the call-site caches. (changeset 1393184)

January 8, 2015 - .NET Compiler Platform ("Roslyn"): Committed bf2414257db3d8792bd3c0889656bfbbd0b79758, Removes dependency on MDBG from PdbUtilities and cleans up SymUnmanagedReaderExtensions and CustomDebugInfoReader. (changeset 1393106)

January 8, 2015 - .NET Compiler Platform ("Roslyn"): Committed 56a4fa45d49bc57cc0949d4cd5cc5cbb4ff50b8e, Add filters to C# rename rewriter to get a better crash dump. (changeset 1393031)

January 8, 2015 - .NET Compiler Platform ("Roslyn"): Committed 58b38b9ae0ad80d0914ab08825a0103378f7a7bc, ImmutableArrayExtensions should be internal - we shouldn't be exposing public extension methods on collection types. (changeset 1392421)

January 8, 2015 - .NET Compiler Platform ("Roslyn"): Committed 83e4349133d27a8f4dd5a85b69eb4ba00d41e6f8, Clean up Utilities dir in C# compiler. (changeset 1392205)

January 8, 2015 - .NET Compiler Platform ("Roslyn"): Committed 42e4a5d115d9984103584931bb99e6793c6ba5cd, Encapsulate heaps and operations on them in a MetadataHeapsBuilder. Previously pieces of related functionality were scattered all over. Improvements in visualizer: for each blob on #Blobs heap display its kind (TypeSpec, MethodSignature, etc.). Calculate and display aggregate blob sizes per kind. (changeset 1392195)

January 8, 2015 - .NET Compiler Platform ("Roslyn"): Committed 9c7ab597e95643579c218e92baea7b87955d3673, Static lambdas in generic methods are emitted on per-method display class. Include method ordinal into its name to make it unique. The previous change to synthesized name numbering introduced a regression - if two generic methods of the same arity contained static lambdas the resulting assembly had duplicate type names. This change addresses that case. (changeset 1391470)

January 8, 2015 - .NET Compiler Platform ("Roslyn"): Committed 94711411ef70002f41f370cc6dec8d7f3f4917d2, Implements a new approach to generating unique synthesized member names (see also the attached email). 1) Assigns each member a "member ordinal" - the index in the members array of the containing type. The ordinal is propagated thru lowering rewriters which uses it to make generated names unique. 2) We no longer calculate "overload ordinal" for names of state machine types, we use the member ordinal of the async/iterator method instead. 3) Removes GenerateTempNumber from TypeCompiationState. Combination of method ordinal and other indices is used to make generated names unique: - Display classes use ordinal of the method containing the lambda and closure scope ordinal (unique within a method). Static display class is shared across all non-generic methods of a containing class and thus doesn't need a unique number in name (it;'s simple named "c<>"). - Lambda methods include containing method ordinal (unless emitted to a display class whose name already includes it) and lambda ordinal (unique within a method). - The same for fields caching lambdas. - Dynamic site containers - no longer include method name in the type name, instead method ordinal is used. 4) Expression compiler - rename generated type to "<>x" to avoid confusion with "<>c" static display class. 5) Avoid replacing "." with "_" in member names, other than type names. While displaying stack frames the EE extracts method name from synthesized lambdas method names and displays it. Thus we were displaying "I_F" instead of "I.F" for explicitly implemented methods. In type names replace "." with "-". Replacing with "_" lead to duplicate type names in emitted assembly (2 iterator methods with names "I_F" and "I.F" - explicitly implemented iface method). (changeset 1390962)

January 6, 2015 - .NET Compiler Platform ("Roslyn"): Committed b2126a6dc6c234a66c403269542c676928fa559a, A few small tweaks in the implementation of IsKind and Kind that make them more efficient and avoid reference comparison with a string literal. (changeset 1389634)

projects i'm following


No forks.