Initial
This commit is contained in:
43
resources/app/node_modules/peggy/lib/compiler/passes/fix-library-numbers.js
generated
vendored
Normal file
43
resources/app/node_modules/peggy/lib/compiler/passes/fix-library-numbers.js
generated
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
// @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;
|
||||
Reference in New Issue
Block a user