UNPKG

@informalsystems/quint

Version:

Core tool for the Quint specification language

64 lines 2.82 kB
"use strict"; 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