@harmoniclabs/plu-ts-onchain
Version:
An embedded DSL for Cardano smart contracts creation coupled with a library for Cardano transactions, all in Typescript
38 lines (37 loc) • 1.89 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.handleRootRecursiveTerm = exports.handleRecursiveTerms = void 0;
var IRApp_1 = require("../../IRNodes/IRApp.js");
var IRFunc_1 = require("../../IRNodes/IRFunc.js");
var IRHoisted_1 = require("../../IRNodes/IRHoisted.js");
var IRRecursive_1 = require("../../IRNodes/IRRecursive.js");
var IRSelfCall_1 = require("../../IRNodes/IRSelfCall.js");
var IRVar_1 = require("../../IRNodes/IRVar.js");
var getChildren_1 = require("../../tree_utils/getChildren.js");
var _modifyChildFromTo_1 = require("../_internal/_modifyChildFromTo.js");
function handleRecursiveTerms(term) {
if (term instanceof IRRecursive_1.IRRecursive) {
var bodyPtr = term.body;
(0, _modifyChildFromTo_1._modifyChildFromTo)(term.parent, term, new IRApp_1.IRApp(new IRHoisted_1.IRHoisted(new IRFunc_1.IRFunc(1, new IRApp_1.IRApp(new IRVar_1.IRVar(0), new IRVar_1.IRVar(0)))), new IRFunc_1.IRFunc(1, bodyPtr)));
handleRecursiveTerms(bodyPtr);
return;
}
if (term instanceof IRSelfCall_1.IRSelfCall) {
(0, _modifyChildFromTo_1._modifyChildFromTo)(term.parent, term, new IRApp_1.IRApp(new IRVar_1.IRVar(term.dbn), new IRVar_1.IRVar(term.dbn)));
return;
}
(0, getChildren_1.getChildren)(term).forEach(handleRecursiveTerms);
}
exports.handleRecursiveTerms = handleRecursiveTerms;
function handleRootRecursiveTerm(term) {
if (term instanceof IRRecursive_1.IRRecursive) {
var bodyPtr = term.body;
var newRoot = new IRApp_1.IRApp(new IRHoisted_1.IRHoisted(new IRFunc_1.IRFunc(1, new IRApp_1.IRApp(new IRVar_1.IRVar(0), new IRVar_1.IRVar(0)))), new IRFunc_1.IRFunc(1, bodyPtr));
handleRecursiveTerms(bodyPtr);
return newRoot;
}
// else
handleRecursiveTerms(term);
return term;
}
exports.handleRootRecursiveTerm = handleRootRecursiveTerm;