UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

55 lines (53 loc) 8.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); 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=data:application/json;charset=utf8;base64,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RXRELE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7U0FDM0I7UUFFRCxJQUFJLFFBQVEsS0FBSyxNQUFNLEVBQUU7WUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxDQUFDO1NBQ3JCO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztDQUNGO0FBM0RELGdDQTJEQyIsImZpbGUiOiJuZW8tb25lLXNtYXJ0LWNvbnRyYWN0LWNvbXBpbGVyL3NyYy9jb21waWxlL2J1aWx0aW5zL2J1ZmZlci9mcm9tLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHNVdGlscyB9IGZyb20gJ0BuZW8tb25lL3RzLXV0aWxzJztcbmltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7IGlzT25seVN0cmluZyB9IGZyb20gJy4uLy4uL2hlbHBlci90eXBlcyc7XG5pbXBvcnQgeyBTY3JpcHRCdWlsZGVyIH0gZnJvbSAnLi4vLi4vc2InO1xuaW1wb3J0IHsgVmlzaXRPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgQnVpbHRpbk1lbWJlckNhbGwgfSBmcm9tICcuLi9CdWlsdGluTWVtYmVyQ2FsbCc7XG5pbXBvcnQgeyBNZW1iZXJMaWtlRXhwcmVzc2lvbiB9IGZyb20gJy4uL3R5cGVzJztcblxuaW50ZXJmYWNlIEhhc2hBbmRFbmNvZGluZyB7XG4gIHJlYWRvbmx5IGhhc2g/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVuY29kaW5nOiBzdHJpbmc7XG59XG5cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSBleHBvcnQtbmFtZVxuZXhwb3J0IGNsYXNzIEJ1ZmZlckZyb20gZXh0ZW5kcyBCdWlsdGluTWVtYmVyQ2FsbCB7XG4gIHB1YmxpYyBlbWl0Q2FsbChcbiAgICBzYjogU2NyaXB0QnVpbGRlcixcbiAgICBfZnVuYzogTWVtYmVyTGlrZUV4cHJlc3Npb24sXG4gICAgbm9kZTogdHMuQ2FsbEV4cHJlc3Npb24sXG4gICAgb3B0aW9uc0luOiBWaXNpdE9wdGlvbnMsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBzYi5wdXNoVmFsdWVPcHRpb25zKG9wdGlvbnNJbik7XG4gICAgaWYgKHRzVXRpbHMuYXJndW1lbnRlZC5nZXRBcmd1bWVudHMobm9kZSkubGVuZ3RoIDwgMSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmdldEhhc2hBbmRFbmNvZGluZyhub2RlKTtcbiAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNiLmNvbnRleHQucmVwb3J0VW5zdXBwb3J0ZWQobm9kZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IGhhc2gsIGVuY29kaW5nIH0gPSByZXN1bHQ7XG4gICAgaWYgKGhhc2ggPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgYXJnID0gdHNVdGlscy5hcmd1bWVudGVkLmdldEFyZ3VtZW50cyhub2RlKVswXTtcbiAgICAgIGNvbnN0IGFyZ1R5cGUgPSBzYi5jb250ZXh0LmFuYWx5c2lzLmdldFR5cGUoYXJnKTtcbiAgICAgIGlmIChhcmdUeXBlICE9PSB1bmRlZmluZWQgJiYgIWlzT25seVN0cmluZyhzYi5jb250ZXh0LCBhcmcsIGFyZ1R5cGUpKSB7XG4gICAgICAgIHNiLmNvbnRleHQucmVwb3J0VW5zdXBwb3J0ZWQobm9kZSk7XG4gICAgICB9XG4gICAgICAvLyBbdmFsXVxuICAgICAgc2IudmlzaXQoYXJnLCBvcHRpb25zKTtcbiAgICAgIC8vIFtzdHJpbmddXG4gICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMudW53cmFwU3RyaW5nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gW3N0cmluZ11cbiAgICAgIHNiLmVtaXRQdXNoQnVmZmVyKG5vZGUsIEJ1ZmZlci5mcm9tKGhhc2gsIEJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSA/IGVuY29kaW5nIDogdW5kZWZpbmVkKSk7XG4gICAgfVxuICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9uc0luLCBzYi5oZWxwZXJzLndyYXBCdWZmZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRIYXNoQW5kRW5jb2Rpbmcobm9kZTogdHMuQ2FsbEV4cHJlc3Npb24pOiBIYXNoQW5kRW5jb2RpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGFyZ3MgPSB0c1V0aWxzLmFyZ3VtZW50ZWQuZ2V0QXJndW1lbnRzKG5vZGUpO1xuICAgIGNvbnN0IGhhc2hBcmcgPSBhcmdzWzBdO1xuICAgIGNvbnN0IGVuY29kaW5nQXJnID0gYXJnc1sxXSBhcyB0cy5FeHByZXNzaW9uIHwgdW5kZWZpbmVkO1xuICAgIGlmIChlbmNvZGluZ0FyZyAhPT0gdW5kZWZpbmVkICYmICF0cy5pc1N0cmluZ0xpdGVyYWwoZW5jb2RpbmdBcmcpKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgZW5jb2RpbmcgPSBlbmNvZGluZ0FyZyA9PT0gdW5kZWZpbmVkID8gJ3V0ZjgnIDogdHNVdGlscy5saXRlcmFsLmdldExpdGVyYWxWYWx1ZShlbmNvZGluZ0FyZyk7XG4gICAgaWYgKHRzLmlzU3RyaW5nTGl0ZXJhbChoYXNoQXJnKSkge1xuICAgICAgY29uc3QgaGFzaCA9IHRzVXRpbHMubGl0ZXJhbC5nZXRMaXRlcmFsVmFsdWUoaGFzaEFyZyk7XG5cbiAgICAgIHJldHVybiB7IGhhc2gsIGVuY29kaW5nIH07XG4gICAgfVxuXG4gICAgaWYgKGVuY29kaW5nID09PSAndXRmOCcpIHtcbiAgICAgIHJldHVybiB7IGVuY29kaW5nIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuIl19