UNPKG

@harmoniclabs/plu-ts-onchain

Version:

An embedded DSL for Cardano smart contracts creation coupled with a library for Cardano transactions, all in Typescript

63 lines (62 loc) 2.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isClosedIRTerm = void 0; var IRConst_1 = require("../IRNodes/IRConst.js"); var IRFunc_1 = require("../IRNodes/IRFunc.js"); var IRApp_1 = require("../IRNodes/IRApp.js"); var IRError_1 = require("../IRNodes/IRError.js"); var IRNative_1 = require("../IRNodes/IRNative/index.js"); var IRHoisted_1 = require("../IRNodes/IRHoisted.js"); var IRLetted_1 = require("../IRNodes/IRLetted.js"); var IRVar_1 = require("../IRNodes/IRVar.js"); var IRForced_1 = require("../IRNodes/IRForced.js"); var IRDelayed_1 = require("../IRNodes/IRDelayed.js"); var IRConstr_1 = require("../IRNodes/IRConstr.js"); var IRCase_1 = require("../IRNodes/IRCase.js"); var IRRecursive_1 = require("../IRNodes/IRRecursive.js"); var IRSelfCall_1 = require("../IRNodes/IRSelfCall.js"); function _isClosedIRTerm(term, dbn, parent) { if (term instanceof IRVar_1.IRVar) { return term.dbn < dbn; } if (term instanceof IRSelfCall_1.IRSelfCall) { return term.dbn < dbn; } if (term instanceof IRFunc_1.IRFunc) { return _isClosedIRTerm(term.body, dbn + term.arity, term); } if (term instanceof IRRecursive_1.IRRecursive) { return _isClosedIRTerm(term.body, dbn + term.arity, term); } if (term instanceof IRApp_1.IRApp) { return _isClosedIRTerm(term.fn, dbn, term) && _isClosedIRTerm(term.arg, dbn, term); } if (term instanceof IRConstr_1.IRConstr) { return Array.from(term.fields).every(function (f) { return _isClosedIRTerm(f, dbn, term); }); } if (term instanceof IRCase_1.IRCase) { return _isClosedIRTerm(term.constrTerm, dbn, term) && Array.from(term.continuations).every(function (cont) { return _isClosedIRTerm(cont, dbn, term); }); } if (term instanceof IRConst_1.IRConst) return true; if (term instanceof IRError_1.IRError) return true; if (term instanceof IRNative_1.IRNative) return true; if (term instanceof IRHoisted_1.IRHoisted) return true; if (term instanceof IRLetted_1.IRLetted) return _isClosedIRTerm(term.value, dbn, term); if (term instanceof IRForced_1.IRForced) return _isClosedIRTerm(term.forced, dbn, term); if (term instanceof IRDelayed_1.IRDelayed) return _isClosedIRTerm(term.delayed, dbn, term); // not even an IRTerm console.log(parent); throw new Error("`isClosedIRTerm` called on non-IR argument"); } function isClosedIRTerm(term) { return _isClosedIRTerm(term, 0); } exports.isClosedIRTerm = isClosedIRTerm;