@neo-one/smart-contract-compiler-esnext-esm
Version:
NEO•ONE TypeScript smart contract compiler.
47 lines (45 loc) • 1.61 kB
JavaScript
import { tsUtils } from '@neo-one/ts-utils-esnext-esm';
import { Helper } from '../../Helper';
export class InObjectPropertyHelper extends 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 ||
(tsUtils.type_.hasSymbolish(this.propType) && !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 (tsUtils.type_.isOnlySymbolish(this.propType)) {
handleSymbol();
}
else {
handleString();
}
}
}
//# sourceMappingURL=InObjectPropertyHelper.js.map