added improvements

This commit is contained in:
bQUARKz 2026-02-27 10:07:34 +00:00
parent d55ec48707
commit 956d3128a9
Signed by: bquarkz
SSH Key Fingerprint: SHA256:Z7dgqoglWwoK6j6u4QC87OveEq74WOhFN+gitsxtkf8
3 changed files with 35 additions and 29 deletions

View File

@ -15,7 +15,11 @@ public class PBSFrontendPhaseService implements FrontendPhaseService {
private final PbsFrontendCompiler frontendCompiler = new PbsFrontendCompiler();
@Override
public IRBackend compile(final FrontendPhaseContext ctx, final LogAggregator logs, final BuildingIssueSink issues) {
public IRBackend compile(
final FrontendPhaseContext ctx,
final DiagnosticSink diagnostics,
final LogAggregator logs,
final BuildingIssueSink issues) {
final MutableList<IRFunction> functions = MutableList.create();
for (final var pId : ctx.stack.reverseTopologicalOrder) {
@ -26,14 +30,10 @@ public class PBSFrontendPhaseService implements FrontendPhaseService {
switch (sourceHandle.getExtension()) {
case "pbs": {
sourceHandle.readUtf8().ifPresentOrElse(
utf8Content -> {
final var diagnostics = DiagnosticSink.empty();
functions.addAll(frontendCompiler
.compileFile(fId, utf8Content, diagnostics)
.stream()
.toList());
adaptDiagnostics(sourceHandle.getCanonPath().toString(), diagnostics, issues);
},
utf8Content -> functions.addAll(frontendCompiler
.compileFile(fId, utf8Content, diagnostics)
.stream()
.toList()),
() -> issues.report(builder -> builder
.error(true)
.message("Failed to read file content: %s".formatted(sourceHandle.toString()))));
@ -51,22 +51,4 @@ public class PBSFrontendPhaseService implements FrontendPhaseService {
.functions(functions.toReadOnlyList())
.build();
}
private void adaptDiagnostics(
final String sourceLabel,
final DiagnosticSink diagnostics,
final BuildingIssueSink issues) {
for (final var diagnostic : diagnostics) {
final var span = diagnostic.getSpan();
issues.report(builder -> builder
.error(diagnostic.getSeverity().isError())
.message("[%s] %s at %s:[%d,%d)"
.formatted(
diagnostic.getCode(),
diagnostic.getMessage(),
sourceLabel,
span.getStart(),
span.getEnd())));
}
}
}

View File

@ -5,6 +5,7 @@ import p.studio.compiler.FrontendRegistryService;
import p.studio.compiler.messages.BuildingIssueSink;
import p.studio.compiler.messages.FrontendPhaseContext;
import p.studio.compiler.models.BuilderPipelineContext;
import p.studio.compiler.source.diagnostics.DiagnosticSink;
import p.studio.compiler.workspaces.PipelineStage;
import p.studio.utilities.logs.LogAggregator;
@ -23,10 +24,28 @@ public class FrontendPhasePipelineStage implements PipelineStage {
final var projectTable = ctx.resolvedWorkspace.graph().projectTable();
final var fileTable = ctx.fileTable;
final var frontendPhaseContext = new FrontendPhaseContext(projectTable, fileTable, ctx.resolvedWorkspace.stack());
final var diagnostics = DiagnosticSink.empty();
final var issues = BuildingIssueSink.empty();
ctx.irBackend = service.get().compile(frontendPhaseContext, logs, issues);
ctx.irBackend = service.get().compile(frontendPhaseContext, diagnostics, logs, issues);
logs.using(log).debug("IR Backend: " + ctx.irBackend);
logs.using(log).debug("Frontend phase completed successfully!");
adaptDiagnostics(diagnostics, issues);
return issues;
}
private void adaptDiagnostics(
final DiagnosticSink diagnostics,
final BuildingIssueSink issues) {
for (final var diagnostic : diagnostics) {
final var span = diagnostic.getSpan();
issues.report(builder -> builder
.error(diagnostic.getSeverity().isError())
.message("[BUILD] %s :: %s @ %s:[%d,%d)".formatted(
diagnostic.getCode(),
diagnostic.getMessage(),
span.getFileId(),
span.getStart(),
span.getEnd())));
}
}
}

View File

@ -3,8 +3,13 @@ package p.studio.compiler.services;
import p.studio.compiler.messages.BuildingIssueSink;
import p.studio.compiler.messages.FrontendPhaseContext;
import p.studio.compiler.models.IRBackend;
import p.studio.compiler.source.diagnostics.DiagnosticSink;
import p.studio.utilities.logs.LogAggregator;
public interface FrontendPhaseService {
IRBackend compile(FrontendPhaseContext request, LogAggregator logs, BuildingIssueSink empty);
IRBackend compile(
FrontendPhaseContext request,
DiagnosticSink diagnostics,
LogAggregator logs,
BuildingIssueSink issues);
}