Skip to content

Commit 2fef646

Browse files
antonsyndclaude
andcommitted
fix: address verification findings from audit remediation
- CLAUDE.md: Update TypeChecker partial file count from 10 to 11, add .Statements.Patterns.cs to the list - FileCompilationPipeline: Make CodeGenResult.HasErrors derive from Diagnostics.HasErrors consistently with all other result structs - ImportResolver: Remove inconsistent `\!= default` guard on cancellationToken in ResolveImport/ResolveFromImport, assign unconditionally like ResolveAllImports does - TypeChecker.Statements.Patterns.cs: Fix doc comment (remove "tuple unpacking" which isn't in this file) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 462618f commit 2fef646

File tree

4 files changed

+8
-12
lines changed

4 files changed

+8
-12
lines changed

CLAUDE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ The semantic phase runs multiple ordered passes. Understanding this is critical
6767

6868
**Pass 2 — Type Resolution** (`TypeResolver.cs`): Resolves type annotations on declarations to concrete types. Type inference provided by `TypeInferenceService` and `GenericTypeInferenceService`.
6969

70-
**Pass 3 — Type Checking** (`TypeChecker.cs`, split into 10 partial files: `.cs`, `.Definitions.cs`, `.Expressions.cs`, `.Expressions.Access.cs`, `.Expressions.Access.Calls.cs`, `.Expressions.Access.Lambdas.cs`, `.Expressions.Literals.cs`, `.Expressions.Operators.cs`, `.Statements.cs`, `.Utilities.cs`): Traverses AST, infers types, records them in `SemanticInfo`. Then runs `ValidationPipeline`. Type narrowing (e.g., `if x is not None:` narrows `T?``T`) is tracked via `_narrowingContext` (`TypeNarrowingContext`).
70+
**Pass 3 — Type Checking** (`TypeChecker.cs`, split into 11 partial files: `.cs`, `.Definitions.cs`, `.Expressions.cs`, `.Expressions.Access.cs`, `.Expressions.Access.Calls.cs`, `.Expressions.Access.Lambdas.cs`, `.Expressions.Literals.cs`, `.Expressions.Operators.cs`, `.Statements.cs`, `.Statements.Patterns.cs`, `.Utilities.cs`): Traverses AST, infers types, records them in `SemanticInfo`. Then runs `ValidationPipeline`. Type narrowing (e.g., `if x is not None:` narrows `T?``T`) is tracked via `_narrowingContext` (`TypeNarrowingContext`).
7171

7272
**Key registries**: `OperatorRegistry`, `ProtocolRegistry`, `BuiltinRegistry`, `ModuleRegistry`, `PrimitiveCatalog` (source of truth for primitive types and CLR mappings).
7373

src/Sharpy.Compiler/FileCompilationPipeline.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ public CodeGenResult GenerateCode(
300300
if (codeGenContext.HasErrors)
301301
{
302302
diagnostics.Merge(codeGenContext.Diagnostics);
303-
return new CodeGenResult(csharpCode, new Dictionary<string, string>(), diagnostics, true);
303+
return new CodeGenResult(csharpCode, new Dictionary<string, string>(), diagnostics);
304304
}
305305

306306
// Generate C# for all imported .spy modules
@@ -324,7 +324,7 @@ public CodeGenResult GenerateCode(
324324
// Errors are silently skipped — matching ProjectCompiler behavior.
325325
}
326326

327-
return new CodeGenResult(csharpCode, allGeneratedFiles, diagnostics, false);
327+
return new CodeGenResult(csharpCode, allGeneratedFiles, diagnostics);
328328
}
329329

330330
/// <summary>
@@ -450,19 +450,17 @@ internal readonly struct CodeGenResult
450450
public CodeGenResult(
451451
string csharpCode,
452452
Dictionary<string, string> allGeneratedFiles,
453-
DiagnosticBag diagnostics,
454-
bool hasErrors)
453+
DiagnosticBag diagnostics)
455454
{
456455
CSharpCode = csharpCode;
457456
AllGeneratedFiles = allGeneratedFiles;
458457
Diagnostics = diagnostics;
459-
HasErrors = hasErrors;
460458
}
461459

462460
public string CSharpCode { get; }
463461
public Dictionary<string, string> AllGeneratedFiles { get; }
464462
public DiagnosticBag Diagnostics { get; }
465-
public bool HasErrors { get; }
463+
public bool HasErrors => Diagnostics.HasErrors;
466464
}
467465

468466
/// <summary>

src/Sharpy.Compiler/Semantic/ImportResolver.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -250,8 +250,7 @@ public void ResolveAllImports(Module module, SymbolTable symbolTable, string? cu
250250
{
251251
if (currentModulePath != null)
252252
UpdateCurrentModule(currentModulePath);
253-
if (cancellationToken != default)
254-
_cancellationToken = cancellationToken;
253+
_cancellationToken = cancellationToken;
255254
_logger.LogDebug($"Resolving import: {string.Join(", ", importStmt.Names.Select(n => n.Name))}");
256255

257256
var result = new List<ModuleInfo?>();
@@ -320,8 +319,7 @@ public void ResolveAllImports(Module module, SymbolTable symbolTable, string? cu
320319
{
321320
if (currentModulePath != null)
322321
UpdateCurrentModule(currentModulePath);
323-
if (cancellationToken != default)
324-
_cancellationToken = cancellationToken;
322+
_cancellationToken = cancellationToken;
325323
var importedNames = fromImport.ImportAll ? "*" : string.Join(", ", fromImport.Names.Select(n => n.AsName != null ? $"{n.Name} as {n.AsName}" : n.Name));
326324
_logger.LogDebug($"[ImportResolver] Resolving from-import: from {fromImport.Module} import {importedNames}");
327325
if (_currentModulePath != null)

src/Sharpy.Compiler/Semantic/TypeChecker.Statements.Patterns.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
namespace Sharpy.Compiler.Semantic;
88

99
/// <summary>
10-
/// TypeChecker partial class: Pattern matching, tuple unpacking, and related helpers
10+
/// TypeChecker partial class: Pattern matching and related helpers
1111
/// </summary>
1212
internal partial class TypeChecker
1313
{

0 commit comments

Comments
 (0)