Files
Foundry-VTT-Docker/resources/app/node_modules/peggy/lib/compiler/passes/fix-library-numbers.js
2025-01-04 00:34:03 +01:00

44 lines
967 B
JavaScript

// @ts-check
"use strict";
const visitor = require("../visitor");
/**
* @param {PEG.ast.Grammar} ast
* @param {string} name
* @returns {number}
*/
function findLibraryNumber(ast, name) {
let libraryNumber = 0;
for (const imp of ast.imports) {
for (const what of imp.what) {
if ((what.type === "import_binding_all") && (what.binding === name)) {
return libraryNumber;
}
}
libraryNumber++;
}
return -1;
}
/** @type {PEG.Pass} */
function fixLibraryNumbers(ast, _options, session) {
const check = visitor.build({
library_ref(/** @type {PEG.ast.LibraryReference} */ node) {
if (node.libraryNumber === -1) {
node.libraryNumber = findLibraryNumber(ast, node.library);
if (node.libraryNumber === -1) {
session.error(
`Unknown module "${node.library}"`,
node.location
);
}
}
},
});
check(ast);
}
module.exports = fixLibraryNumbers;