@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
62 lines (60 loc) • 2.35 kB
JavaScript
"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