internal static bool IsOutArgument(IdentifierNameSyntax identifier) { var argument = identifier.GetSelfOrTopParenthesizedExpression().Parent as ArgumentSyntax; return(argument != null && argument.RefOrOutKeyword.IsKind(SyntaxKind.OutKeyword)); }
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)); }
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)); }
private static bool IsExceptionThrow(IdentifierNameSyntax identifier) { return(identifier.GetSelfOrTopParenthesizedExpression().Parent.IsKind(SyntaxKind.ThrowStatement)); }