From 2ca833213cfc63b68d2ccb2302b265b1dec65ae1 Mon Sep 17 00:00:00 2001 From: MikhailArkhipov Date: Tue, 11 Jun 2019 11:37:07 -0700 Subject: [PATCH 1/3] Add null checks --- src/Analysis/Ast/Impl/Analyzer/AnalysisWalker.cs | 2 +- src/Analysis/Ast/Impl/Analyzer/Symbols/SymbolCollector.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Analysis/Ast/Impl/Analyzer/AnalysisWalker.cs b/src/Analysis/Ast/Impl/Analyzer/AnalysisWalker.cs index 60cf40216..c2f9f3aa5 100644 --- a/src/Analysis/Ast/Impl/Analyzer/AnalysisWalker.cs +++ b/src/Analysis/Ast/Impl/Analyzer/AnalysisWalker.cs @@ -40,7 +40,7 @@ internal abstract class AnalysisWalker : PythonWalker { protected ModuleSymbolTable SymbolTable => Eval.SymbolTable; protected AnalysisWalker(ExpressionEval eval) { - Eval = eval; + Eval = eval ?? throw new ArgumentNullException(nameof(eval)); ImportHandler = new ImportHandler(this); AssignmentHandler = new AssignmentHandler(this); LoopHandler = new LoopHandler(this); diff --git a/src/Analysis/Ast/Impl/Analyzer/Symbols/SymbolCollector.cs b/src/Analysis/Ast/Impl/Analyzer/Symbols/SymbolCollector.cs index fe45a8fb9..0be3eff0a 100644 --- a/src/Analysis/Ast/Impl/Analyzer/Symbols/SymbolCollector.cs +++ b/src/Analysis/Ast/Impl/Analyzer/Symbols/SymbolCollector.cs @@ -39,8 +39,8 @@ public static void CollectSymbols(ModuleSymbolTable table, ExpressionEval eval) } private SymbolCollector(ModuleSymbolTable table, ExpressionEval eval) { - _table = table; - _eval = eval; + _table = table ?? throw new ArgumentNullException(nameof(table)); + _eval = eval ?? throw new ArgumentNullException(nameof(eval)); } private void Walk() => _eval.Ast.Walk(this); From dd21878a7fc1e6af06e6a273334e97eb46eec91f Mon Sep 17 00:00:00 2001 From: Mikhail Arkhipov Date: Wed, 19 Jun 2019 19:10:10 -0700 Subject: [PATCH 2/3] Avoid null node in empty global scope --- src/Analysis/Ast/Impl/Extensions/ScopeExtensions.cs | 2 ++ src/Analysis/Ast/Impl/Values/Scope.cs | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Analysis/Ast/Impl/Extensions/ScopeExtensions.cs b/src/Analysis/Ast/Impl/Extensions/ScopeExtensions.cs index 6ba17ce62..69a5d536a 100644 --- a/src/Analysis/Ast/Impl/Extensions/ScopeExtensions.cs +++ b/src/Analysis/Ast/Impl/Extensions/ScopeExtensions.cs @@ -27,6 +27,8 @@ public static int GetBodyStartIndex(this IScope scope) { return cd.HeaderIndex; case FunctionDefinition fd: return fd.HeaderIndex; + case null: + return 0; default: return scope.Node.StartIndex; } diff --git a/src/Analysis/Ast/Impl/Values/Scope.cs b/src/Analysis/Ast/Impl/Values/Scope.cs index d517c4457..2d19cec6d 100644 --- a/src/Analysis/Ast/Impl/Values/Scope.cs +++ b/src/Analysis/Ast/Impl/Values/Scope.cs @@ -126,9 +126,9 @@ public EmptyGlobalScope(IPythonModule module) { } public IPythonModule Module { get; } public string Name => string.Empty; - public ScopeStatement Node => null; + public ScopeStatement Node => Module.Analysis.Ast; public IScope OuterScope => null; - public IGlobalScope GlobalScope { get; protected set; } + public IGlobalScope GlobalScope { get; } public IReadOnlyList Children => Array.Empty(); public IEnumerable EnumerateTowardsGlobal => Enumerable.Repeat(this, 1); public IEnumerable EnumerateFromGlobal => Enumerable.Repeat(this, 1); From 0b529b5cc95ba6d12492289cf9b1685622309b6e Mon Sep 17 00:00:00 2001 From: MikhailArkhipov Date: Thu, 20 Jun 2019 09:14:27 -0700 Subject: [PATCH 3/3] Remove unrelated change --- src/Analysis/Ast/Impl/Analyzer/AnalysisWalker.cs | 2 +- src/Analysis/Ast/Impl/Analyzer/Symbols/SymbolCollector.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Analysis/Ast/Impl/Analyzer/AnalysisWalker.cs b/src/Analysis/Ast/Impl/Analyzer/AnalysisWalker.cs index c2f9f3aa5..60cf40216 100644 --- a/src/Analysis/Ast/Impl/Analyzer/AnalysisWalker.cs +++ b/src/Analysis/Ast/Impl/Analyzer/AnalysisWalker.cs @@ -40,7 +40,7 @@ internal abstract class AnalysisWalker : PythonWalker { protected ModuleSymbolTable SymbolTable => Eval.SymbolTable; protected AnalysisWalker(ExpressionEval eval) { - Eval = eval ?? throw new ArgumentNullException(nameof(eval)); + Eval = eval; ImportHandler = new ImportHandler(this); AssignmentHandler = new AssignmentHandler(this); LoopHandler = new LoopHandler(this); diff --git a/src/Analysis/Ast/Impl/Analyzer/Symbols/SymbolCollector.cs b/src/Analysis/Ast/Impl/Analyzer/Symbols/SymbolCollector.cs index 0be3eff0a..fe45a8fb9 100644 --- a/src/Analysis/Ast/Impl/Analyzer/Symbols/SymbolCollector.cs +++ b/src/Analysis/Ast/Impl/Analyzer/Symbols/SymbolCollector.cs @@ -39,8 +39,8 @@ public static void CollectSymbols(ModuleSymbolTable table, ExpressionEval eval) } private SymbolCollector(ModuleSymbolTable table, ExpressionEval eval) { - _table = table ?? throw new ArgumentNullException(nameof(table)); - _eval = eval ?? throw new ArgumentNullException(nameof(eval)); + _table = table; + _eval = eval; } private void Walk() => _eval.Ast.Walk(this);