@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
JavaScript
;
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;