UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

62 lines (60 loc) 2.35 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TypeOfExpressionCompiler = 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 NodeCompiler_1 = require("../NodeCompiler"); class TypeOfExpressionCompiler extends NodeCompiler_1.NodeCompiler { constructor() { super(...arguments); this.kind = typescript_1.default.SyntaxKind.TypeOfExpression; } visitNode(sb, node, optionsIn) { const options = sb.pushValueOptions(optionsIn); const expr = ts_utils_1.tsUtils.expression.getExpression(node); const createPushString = (value) => () => { sb.emitOp(node, 'DROP'); sb.emitPushString(node, value); }; const pushObject = createPushString('object'); sb.visit(expr, options); sb.emitHelper(node, options, sb.helpers.forBuiltinType({ type: sb.context.analysis.getType(expr), array: pushObject, arrayStorage: pushObject, boolean: createPushString('boolean'), buffer: pushObject, null: createPushString('null'), number: createPushString('number'), object: pushObject, string: createPushString('string'), symbol: createPushString('symbol'), undefined: createPushString('undefined'), map: pushObject, mapStorage: pushObject, set: pushObject, setStorage: pushObject, error: pushObject, forwardValue: pushObject, iteratorResult: pushObject, iterable: pushObject, iterableIterator: pushObject, transaction: pushObject, output: pushObject, attribute: pushObject, input: pushObject, account: pushObject, asset: pushObject, contract: pushObject, header: pushObject, block: pushObject, })); sb.emitHelper(node, options, sb.helpers.wrapString); if (!optionsIn.pushValue) { sb.emitOp(node, 'DROP'); } } } exports.TypeOfExpressionCompiler = TypeOfExpressionCompiler; //# sourceMappingURL=TypeOfExpressionCompiler.js.map