Compare commits

...

3 Commits

4 changed files with 41 additions and 3 deletions

View File

@ -3,3 +3,5 @@ export * from "./ast.ts";
export * from "./arch.ts"; export * from "./arch.ts";
export * from "./lexer.ts"; export * from "./lexer.ts";
export * from "./token.ts"; export * from "./token.ts";
export * from "./temputils.ts";

31
compiler/temputils.ts Normal file
View File

@ -0,0 +1,31 @@
import { Checker } from "./checker.ts";
import { Reporter } from "./info.ts";
import { Lexer } from "./lexer.ts";
import { Lowerer } from "./lowerer.ts";
import { Parser } from "./parser.ts";
import { Resolver } from "./resolver.ts";
/// TODO: find a better place for this function
export async function compileWithDebug(path: string): Promise<number[]> {
const text = await Deno.readTextFile(path);
const reporter = new Reporter();
const lexer = new Lexer(text, reporter);
const parser = new Parser(lexer, reporter);
const ast = parser.parseStmts();
new Resolver(reporter).resolve(ast);
new Checker(reporter).check(ast);
if (reporter.errorOccured()) {
console.error("Errors occurred, stopping compilation.");
}
const lowerer = new Lowerer();
lowerer.lower(ast);
lowerer.printProgram();
const program = lowerer.finish();
return program;
}

View File

@ -15,7 +15,8 @@ auto sliger::rpc::action::FlameGraph::perform_action(
{ {
auto json = vm.flame_graph_json(); auto json = vm.flame_graph_json();
if (json) { if (json) {
writer->write(json.value()); writer->write(
std::format("{{ ok: true, flameGraph: \"{}\" }}", json.value()));
} else { } else {
writer->write("null"); writer->write("null");
} }
@ -28,9 +29,10 @@ auto sliger::rpc::action::CodeCoverage::perform_action(
{ {
auto json = vm.code_coverage_json(); auto json = vm.code_coverage_json();
if (json) { if (json) {
writer->write(json.value()); writer->write(
std::format("{{ ok: true, codeCoverage: \"{}\" }}", json.value()));
} else { } else {
writer->write("null"); writer->write("{ ok: false }");
} }
writer->flush(); writer->flush();
}; };

View File

@ -20,6 +20,7 @@ const runtime = new Runtime(13370);
async function compileProgram(filepath: string) { async function compileProgram(filepath: string) {
const result = await compiler.compileWithDebug(filepath); const result = await compiler.compileWithDebug(filepath);
return result;
} }
async function runProgramWithDebug(program: number[]) { async function runProgramWithDebug(program: number[]) {
@ -37,6 +38,8 @@ async function runProgramWithDebug(program: number[]) {
} }
} }
await compileProgram(filepath).then(runProgramWithDebug);
const router = new Router(); const router = new Router();
router.get("/api/source", (ctx) => { router.get("/api/source", (ctx) => {