- 03 5月, 2014 9 次提交
-
-
由 TomasMatousek 提交于
In C# lowering of async method stored the state machine type on SourceMethodSymbol so it can later be used when emitting synthesized attributes of the method. This may cause issues when emitting the same compilation twice with different options that affect the state machine type. Instead we should store the state machine type to the current PEModuleBuilder. Rather then actually storing it there and adding a dependency on PEModuleBuilder to the attribute generation this change introduces ModuleCompilationState (similar to TypeCompilationState) and threads that one. This type is designed to be mutable during compilation (lowering) and immutable during emit. The idea is that all data currently stored in PEModuleBuilder that are produced during compilation and only read in emit could be moved there. Only emit specific data would remain on PEModuleBuilder. Also refactors Compilation.Compile to remove some duplication and make it cleaner. (changeset 1249664)
-
由 VSadov 提交于
Change Description: Implementation of conditional access operators ( ?. and ?[] ) The grammar roughly looks like: expr ::= | ... | expr ? tail tail ::= | tailopt . id tail ::= | tailopt .$ id <--- this is NYI in this change | tailopt [ expr-args ] | tail ( expr-args ) Note that the tail isn’t optional for invocation: there is no ?(…) operator. Interesting implementation points: == Parsing/syntax Syntax tree is right associative – it has the same topology as in the grammar. However I did not create special variants for all the kinds of syntax that could be produced by the parsing of the tail of accessors. I just use regular syntax nodes with exception of the topmost node that is the conditional access operator itself and the lower-leftmost node that textually starts the accessor tail. The root node looks like – ConditionalAccessExpression { ExpressionSyntax Expression; SyntaxToken OperatorToken; // always “?” ExpressionSyntax WhenNotNull; // by analogy with conditional expression which uses WhenTrue } WhenNotNull is an ExpressionSyntax that represent the sequence of postfix operations conditionally applied to the Expression. These are regular InvocationExpressions, MemberAccesses, ElementAcesses – whatever postfix operators we have. The only special part about WhenNotNull is that the low-leftmost expression child is one of 2 special “binding” nodes – MemberBindingExpression, ElementBindingExpression. Binding expressions are entities which can start the chain of WhenNotNull . Textually they look like - “ .SimpleName“ , “[argList]” or “$Name” (when $ accessor is supported). Note that there is no InvocationBinding, since we do not allow () to start the chain of applications – you cannot do “a?(arg)”. The binding expression syntaxes are basically versions of corresponding member/element/dollar access expressions without receivers. R?.a.b(x).c Would parse as ConditionalAccess / | \ R ? MemberAccess / | \ Invocation . c / \ MemberAccess ArgList{( x )} / | \ MemberBinding . b | \ . a The advantage of using regular syntax nodes on the right side is that semantical analysis “just works”. Naturally, because of the topology, the API cannot ask nonsensical questions like - what is the type of subexpression “R?.a.b” ? Since “R?.a.b” is not a subexpression, there is no way to ask such question. It is however possible to interrogate member accesses – they are just regular member accesses (in both syntax and bound trees) so they naturally know their types etc… == Binding Binding of the tree above is fairly simple – I only had to add binding support for the left-lowermost binding nodes. And what comes out is really just regular access expressions with placeholder receiver. I cannot refer to the actual receiver since we are not evaluating it again. In terms of schema - Bound tree actually needed even fewer changes than syntax tree – the bound tree for the above expression is just a regular bound tree. It is isomorphic to the syntax. The only new bound nodes are the root BoundConditionalAccess and the left-lowermost placeholder receiver – BoundConditionalReceiver. BoundConditionalAccess / \ <BoundExpr> BoundMemberAccess {c} / BoundCall {b} / \ BoundMemberAccess {a} List<Args>{ x } / BoundConditionalReceiver == Dataflow Dataflow considers BoundConditionalReceiver always assigned. However the whole WhenNotNull is reachable conditionally - i.e. assignedVariables state is forked when going into WhenNotNull. “receiver is a const” situation is handled trivially. That is similar to the ?? operator but somewhat inverted. == Emit There are two ways to emit this : - In complex cases (nullables, async, expr trees) we lower the conditional access into a ternary with consequence being rewritten as0is with just BoundConditionalReceiver replaced by a temp for the receiver value. - In simple case (all reference types), we do not lower the node, emit of BoundConditionalAccess dups the receiver (thus avoiding an IL temp) , checks it for null and conditionally executes the the access expression. BoundConditionalReceiver is handled by emit by not emitting anything since it represents receiver value and that is on the stack already. (changeset 1249636)
-
由 ChuckStoner 提交于
EnC: MethodImpl entries should only be added if the implementing method was added (changeset 1249535)
-
由 kayleh 提交于
-
由 mattwar 提交于
-
由 YingP99 提交于
Bug fix (687246, 687 373): globalization - pass proper culture information when calling some TryParse() and IndexOf() methods (changeset 1249342)
-
由 AlekseyTs 提交于
-
由 AlekseyTs 提交于
-
由 kayleh 提交于
This avoids unnecessary calls to AssemblyQualifiedName. (changeset 1248550)
-
- 02 5月, 2014 6 次提交
-
-
由 mattwar 提交于
-
由 MuradT 提交于
This deals with bug 552717: C# IntelliSense: 'case' shouldn't appear in completion list after 'goto '. It stops showing 'case 0', 'case 1' etc. labels in goto statements inside a switch block. It also stops showing the 'default' *keyword* after such a 'goto'. (The symbol completion provider already shows it in intellisense if it's been defined, and it without this change we'd see two of these). The compiler still reports some labels with a colon appended to the end for which I've logged bug 937141: Labels in a switch statement have the colon appended to the name of the label, e.g. 'case 0:', 'default:' (changeset 1248486)
-
由 AlekseyTs 提交于
Perform method group conversion validation when an instance of a delegate type is passed as an argument to a delegate constructor. (changeset 1248441)
-
由 acasey 提交于
-
由 AlekseyTs 提交于
When ArrayInitializerExpression is a local variable/field initializer, GetTypeInfo should return ConvertedType equal to the array type of the symbol being initialized. Fixes #116. (changeset 1248307)
-
由 TomasMatousek 提交于
Renames Emit.Context to EmitContext and removes unnecessary namespace qualifications of EmitContext and Cci types. (changeset 1248215)
-
- 01 5月, 2014 3 次提交
-
-
由 TomasMatousek 提交于
We need to be more conscious about producing synthesized symbols during lowering in order to enable EnC of method bodies whose lowering produce such symbols (e.g. lambdas, iterators, dynamic sites, etc.). This change refactors synthesized symbols in C# so that all symbols produced during lowering phase implement an interface (ISynthesizedMethodBodyImplementationSymbol) that can be used in the emit phase to retrieve information necessary for updating the corresponding metadata entities should they enter EnC. I also attempted to somewhat improve and increase consistency of the naming of synthesized symbols involved in this change. No new functionality is added by this change. (changeset 1247789)
-
由 acasey 提交于
Crefs ignore inherited members, but I missed a few cases. 1) Binder lookup dropped them, but semantic model lookup (totally separate code path) did not. 2) Base interface members were dropped, but System.Object members were not (except with recovery code during binding). (changeset 1245954)
-
由 ChuckStoner 提交于
-
- 30 4月, 2014 2 次提交
-
-
由 ChuckStoner 提交于
-
由 skytribe 提交于
Bug (934091) fix and additional coverage for conflict error messages when conflict between static local and local are defined with the same name Additional coverage added to ensure that single diagnostic is generated irrespective of order. (changeset 1242502)
-
- 29 4月, 2014 1 次提交
-
-
由 skytribe 提交于
Bug Fix 933719 on diagnostic message to remove term VB Core as its possible to repro without using VB Core. Change Tests and add additional coverage for command line and Compilation scenarios without VB Core being used. (changeset 1241434)
-
- 28 4月, 2014 2 次提交
-
-
https://roslyn.codeplex.com/workitem/90由 Kevin_H 提交于
There were issues with the PE headers generated by the compiler when emitting assemblies with no win32 resources (default behavior when you call Compilation.Emit). If the size of a section is zero, then the relative virtual address should also be zero. Previously, we would unconditionally set the address of the resource section to the end of the most recently preceding section that contained any data. This was wrong in and of itself, but it also had the knock-on effect of breaking the logic in PeWriter.WriteRelocSection that is supposed to pad the last section to align with the file alignment boundary. (changeset 1240642)
-
由 srivatsn 提交于
When warnaserror is set for a project, we set the GeneralDiagnosticOption on CompilationOptions to be error and that turns any diagnostic that doesn't have a specific option set to an error. This means diagnostcs from simplify typename etc. get turned into errors and squiggles everything. The consensus from the diagnostic team meeting was this: * When doing warn-as-error, don't raise severity for anything *below* warning (info or hidden). * When doing suppress-all-warnings, don't lower severity for anything *above* warning (error). Implementing this in C# and VB. Tests will follow. (changeset 1239863)
-
- 25 4月, 2014 5 次提交
-
-
由 TomasMatousek 提交于
-
由 jeremymeng 提交于
Use $(VisualStudioVersion) for MinimumVisualStudioVersion so the project won't trigger project upgrade dialog in higher versions of Visual Studio. (changeset 1239621)
-
由 chandera 提交于
-
由 tmeschter 提交于
When loading a .ruleset file we first validate it against a schema. However, we have a single XmlSchema object to do this, held in a static field. This means that if VBCSCompiler.exe is processing multiple build requests at once we may end up using this object simultaneously from multiple threads, and it isn't thread-safe. The fix here is to create a new XmlSchema every time we need it. (changeset 1239493)
-
由 AlekseyTs 提交于
-
- 24 4月, 2014 8 次提交
-
-
由 jasonmalinowski 提交于
Without this, the option service couldn't distinguish between the two, and so it was loading the feature-specific option serializers for non-feature-specific options. This not only was a waste of resources (the VB serializers don't need to be loaded if all you have is C# open), but also risked deadlocks due to the subtleties in how serializers in VS must be created. (changeset 1238958)
-
由 tmeschter 提交于
Currently the compilers raise an error if a FileNotFoundException occurs while trying to load the ruleset file. However, DirectoryNotFoundExceptions are not handled, causing the compiler to crash. Here we update RuleSet.LoadFromFile to utilize methods from FileUtilities. These already catch a number of exceptions related to reading files, and repackage them as IOExceptions. RuleSet.GetDiagnosticOptionsFromRuleSetFile can then handle them all by catching IOException. (changeset 1238689)
-
由 srivatsn 提交于
Ruleset parser was parsing only the rules from the managed analyzer. This was our original design but we recently changed it so that each custom analyzer will have it's own analyzer id but i forgot to remove this restrcition when I made that change. Removing the restriction. (changeset 1238580)
-
由 heejaechang 提交于
-
由 TomasMatousek 提交于
- Rename C# and VB subclasses to CSharpDefinitionMap and VisualBasicDefinitionMap, so that it's obvious that one is dealing with language specific subclass rather than the common superclass. - Move some code that can easily be shared between C# and VB to the common superclass. - Move local visitors to a separate file, make then nested in the DefinitionMap, so that C# impl matches VB. (changeset 1238157)
-
由 skytribe 提交于
Static Local : Additional Error for Duplicate Declarations (changeset 1238123)
-
由 acasey 提交于
-
由 shyamn 提交于
Note: There is a bunch more code that could be deleted from the compiler perf tests. However, this is all I had appetite for at the moment and is the minimum that I required to get rid of for the experiement I am working on. (changeset 1237733)
-
- 23 4月, 2014 4 次提交
-
-
由 KirillOsenkov 提交于
-
由 TomasMatousek 提交于
-
由 jasonmalinowski 提交于
The addition of an unserializable field (aliases) means we need to have custom serialization logic. (changeset 1237606)
-
由 BalajiKris 提交于
Bug Fix for Devdiv: 931186. Makes type inference work inside short hand array initializer notations such as int[] a = {1,2,3}. Added some tests to cover this scenario and Implicit Array creation scenarios (var a = new[] {1,2,3}) (changeset 1237541)
-