@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
55 lines (53 loc) • 8.2 kB
JavaScript
;
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