UNPKG

@harmoniclabs/plu-ts-onchain

Version:

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

89 lines (88 loc) 2.66 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.sanifyTree = void 0; var IRNodes_1 = require("../../IRNodes/index.js"); var IRRecursive_1 = require("../../IRNodes/IRRecursive.js"); /** * makes sure all the childrens in a tree are pointing to the correct parent */ function sanifyTree(ir) { if (ir instanceof IRNodes_1.IRApp) { if (ir.fn.parent !== ir) ir.fn = ir.fn.clone(); else sanifyTree(ir.fn); if (ir.arg.parent !== ir) ir.arg = ir.arg.clone(); else sanifyTree(ir.arg); return; } else if (ir instanceof IRNodes_1.IRFunc) { if (ir.body.parent !== ir) ir.body = ir.body.clone(); else sanifyTree(ir.body); return; } else if (ir instanceof IRRecursive_1.IRRecursive) { if (ir.body.parent !== ir) ir.body = ir.body.clone(); else sanifyTree(ir.body); return; } else if (ir instanceof IRNodes_1.IRLetted) { if (ir.value.parent !== ir) ir.value = ir.value.clone(); else sanifyTree(ir.value); return; } else if (ir instanceof IRNodes_1.IRHoisted) { if (ir.hoisted.parent !== ir) ir.hoisted = ir.hoisted.clone(); else sanifyTree(ir.hoisted); return; } else if (ir instanceof IRNodes_1.IRDelayed) { if (ir.delayed.parent !== ir) ir.delayed = ir.delayed.clone(); else sanifyTree(ir.delayed); return; } else if (ir instanceof IRNodes_1.IRForced) { if (ir.forced.parent !== ir) ir.forced = ir.forced.clone(); else sanifyTree(ir.forced); return; } else if (ir instanceof IRNodes_1.IRConstr) { for (var i = 0; i < ir.fields.length; i++) { var field = ir.fields[i]; if (field.parent !== ir) ir.fields[i] = field.clone(); else sanifyTree(ir.fields[i]); } return; } else if (ir instanceof IRNodes_1.IRCase) { if (ir.constrTerm.parent !== ir) ir.constrTerm = ir.constrTerm.clone(); else sanifyTree(ir.constrTerm); for (var i = 0; i < ir.continuations.length; i++) { var continuation = ir.continuations[i]; if (continuation.parent !== ir) ir.continuations[i] = continuation.clone(); else sanifyTree(ir.continuations[i]); } return; } } exports.sanifyTree = sanifyTree;