예제 #1
0
        internal static bool IsOutArgument(IdentifierNameSyntax identifier)
        {
            var argument = identifier.GetSelfOrTopParenthesizedExpression().Parent as ArgumentSyntax;

            return(argument != null &&
                   argument.RefOrOutKeyword.IsKind(SyntaxKind.OutKeyword));
        }
예제 #2
0
        private ProgramState VisitIdentifier(IdentifierNameSyntax identifier, ProgramState programState)
        {
            var symbol = SemanticModel.GetSymbolInfo(identifier).Symbol;
            var sv     = programState.GetSymbolValue(symbol);

            if (sv == null)
            {
                sv = new SymbolicValue();
            }
            var newProgramState = programState.PushValue(sv);

            var parenthesized = identifier.GetSelfOrTopParenthesizedExpression();
            var argument      = parenthesized.Parent as ArgumentSyntax;

            if (argument == null ||
                argument.RefOrOutKeyword.IsKind(SyntaxKind.None))
            {
                return(SetNonNullConstraintIfValueType(symbol, sv, newProgramState));
            }

            newProgramState = newProgramState.PopValue();
            sv = new SymbolicValue();
            newProgramState = newProgramState.PushValue(sv);
            newProgramState = SetNonNullConstraintIfValueType(symbol, sv, newProgramState);
            return(SetNewSymbolicValueIfLocal(symbol, sv, newProgramState));
        }
예제 #3
0
        private ProgramState VisitIdentifier(IdentifierNameSyntax identifier, ProgramState programState)
        {
            var newProgramState = programState;
            var symbol          = SemanticModel.GetSymbolInfo(identifier).Symbol;
            var typeSymbol      = SemanticModel.GetTypeInfo(identifier).Type;
            var sv = newProgramState.GetSymbolValue(symbol);

            if (sv == null)
            {
                var fieldSymbol = symbol as IFieldSymbol;
                if (fieldSymbol != null) // TODO: Fix me when implementing SLVS-1130
                {
                    sv = fieldSymbol.CreateFieldSymbolicValue();
                    newProgramState = newProgramState.StoreSymbolicValue(symbol, sv);
                }
                else
                {
                    sv = SymbolicValue.Create(typeSymbol);
                }
            }
            newProgramState = newProgramState.PushValue(sv);

            var parenthesized = identifier.GetSelfOrTopParenthesizedExpression();
            var argument      = parenthesized.Parent as ArgumentSyntax;

            if (argument == null ||
                argument.RefOrOutKeyword.IsKind(SyntaxKind.None))
            {
                return(SetNonNullConstraintIfValueType(symbol, sv, newProgramState));
            }

            newProgramState = newProgramState.PopValue();
            sv = SymbolicValue.Create(typeSymbol);
            newProgramState = newProgramState.PushValue(sv);
            newProgramState = SetNonNullConstraintIfValueType(symbol, sv, newProgramState);
            return(SetNewSymbolicValueIfTracked(symbol, sv, newProgramState));
        }
예제 #4
0
 private static bool IsExceptionThrow(IdentifierNameSyntax identifier)
 {
     return(identifier.GetSelfOrTopParenthesizedExpression().Parent.IsKind(SyntaxKind.ThrowStatement));
 }