@harmoniclabs/plu-ts-onchain
Version:
An embedded DSL for Cardano smart contracts creation coupled with a library for Cardano transactions, all in Typescript
48 lines (47 loc) • 2.47 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports._old_plet = void 0;
var IRApp_1 = require("../../../IR/IRNodes/IRApp.js");
var IRFunc_1 = require("../../../IR/IRNodes/IRFunc.js");
var IRLetted_1 = require("../../../IR/IRNodes/IRLetted.js");
var IRSelfCall_1 = require("../../../IR/IRNodes/IRSelfCall.js");
var IRVar_1 = require("../../../IR/IRNodes/IRVar.js");
var Term_1 = require("../../Term/index.js");
var types_1 = require("../../type_system/types.js");
var addUtilityForType_1 = require("../std/UtilityTerms/addUtilityForType.js");
var fromData_minimal_1 = require("../std/data/conversion/fromData_minimal.js");
function _old_plet(varValue) {
// unwrap 'asData' if is the case
varValue = (varValue.type[0] === types_1.PrimType.AsData ? (0, fromData_minimal_1._fromData)(varValue.type[1])(varValue) : varValue);
var type = varValue.type;
var letted = new Term_1.Term(type, function (cfg, dbn) {
return new IRLetted_1.IRLetted(Number(dbn), varValue.toIR(cfg, dbn));
});
var continuation = function (expr) {
var withUtility = (0, addUtilityForType_1.addUtilityForType)(varValue.type);
// only to extracts the type; never compiled
var outType = expr(withUtility(new Term_1.Term(varValue.type, function (_varAccessDbn) { return new IRVar_1.IRVar(0); } // mock variable
))).type;
// return papp( plam( varValue.type, outType )( expr as any ), varValue as any ) as any;
var term = (0, addUtilityForType_1.addUtilityForType)(outType)(new Term_1.Term(outType, function (cfg, dbn) {
var arg = varValue.toIR(cfg, dbn);
if (
// inline variables; no need to add an application since already in scope
arg instanceof IRVar_1.IRVar ||
arg instanceof IRSelfCall_1.IRSelfCall) {
return expr(withUtility(varValue)).toIR(cfg, dbn);
}
return new IRApp_1.IRApp(new IRFunc_1.IRFunc(1, expr(withUtility(new Term_1.Term(varValue.type, function (cfg, varAccessDbn) { return new IRVar_1.IRVar(varAccessDbn - (dbn + BigInt(1))); } // point to the lambda generated here
))).toIR(cfg, dbn + BigInt(1))), arg);
}));
return term;
};
Object.defineProperty(letted, "in", {
value: continuation,
writable: false,
enumerable: false,
configurable: false
});
return letted;
}
exports._old_plet = _old_plet;