You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1010 B
JavaScript
46 lines
1010 B
JavaScript
3 years ago
|
"use strict";
|
||
|
|
||
|
const astformer = require("./astformer");
|
||
|
|
||
|
const parse = require("./parse");
|
||
|
const printAST = require("./print-ast");
|
||
|
const transformers = require("./transformers");
|
||
|
const generate = require("@babel/generator").default;
|
||
|
|
||
|
module.exports = function transpile(nixSource) {
|
||
|
if (process.env.DEBUG_NIX) {
|
||
|
console.log("-- DEBUG (SOURCE):\n", nixSource);
|
||
|
}
|
||
|
|
||
|
let ast = parse(nixSource);
|
||
|
|
||
|
if (process.env.DEBUG_NIX) {
|
||
|
console.log("-- DEBUG (AST):");
|
||
|
printAST(ast);
|
||
|
}
|
||
|
|
||
|
// Warm-up for hot VM performance testing
|
||
|
// for (let i = 0; i < 10000; i++) {
|
||
|
// astformer(ast, transformers);
|
||
|
// }
|
||
|
|
||
|
let result = astformer(ast, transformers);
|
||
|
|
||
|
if (process.env.DEBUG_NIX) {
|
||
|
console.log("-- DEBUG (TRANSPILED AST):");
|
||
|
printAST(result.ast);
|
||
|
console.log({ timings: result.timings });
|
||
|
}
|
||
|
|
||
|
let code = generate(result.ast).code;
|
||
|
|
||
|
if (process.env.DEBUG_NIX) {
|
||
|
console.log("-- DEBUG (INPUT):");
|
||
|
console.log(nixSource);
|
||
|
console.log("-- DEBUG (OUTPUT):");
|
||
|
console.log(code);
|
||
|
}
|
||
|
|
||
|
return code;
|
||
|
};
|