@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
61 lines (59 loc) • 7.5 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
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=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlR5cGVPZkV4cHJlc3Npb25Db21waWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxnREFBNEM7QUFDNUMsb0VBQTRCO0FBQzVCLGtEQUErQztBQUkvQyxNQUFhLHdCQUF5QixTQUFRLDJCQUFpQztJQUEvRTs7UUFDa0IsU0FBSSxHQUFHLG9CQUFFLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDO0lBeUR4RCxDQUFDO0lBdkRRLFNBQVMsQ0FBQyxFQUFpQixFQUFFLElBQXlCLEVBQUUsU0FBdUI7UUFDcEYsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRS9DLE1BQU0sSUFBSSxHQUFHLGtCQUFPLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRCxNQUFNLGdCQUFnQixHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUU7WUFDL0MsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDeEIsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDO1FBRUYsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFHOUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDeEIsRUFBRSxDQUFDLFVBQVUsQ0FDWCxJQUFJLEVBQ0osT0FBTyxFQUNQLEVBQUUsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO1lBQ3hCLElBQUksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ3ZDLEtBQUssRUFBRSxVQUFVO1lBQ2pCLFlBQVksRUFBRSxVQUFVO1lBQ3hCLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxTQUFTLENBQUM7WUFDcEMsTUFBTSxFQUFFLFVBQVU7WUFDbEIsSUFBSSxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztZQUM5QixNQUFNLEVBQUUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO1lBQ2xDLE1BQU0sRUFBRSxVQUFVO1lBQ2xCLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7WUFDbEMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztZQUNsQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsV0FBVyxDQUFDO1lBQ3hDLEdBQUcsRUFBRSxVQUFVO1lBQ2YsVUFBVSxFQUFFLFVBQVU7WUFDdEIsR0FBRyxFQUFFLFVBQVU7WUFDZixVQUFVLEVBQUUsVUFBVTtZQUN0QixLQUFLLEVBQUUsVUFBVTtZQUNqQixZQUFZLEVBQUUsVUFBVTtZQUN4QixjQUFjLEVBQUUsVUFBVTtZQUMxQixRQUFRLEVBQUUsVUFBVTtZQUNwQixnQkFBZ0IsRUFBRSxVQUFVO1lBQzVCLFdBQVcsRUFBRSxVQUFVO1lBQ3ZCLE1BQU0sRUFBRSxVQUFVO1lBQ2xCLFNBQVMsRUFBRSxVQUFVO1lBQ3JCLEtBQUssRUFBRSxVQUFVO1lBQ2pCLE9BQU8sRUFBRSxVQUFVO1lBQ25CLEtBQUssRUFBRSxVQUFVO1lBQ2pCLFFBQVEsRUFBRSxVQUFVO1lBQ3BCLE1BQU0sRUFBRSxVQUFVO1lBQ2xCLEtBQUssRUFBRSxVQUFVO1NBQ2xCLENBQUMsQ0FDSCxDQUFDO1FBRUYsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFcEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUU7WUFDeEIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDekI7SUFDSCxDQUFDO0NBQ0Y7QUExREQsNERBMERDIiwiZmlsZSI6Im5lby1vbmUtc21hcnQtY29udHJhY3QtY29tcGlsZXIvc3JjL2NvbXBpbGUvZXhwcmVzc2lvbi9UeXBlT2ZFeHByZXNzaW9uQ29tcGlsZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0c1V0aWxzIH0gZnJvbSAnQG5lby1vbmUvdHMtdXRpbHMnO1xuaW1wb3J0IHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHsgTm9kZUNvbXBpbGVyIH0gZnJvbSAnLi4vTm9kZUNvbXBpbGVyJztcbmltcG9ydCB7IFNjcmlwdEJ1aWxkZXIgfSBmcm9tICcuLi9zYic7XG5pbXBvcnQgeyBWaXNpdE9wdGlvbnMgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBUeXBlT2ZFeHByZXNzaW9uQ29tcGlsZXIgZXh0ZW5kcyBOb2RlQ29tcGlsZXI8dHMuVHlwZU9mRXhwcmVzc2lvbj4ge1xuICBwdWJsaWMgcmVhZG9ubHkga2luZCA9IHRzLlN5bnRheEtpbmQuVHlwZU9mRXhwcmVzc2lvbjtcblxuICBwdWJsaWMgdmlzaXROb2RlKHNiOiBTY3JpcHRCdWlsZGVyLCBub2RlOiB0cy5UeXBlT2ZFeHByZXNzaW9uLCBvcHRpb25zSW46IFZpc2l0T3B0aW9ucyk6IHZvaWQge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBzYi5wdXNoVmFsdWVPcHRpb25zKG9wdGlvbnNJbik7XG5cbiAgICBjb25zdCBleHByID0gdHNVdGlscy5leHByZXNzaW9uLmdldEV4cHJlc3Npb24obm9kZSk7XG4gICAgY29uc3QgY3JlYXRlUHVzaFN0cmluZyA9ICh2YWx1ZTogc3RyaW5nKSA9PiAoKSA9PiB7XG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICAgIHNiLmVtaXRQdXNoU3RyaW5nKG5vZGUsIHZhbHVlKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcHVzaE9iamVjdCA9IGNyZWF0ZVB1c2hTdHJpbmcoJ29iamVjdCcpO1xuXG4gICAgLy8gW2V4cHJdXG4gICAgc2IudmlzaXQoZXhwciwgb3B0aW9ucyk7XG4gICAgc2IuZW1pdEhlbHBlcihcbiAgICAgIG5vZGUsXG4gICAgICBvcHRpb25zLFxuICAgICAgc2IuaGVscGVycy5mb3JCdWlsdGluVHlwZSh7XG4gICAgICAgIHR5cGU6IHNiLmNvbnRleHQuYW5hbHlzaXMuZ2V0VHlwZShleHByKSxcbiAgICAgICAgYXJyYXk6IHB1c2hPYmplY3QsXG4gICAgICAgIGFycmF5U3RvcmFnZTogcHVzaE9iamVjdCxcbiAgICAgICAgYm9vbGVhbjogY3JlYXRlUHVzaFN0cmluZygnYm9vbGVhbicpLFxuICAgICAgICBidWZmZXI6IHB1c2hPYmplY3QsXG4gICAgICAgIG51bGw6IGNyZWF0ZVB1c2hTdHJpbmcoJ251bGwnKSxcbiAgICAgICAgbnVtYmVyOiBjcmVhdGVQdXNoU3RyaW5nKCdudW1iZXInKSxcbiAgICAgICAgb2JqZWN0OiBwdXNoT2JqZWN0LFxuICAgICAgICBzdHJpbmc6IGNyZWF0ZVB1c2hTdHJpbmcoJ3N0cmluZycpLFxuICAgICAgICBzeW1ib2w6IGNyZWF0ZVB1c2hTdHJpbmcoJ3N5bWJvbCcpLFxuICAgICAgICB1bmRlZmluZWQ6IGNyZWF0ZVB1c2hTdHJpbmcoJ3VuZGVmaW5lZCcpLFxuICAgICAgICBtYXA6IHB1c2hPYmplY3QsXG4gICAgICAgIG1hcFN0b3JhZ2U6IHB1c2hPYmplY3QsXG4gICAgICAgIHNldDogcHVzaE9iamVjdCxcbiAgICAgICAgc2V0U3RvcmFnZTogcHVzaE9iamVjdCxcbiAgICAgICAgZXJyb3I6IHB1c2hPYmplY3QsXG4gICAgICAgIGZvcndhcmRWYWx1ZTogcHVzaE9iamVjdCxcbiAgICAgICAgaXRlcmF0b3JSZXN1bHQ6IHB1c2hPYmplY3QsXG4gICAgICAgIGl0ZXJhYmxlOiBwdXNoT2JqZWN0LFxuICAgICAgICBpdGVyYWJsZUl0ZXJhdG9yOiBwdXNoT2JqZWN0LFxuICAgICAgICB0cmFuc2FjdGlvbjogcHVzaE9iamVjdCxcbiAgICAgICAgb3V0cHV0OiBwdXNoT2JqZWN0LFxuICAgICAgICBhdHRyaWJ1dGU6IHB1c2hPYmplY3QsXG4gICAgICAgIGlucHV0OiBwdXNoT2JqZWN0LFxuICAgICAgICBhY2NvdW50OiBwdXNoT2JqZWN0LFxuICAgICAgICBhc3NldDogcHVzaE9iamVjdCxcbiAgICAgICAgY29udHJhY3Q6IHB1c2hPYmplY3QsXG4gICAgICAgIGhlYWRlcjogcHVzaE9iamVjdCxcbiAgICAgICAgYmxvY2s6IHB1c2hPYmplY3QsXG4gICAgICB9KSxcbiAgICApO1xuICAgIC8vIFt2YWxdXG4gICAgc2IuZW1pdEhlbHBlcihub2RlLCBvcHRpb25zLCBzYi5oZWxwZXJzLndyYXBTdHJpbmcpO1xuXG4gICAgaWYgKCFvcHRpb25zSW4ucHVzaFZhbHVlKSB7XG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==