import * as SWC from "../src/swc.ts"; import { CallExpression, ExpressionStatement } from "../src/swc.ts"; import * as Trans from "../src/transformers.ts"; const input = Deno.readTextFileSync("./benchmarks/benchtest.ts"); const fakeState = { input: "", indent: " ", idents: new Map(), opts: { indent: 4, showSourceStatements: false, attr: {}, meta: {}, } }; const ast = SWC.parse(input, { syntax: "typescript", comments: true, target: "es2020", }); const template = Deno.readTextFileSync("./assets/template.fprg"); Deno.bench("transform", () => { Trans.transform(input, ast, { indent: 3, showSourceStatements: true, }, template); }); Deno.bench("transformBlock", () => { Trans.transformBlock( ast.body, { ...fakeState, idents: new Map() }, ); }); Deno.bench("transformVariableDecl", () => { Trans.transformVariableDecl( ast.body[7] as SWC.VariableDeclaration, { ...fakeState, idents: new Map() }, ); }); fakeState.idents = new Map([ ["a", { type: "int", defined: true }], ["b", { type: "int", defined: true }], ]); Deno.bench("transformExpr :: `20 / ((5 + a) ^ (a + b))`", () => { Trans.transformExpr( (ast.body[10] as SWC.VariableDeclaration).declarations[0].init!, fakeState.idents, ); }); Deno.bench("transformBlockCallExpr :: `print(a + b)`", () => { Trans.transformBlockCallExpr( (ast.body[9] as ExpressionStatement).expression as CallExpression, fakeState, ); }); Deno.bench("transformIfStmt", () => { Trans.transformIfStmt( ast.body[19] as SWC.IfStatement, fakeState ); });