UNPKG

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