@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
50 lines (48 loc) • 6.87 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const ts_utils_1 = require("@neo-one/ts-utils");
const Helper_1 = require("../../Helper");
class InObjectPropertyHelper extends Helper_1.Helper {
constructor({ propType }) {
super();
this.propType = propType;
}
emit(sb, node, options) {
if (!options.pushValue) {
sb.emitOp(node, 'DROP');
sb.emitOp(node, 'DROP');
return;
}
const handleSymbol = () => {
sb.emitHelper(node, options, sb.helpers.unwrapSymbol);
sb.emitHelper(node, options, sb.helpers.inSymbolObjectProperty);
};
const handleString = () => {
sb.emitHelper(node, options, sb.helpers.toString({ type: this.propType }));
sb.emitHelper(node, options, sb.helpers.inPropertyObjectProperty);
};
if (this.propType === undefined ||
(ts_utils_1.tsUtils.type_.hasSymbolish(this.propType) && !ts_utils_1.tsUtils.type_.isOnlySymbolish(this.propType))) {
sb.emitHelper(node, options, sb.helpers.if({
condition: () => {
sb.emitOp(node, 'DUP');
sb.emitHelper(node, options, sb.helpers.isSymbol);
},
whenTrue: () => {
handleSymbol();
},
whenFalse: () => {
handleString();
},
}));
}
else if (ts_utils_1.tsUtils.type_.isOnlySymbolish(this.propType)) {
handleSymbol();
}
else {
handleString();
}
}
}
exports.InObjectPropertyHelper = InObjectPropertyHelper;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkluT2JqZWN0UHJvcGVydHlIZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxnREFBNEM7QUFJNUMseUNBQXNDO0FBUXRDLE1BQWEsc0JBQXVCLFNBQVEsZUFBTTtJQUdoRCxZQUFtQixFQUFFLFFBQVEsRUFBaUM7UUFDNUQsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0lBRU0sSUFBSSxDQUFDLEVBQWlCLEVBQUUsSUFBYSxFQUFFLE9BQXFCO1FBQ2pFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFO1lBRXRCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRXhCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRXhCLE9BQU87U0FDUjtRQUVELE1BQU0sWUFBWSxHQUFHLEdBQUcsRUFBRTtZQUV4QixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUV0RCxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ2xFLENBQUMsQ0FBQztRQUVGLE1BQU0sWUFBWSxHQUFHLEdBQUcsRUFBRTtZQUV4QixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUUzRSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3BFLENBQUMsQ0FBQztRQUVGLElBQ0UsSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTO1lBQzNCLENBQUMsa0JBQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGtCQUFPLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDNUY7WUFDQSxFQUFFLENBQUMsVUFBVSxDQUNYLElBQUksRUFDSixPQUFPLEVBQ1AsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1osU0FBUyxFQUFFLEdBQUcsRUFBRTtvQkFFZCxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFFdkIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3BELENBQUM7Z0JBQ0QsUUFBUSxFQUFFLEdBQUcsRUFBRTtvQkFDYixZQUFZLEVBQUUsQ0FBQztnQkFDakIsQ0FBQztnQkFDRCxTQUFTLEVBQUUsR0FBRyxFQUFFO29CQUNkLFlBQVksRUFBRSxDQUFDO2dCQUNqQixDQUFDO2FBQ0YsQ0FBQyxDQUNILENBQUM7U0FDSDthQUFNLElBQUksa0JBQU8sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUN2RCxZQUFZLEVBQUUsQ0FBQztTQUNoQjthQUFNO1lBQ0wsWUFBWSxFQUFFLENBQUM7U0FDaEI7SUFDSCxDQUFDO0NBQ0Y7QUE1REQsd0RBNERDIiwiZmlsZSI6Im5lby1vbmUtc21hcnQtY29udHJhY3QtY29tcGlsZXIvc3JjL2NvbXBpbGUvaGVscGVyL3R5cGVzL29iamVjdC9Jbk9iamVjdFByb3BlcnR5SGVscGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHNVdGlscyB9IGZyb20gJ0BuZW8tb25lL3RzLXV0aWxzJztcbmltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7IFNjcmlwdEJ1aWxkZXIgfSBmcm9tICcuLi8uLi8uLi9zYic7XG5pbXBvcnQgeyBWaXNpdE9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBIZWxwZXIgfSBmcm9tICcuLi8uLi9IZWxwZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIEluT2JqZWN0UHJvcGVydHlIZWxwZXJPcHRpb25zIHtcbiAgcmVhZG9ubHkgcHJvcFR5cGU6IHRzLlR5cGUgfCB1bmRlZmluZWQ7XG59XG5cbi8vIElucHV0OiBbcHJvcFZhbCwgb2JqZWN0VmFsXVxuLy8gT3V0cHV0OiBbYm9vbGVhbl1cbmV4cG9ydCBjbGFzcyBJbk9iamVjdFByb3BlcnR5SGVscGVyIGV4dGVuZHMgSGVscGVyIHtcbiAgcHVibGljIHJlYWRvbmx5IHByb3BUeXBlOiB0cy5UeXBlIHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih7IHByb3BUeXBlIH06IEluT2JqZWN0UHJvcGVydHlIZWxwZXJPcHRpb25zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnByb3BUeXBlID0gcHJvcFR5cGU7XG4gIH1cblxuICBwdWJsaWMgZW1pdChzYjogU2NyaXB0QnVpbGRlciwgbm9kZTogdHMuTm9kZSwgb3B0aW9uczogVmlzaXRPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKCFvcHRpb25zLnB1c2hWYWx1ZSkge1xuICAgICAgLy8gW29iamVjdFZhbF1cbiAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuICAgICAgLy8gW11cbiAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlU3ltYm9sID0gKCkgPT4ge1xuICAgICAgLy8gW3N0cmluZywgb2JqZWN0VmFsXVxuICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBvcHRpb25zLCBzYi5oZWxwZXJzLnVud3JhcFN5bWJvbCk7XG4gICAgICAvLyBbYm9vbGVhbl1cbiAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy5pblN5bWJvbE9iamVjdFByb3BlcnR5KTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlU3RyaW5nID0gKCkgPT4ge1xuICAgICAgLy8gW3N0cmluZywgb2JqZWN0VmFsXVxuICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBvcHRpb25zLCBzYi5oZWxwZXJzLnRvU3RyaW5nKHsgdHlwZTogdGhpcy5wcm9wVHlwZSB9KSk7XG4gICAgICAvLyBbYm9vbGVhbl1cbiAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy5pblByb3BlcnR5T2JqZWN0UHJvcGVydHkpO1xuICAgIH07XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnByb3BUeXBlID09PSB1bmRlZmluZWQgfHxcbiAgICAgICh0c1V0aWxzLnR5cGVfLmhhc1N5bWJvbGlzaCh0aGlzLnByb3BUeXBlKSAmJiAhdHNVdGlscy50eXBlXy5pc09ubHlTeW1ib2xpc2godGhpcy5wcm9wVHlwZSkpXG4gICAgKSB7XG4gICAgICBzYi5lbWl0SGVscGVyKFxuICAgICAgICBub2RlLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICBzYi5oZWxwZXJzLmlmKHtcbiAgICAgICAgICBjb25kaXRpb246ICgpID0+IHtcbiAgICAgICAgICAgIC8vIFtwcm9wVmFsLCBwcm9wVmFsLCBvYmplY3RWYWxdXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RVUCcpO1xuICAgICAgICAgICAgLy8gW2Jvb2xlYW4sIHByb3BWYWwsIG9iamVjdFZhbF1cbiAgICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy5pc1N5bWJvbCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB3aGVuVHJ1ZTogKCkgPT4ge1xuICAgICAgICAgICAgaGFuZGxlU3ltYm9sKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB3aGVuRmFsc2U6ICgpID0+IHtcbiAgICAgICAgICAgIGhhbmRsZVN0cmluZygpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHRzVXRpbHMudHlwZV8uaXNPbmx5U3ltYm9saXNoKHRoaXMucHJvcFR5cGUpKSB7XG4gICAgICBoYW5kbGVTeW1ib2woKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGFuZGxlU3RyaW5nKCk7XG4gICAgfVxuICB9XG59XG4iXX0=