@informalsystems/quint
Version:
Core tool for the Quint specification language
64 lines • 2.82 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildType = exports.buildExpression = exports.buildDef = exports.buildDecl = exports.buildModule = exports.buildModuleWithDecls = exports.buildModuleWithExpressions = void 0;
const quintParserFrontend_1 = require("../../src/parsing/quintParserFrontend");
const idGenerator_1 = require("../../src/idGenerator");
const quintIr_1 = require("../../src/ir/quintIr");
const json_bigint_1 = __importDefault(require("json-bigint"));
const src_1 = require("../../src");
function buildModuleWithExpressions(expressions) {
return buildModule([], expressions);
}
exports.buildModuleWithExpressions = buildModuleWithExpressions;
function buildModuleWithDecls(decls, name, idGenerator) {
const quintModule = `module ${name ?? 'wrapper'} { ${decls.join('\n')} }`;
const result = (0, quintParserFrontend_1.parsePhase1fromText)(idGenerator ?? (0, idGenerator_1.newIdGenerator)(), quintModule, 'mocked_path');
if (result.errors.length > 0) {
throw new Error(`Couldn't parse mocked expression. ${result.errors.map(src_1.quintErrorToString)}`);
}
return result.modules[0];
}
exports.buildModuleWithDecls = buildModuleWithDecls;
function buildModule(defs, expressions, name, idGenerator) {
const defsFromExprs = expressions.map((expr, index) => `def d${index} = ${expr}`);
return buildModuleWithDecls(defs.concat(defsFromExprs), name, idGenerator);
}
exports.buildModule = buildModule;
function buildDecl(decl) {
const quintModule = buildModuleWithDecls([decl]);
return quintModule.declarations[0];
}
exports.buildDecl = buildDecl;
function buildDef(def) {
const quintModule = buildModuleWithDecls([def]);
const decl = quintModule.declarations[0];
if (!(0, quintIr_1.isDef)(decl)) {
throw new Error(`Error trying to build def from declaration that is not a def: ${json_bigint_1.default.stringify(decl)}`);
}
return decl;
}
exports.buildDef = buildDef;
function buildExpression(expression) {
const def = buildDef(`def d = ${expression}`);
switch (def.kind) {
case 'def':
return def.expr;
default:
throw new Error(`Error trying to build expression - ${json_bigint_1.default.stringify(def)}`);
}
}
exports.buildExpression = buildExpression;
function buildType(type) {
const def = buildDef(`var a: ${type}`);
if (def.kind === 'var' && def.typeAnnotation) {
return def.typeAnnotation;
}
else {
throw new Error(`Error trying to build expression - ${json_bigint_1.default.stringify(def)}`);
}
}
exports.buildType = buildType;
//# sourceMappingURL=ir.js.map