implements PR-05.0.1

This commit is contained in:
bQUARKz 2026-03-09 06:02:46 +00:00
parent 88c849d3b0
commit 3b5e8e0b24
Signed by: bquarkz
SSH Key Fingerprint: SHA256:Z7dgqoglWwoK6j6u4QC87OveEq74WOhFN+gitsxtkf8
5 changed files with 44 additions and 8 deletions

View File

@ -20,6 +20,7 @@ import p.studio.compiler.source.tables.CallableSignatureRef;
import p.studio.compiler.source.tables.CallableTable; import p.studio.compiler.source.tables.CallableTable;
import p.studio.compiler.source.tables.IntrinsicReference; import p.studio.compiler.source.tables.IntrinsicReference;
import p.studio.compiler.source.tables.IntrinsicTable; import p.studio.compiler.source.tables.IntrinsicTable;
import p.studio.compiler.source.tables.NameTable;
import p.studio.utilities.structures.ReadOnlyList; import p.studio.utilities.structures.ReadOnlyList;
import java.util.ArrayList; import java.util.ArrayList;
@ -31,7 +32,6 @@ import java.util.Map;
import java.util.Set; import java.util.Set;
public final class PbsFrontendCompiler { public final class PbsFrontendCompiler {
private final PbsDeclarationSemanticsValidator declarationSemanticsValidator = new PbsDeclarationSemanticsValidator();
private final PbsFlowSemanticsValidator flowSemanticsValidator = new PbsFlowSemanticsValidator(); private final PbsFlowSemanticsValidator flowSemanticsValidator = new PbsFlowSemanticsValidator();
private final PbsReservedMetadataExtractor reservedMetadataExtractor = new PbsReservedMetadataExtractor(); private final PbsReservedMetadataExtractor reservedMetadataExtractor = new PbsReservedMetadataExtractor();
private final PbsHostAdmissionValidator hostAdmissionValidator = new PbsHostAdmissionValidator(); private final PbsHostAdmissionValidator hostAdmissionValidator = new PbsHostAdmissionValidator();
@ -57,13 +57,14 @@ public final class PbsFrontendCompiler {
final DiagnosticSink diagnostics, final DiagnosticSink diagnostics,
final SourceKind sourceKind, final SourceKind sourceKind,
final HostAdmissionContext hostAdmissionContext) { final HostAdmissionContext hostAdmissionContext) {
final var nameTable = new NameTable();
final var admissionBaseline = diagnostics.errorCount(); final var admissionBaseline = diagnostics.errorCount();
final var tokens = PbsLexer.lex(source, fileId, diagnostics); final var tokens = PbsLexer.lex(source, fileId, diagnostics);
final var parseMode = sourceKind == SourceKind.SDK_INTERFACE final var parseMode = sourceKind == SourceKind.SDK_INTERFACE
? PbsParser.ParseMode.INTERFACE_MODULE ? PbsParser.ParseMode.INTERFACE_MODULE
: PbsParser.ParseMode.ORDINARY; : PbsParser.ParseMode.ORDINARY;
final var ast = PbsParser.parse(tokens, fileId, diagnostics, parseMode); final var ast = PbsParser.parse(tokens, fileId, diagnostics, parseMode);
final var irBackendFile = compileParsedFile(fileId, ast, diagnostics, sourceKind, hostAdmissionContext); final var irBackendFile = compileParsedFile(fileId, ast, diagnostics, sourceKind, "", hostAdmissionContext, nameTable);
if (diagnostics.errorCount() > admissionBaseline) { if (diagnostics.errorCount() > admissionBaseline) {
return IRBackendFile.empty(fileId); return IRBackendFile.empty(fileId);
} }
@ -91,7 +92,7 @@ public final class PbsFrontendCompiler {
final DiagnosticSink diagnostics, final DiagnosticSink diagnostics,
final SourceKind sourceKind, final SourceKind sourceKind,
final HostAdmissionContext hostAdmissionContext) { final HostAdmissionContext hostAdmissionContext) {
return compileParsedFile(fileId, ast, diagnostics, sourceKind, "", hostAdmissionContext); return compileParsedFile(fileId, ast, diagnostics, sourceKind, "", hostAdmissionContext, new NameTable());
} }
public IRBackendFile compileParsedFile( public IRBackendFile compileParsedFile(
@ -101,8 +102,20 @@ public final class PbsFrontendCompiler {
final SourceKind sourceKind, final SourceKind sourceKind,
final String moduleKey, final String moduleKey,
final HostAdmissionContext hostAdmissionContext) { final HostAdmissionContext hostAdmissionContext) {
return compileParsedFile(fileId, ast, diagnostics, sourceKind, moduleKey, hostAdmissionContext, new NameTable());
}
public IRBackendFile compileParsedFile(
final FileId fileId,
final PbsAst.File ast,
final DiagnosticSink diagnostics,
final SourceKind sourceKind,
final String moduleKey,
final HostAdmissionContext hostAdmissionContext,
final NameTable nameTable) {
final var effectiveNameTable = nameTable == null ? new NameTable() : nameTable;
final var semanticsErrorBaseline = diagnostics.errorCount(); final var semanticsErrorBaseline = diagnostics.errorCount();
declarationSemanticsValidator.validate(ast, sourceKind, diagnostics); new PbsDeclarationSemanticsValidator(effectiveNameTable).validate(ast, sourceKind, diagnostics);
flowSemanticsValidator.validate(ast, diagnostics); flowSemanticsValidator.validate(ast, diagnostics);
if (diagnostics.errorCount() > semanticsErrorBaseline) { if (diagnostics.errorCount() > semanticsErrorBaseline) {
return IRBackendFile.empty(fileId); return IRBackendFile.empty(fileId);

View File

@ -22,7 +22,13 @@ public final class PbsModuleVisibilityValidator {
public void validate( public void validate(
final ReadOnlyList<ModuleUnit> modules, final ReadOnlyList<ModuleUnit> modules,
final DiagnosticSink diagnostics) { final DiagnosticSink diagnostics) {
final var nameTable = new NameTable(); validate(modules, new NameTable(), diagnostics);
}
public void validate(
final ReadOnlyList<ModuleUnit> modules,
final NameTable nameTable,
final DiagnosticSink diagnostics) {
final var exportsByModule = new HashMap<ModuleRefKey, ModuleExports>(); final var exportsByModule = new HashMap<ModuleRefKey, ModuleExports>();
for (final var module : modules) { for (final var module : modules) {

View File

@ -28,9 +28,17 @@ public final class PbsDeclarationSemanticsValidator {
ATTR_BUILTIN_CONST, ATTR_BUILTIN_CONST,
ATTR_INTRINSIC_CALL); ATTR_INTRINSIC_CALL);
private final NameTable nameTable = new NameTable(); private final NameTable nameTable;
private final PbsConstSemanticsValidator constSemanticsValidator = new PbsConstSemanticsValidator(); private final PbsConstSemanticsValidator constSemanticsValidator = new PbsConstSemanticsValidator();
public PbsDeclarationSemanticsValidator() {
this(new NameTable());
}
public PbsDeclarationSemanticsValidator(final NameTable nameTable) {
this.nameTable = nameTable == null ? new NameTable() : nameTable;
}
public void validate(final PbsAst.File ast, final DiagnosticSink diagnostics) { public void validate(final PbsAst.File ast, final DiagnosticSink diagnostics) {
validate(ast, SourceKind.PROJECT, diagnostics); validate(ast, SourceKind.PROJECT, diagnostics);
} }

View File

@ -58,6 +58,7 @@ public class PBSFrontendPhaseService implements FrontendPhaseService {
final DiagnosticSink diagnostics, final DiagnosticSink diagnostics,
final LogAggregator logs, final LogAggregator logs,
final BuildingIssueSink issues) { final BuildingIssueSink issues) {
final var nameTable = ctx.nameTable();
final var irBackendAggregator = IRBackend.aggregator(); final var irBackendAggregator = IRBackend.aggregator();
final var parsedSourceFiles = new ArrayList<ParsedSourceFile>(); final var parsedSourceFiles = new ArrayList<ParsedSourceFile>();
final Map<PbsModuleVisibilityValidator.ModuleCoordinates, MutableModuleUnit> modulesByCoordinates = new LinkedHashMap<>(); final Map<PbsModuleVisibilityValidator.ModuleCoordinates, MutableModuleUnit> modulesByCoordinates = new LinkedHashMap<>();
@ -132,7 +133,7 @@ public class PBSFrontendPhaseService implements FrontendPhaseService {
ReadOnlyList.wrap(moduleUnit.sources), ReadOnlyList.wrap(moduleUnit.sources),
ReadOnlyList.wrap(moduleUnit.barrels))); ReadOnlyList.wrap(moduleUnit.barrels)));
} }
moduleVisibilityValidator.validate(ReadOnlyList.wrap(modules), diagnostics); moduleVisibilityValidator.validate(ReadOnlyList.wrap(modules), nameTable, diagnostics);
markModulesWithLinkingErrors(diagnostics, moduleKeyByFile, failedModuleKeys); markModulesWithLinkingErrors(diagnostics, moduleKeyByFile, failedModuleKeys);
final var moduleDependencyGraph = buildModuleDependencyGraph(parsedSourceFiles); final var moduleDependencyGraph = buildModuleDependencyGraph(parsedSourceFiles);
@ -149,7 +150,8 @@ public class PBSFrontendPhaseService implements FrontendPhaseService {
diagnostics, diagnostics,
parsedSource.sourceKind(), parsedSource.sourceKind(),
parsedSource.moduleKey(), parsedSource.moduleKey(),
ctx.hostAdmissionContext()); ctx.hostAdmissionContext(),
nameTable);
if (diagnostics.errorCount() > compileErrorBaseline) { if (diagnostics.errorCount() > compileErrorBaseline) {
failedModuleKeys.add(parsedSource.moduleKey()); failedModuleKeys.add(parsedSource.moduleKey());
} }

View File

@ -4,12 +4,14 @@ import p.studio.compiler.models.BuildStack;
import p.studio.compiler.models.SourceKind; import p.studio.compiler.models.SourceKind;
import p.studio.compiler.source.identifiers.ProjectId; import p.studio.compiler.source.identifiers.ProjectId;
import p.studio.compiler.source.tables.FileTableReader; import p.studio.compiler.source.tables.FileTableReader;
import p.studio.compiler.source.tables.NameTable;
import p.studio.compiler.source.tables.ProjectTableReader; import p.studio.compiler.source.tables.ProjectTableReader;
public class FrontendPhaseContext { public class FrontendPhaseContext {
public final ProjectTableReader projectTable; public final ProjectTableReader projectTable;
public final FileTableReader fileTable; public final FileTableReader fileTable;
public final BuildStack stack; public final BuildStack stack;
private final NameTable nameTable;
private final int stdlibVersion; private final int stdlibVersion;
private final HostAdmissionContext hostAdmissionContext; private final HostAdmissionContext hostAdmissionContext;
@ -37,6 +39,7 @@ public class FrontendPhaseContext {
this.projectTable = projectTable; this.projectTable = projectTable;
this.fileTable = fileTable; this.fileTable = fileTable;
this.stack = stack; this.stack = stack;
this.nameTable = new NameTable();
this.stdlibVersion = stdlibVersion; this.stdlibVersion = stdlibVersion;
this.hostAdmissionContext = hostAdmissionContext == null this.hostAdmissionContext = hostAdmissionContext == null
? HostAdmissionContext.permissiveDefault() ? HostAdmissionContext.permissiveDefault()
@ -54,4 +57,8 @@ public class FrontendPhaseContext {
public HostAdmissionContext hostAdmissionContext() { public HostAdmissionContext hostAdmissionContext() {
return hostAdmissionContext; return hostAdmissionContext;
} }
public NameTable nameTable() {
return nameTable;
}
} }