UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

56 lines (54 loc) 2.29 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.BufferFrom = void 0; const tslib_1 = require("tslib"); const ts_utils_1 = require("@neo-one/ts-utils"); const typescript_1 = tslib_1.__importDefault(require("typescript")); const types_1 = require("../../helper/types"); const BuiltinMemberCall_1 = require("../BuiltinMemberCall"); class BufferFrom extends BuiltinMemberCall_1.BuiltinMemberCall { emitCall(sb, _func, node, optionsIn) { const options = sb.pushValueOptions(optionsIn); if (ts_utils_1.tsUtils.argumented.getArguments(node).length < 1) { return; } const result = this.getHashAndEncoding(node); if (result === undefined) { sb.context.reportUnsupported(node); return; } const { hash, encoding } = result; if (hash === undefined) { const arg = ts_utils_1.tsUtils.argumented.getArguments(node)[0]; const argType = sb.context.analysis.getType(arg); if (argType !== undefined && !types_1.isOnlyString(sb.context, arg, argType)) { sb.context.reportUnsupported(node); } sb.visit(arg, options); sb.emitHelper(node, options, sb.helpers.unwrapString); } else { sb.emitPushBuffer(node, Buffer.from(hash, Buffer.isEncoding(encoding) ? encoding : undefined)); } sb.emitHelper(node, optionsIn, sb.helpers.wrapBuffer); } getHashAndEncoding(node) { const args = ts_utils_1.tsUtils.argumented.getArguments(node); const hashArg = args[0]; const encodingArg = args[1]; if (encodingArg !== undefined && !typescript_1.default.isStringLiteral(encodingArg)) { return undefined; } const encoding = encodingArg === undefined ? 'utf8' : ts_utils_1.tsUtils.literal.getLiteralValue(encodingArg); if (typescript_1.default.isStringLiteral(hashArg)) { const hash = ts_utils_1.tsUtils.literal.getLiteralValue(hashArg); return { hash, encoding }; } if (encoding === 'utf8') { return { encoding }; } return undefined; } } exports.BufferFrom = BufferFrom; //# sourceMappingURL=from.js.map