UNPKG

@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
"use strict"; 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;