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