@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
52 lines (50 loc) • 6.64 kB
JavaScript
;
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 types_1 = require("../helper/types");
const NodeCompiler_1 = require("../NodeCompiler");
class VariableDeclarationCompiler extends NodeCompiler_1.NodeCompiler {
constructor() {
super(...arguments);
this.kind = typescript_1.default.SyntaxKind.VariableDeclaration;
}
visitNode(sb, node, options) {
const nameNode = ts_utils_1.tsUtils.node.getNameNode(node);
const expr = ts_utils_1.tsUtils.initializer.getInitializer(node);
if (typescript_1.default.isIdentifier(nameNode)) {
sb.scope.add(ts_utils_1.tsUtils.node.getText(nameNode));
if (expr === undefined) {
if (!options.setValue) {
sb.emitHelper(node, sb.pushValueOptions(options), sb.helpers.wrapUndefined);
}
}
else {
sb.visit(expr, sb.pushValueOptions(options));
if (typescript_1.default.isIdentifier(nameNode)) {
types_1.handleTypeAssignment(sb.context, expr, node);
}
}
sb.scope.set(sb, node, options, ts_utils_1.tsUtils.node.getText(nameNode));
return;
}
if (expr === undefined) {
return;
}
if (typescript_1.default.isArrayBindingPattern(nameNode)) {
sb.emitHelper(nameNode, options, sb.helpers.arrayBinding({
type: sb.context.analysis.getType(expr),
value: expr,
}));
}
else {
sb.emitHelper(nameNode, options, sb.helpers.objectBinding({
type: sb.context.analysis.getType(expr),
value: expr,
}));
}
}
}
exports.VariableDeclarationCompiler = VariableDeclarationCompiler;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlZhcmlhYmxlRGVjbGFyYXRpb25Db21waWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxnREFBNEM7QUFDNUMsb0VBQTRCO0FBQzVCLDJDQUF1RDtBQUN2RCxrREFBK0M7QUFJL0MsTUFBYSwyQkFBNEIsU0FBUSwyQkFBb0M7SUFBckY7O1FBQ2tCLFNBQUksR0FBRyxvQkFBRSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQztJQWtEM0QsQ0FBQztJQWhEUSxTQUFTLENBQUMsRUFBaUIsRUFBRSxJQUE0QixFQUFFLE9BQXFCO1FBQ3JGLE1BQU0sUUFBUSxHQUFHLGtCQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRCxNQUFNLElBQUksR0FBRyxrQkFBTyxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdEQsSUFBSSxvQkFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUM3QixFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxrQkFBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUU3QyxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFO29CQUNyQixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztpQkFDN0U7YUFDRjtpQkFBTTtnQkFDTCxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDN0MsSUFBSSxvQkFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDN0IsNEJBQW9CLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7aUJBQzlDO2FBQ0Y7WUFFRCxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxrQkFBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUVoRSxPQUFPO1NBQ1I7UUFFRCxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7WUFFdEIsT0FBTztTQUNSO1FBRUQsSUFBSSxvQkFBRSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3RDLEVBQUUsQ0FBQyxVQUFVLENBQ1gsUUFBUSxFQUNSLE9BQU8sRUFDUCxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztnQkFDdEIsSUFBSSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ3ZDLEtBQUssRUFBRSxJQUFJO2FBQ1osQ0FBQyxDQUNILENBQUM7U0FDSDthQUFNO1lBQ0wsRUFBRSxDQUFDLFVBQVUsQ0FDWCxRQUFRLEVBQ1IsT0FBTyxFQUNQLEVBQUUsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO2dCQUN2QixJQUFJLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDdkMsS0FBSyxFQUFFLElBQUk7YUFDWixDQUFDLENBQ0gsQ0FBQztTQUNIO0lBQ0gsQ0FBQztDQUNGO0FBbkRELGtFQW1EQyIsImZpbGUiOiJuZW8tb25lLXNtYXJ0LWNvbnRyYWN0LWNvbXBpbGVyL3NyYy9jb21waWxlL2RlY2xhcmF0aW9uL1ZhcmlhYmxlRGVjbGFyYXRpb25Db21waWxlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRzVXRpbHMgfSBmcm9tICdAbmVvLW9uZS90cy11dGlscyc7XG5pbXBvcnQgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQgeyBoYW5kbGVUeXBlQXNzaWdubWVudCB9IGZyb20gJy4uL2hlbHBlci90eXBlcyc7XG5pbXBvcnQgeyBOb2RlQ29tcGlsZXIgfSBmcm9tICcuLi9Ob2RlQ29tcGlsZXInO1xuaW1wb3J0IHsgU2NyaXB0QnVpbGRlciB9IGZyb20gJy4uL3NiJztcbmltcG9ydCB7IFZpc2l0T3B0aW9ucyB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIFZhcmlhYmxlRGVjbGFyYXRpb25Db21waWxlciBleHRlbmRzIE5vZGVDb21waWxlcjx0cy5WYXJpYWJsZURlY2xhcmF0aW9uPiB7XG4gIHB1YmxpYyByZWFkb25seSBraW5kID0gdHMuU3ludGF4S2luZC5WYXJpYWJsZURlY2xhcmF0aW9uO1xuXG4gIHB1YmxpYyB2aXNpdE5vZGUoc2I6IFNjcmlwdEJ1aWxkZXIsIG5vZGU6IHRzLlZhcmlhYmxlRGVjbGFyYXRpb24sIG9wdGlvbnM6IFZpc2l0T3B0aW9ucyk6IHZvaWQge1xuICAgIGNvbnN0IG5hbWVOb2RlID0gdHNVdGlscy5ub2RlLmdldE5hbWVOb2RlKG5vZGUpO1xuICAgIGNvbnN0IGV4cHIgPSB0c1V0aWxzLmluaXRpYWxpemVyLmdldEluaXRpYWxpemVyKG5vZGUpO1xuXG4gICAgaWYgKHRzLmlzSWRlbnRpZmllcihuYW1lTm9kZSkpIHtcbiAgICAgIHNiLnNjb3BlLmFkZCh0c1V0aWxzLm5vZGUuZ2V0VGV4dChuYW1lTm9kZSkpO1xuXG4gICAgICBpZiAoZXhwciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5zZXRWYWx1ZSkge1xuICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgc2IucHVzaFZhbHVlT3B0aW9ucyhvcHRpb25zKSwgc2IuaGVscGVycy53cmFwVW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2IudmlzaXQoZXhwciwgc2IucHVzaFZhbHVlT3B0aW9ucyhvcHRpb25zKSk7XG4gICAgICAgIGlmICh0cy5pc0lkZW50aWZpZXIobmFtZU5vZGUpKSB7XG4gICAgICAgICAgaGFuZGxlVHlwZUFzc2lnbm1lbnQoc2IuY29udGV4dCwgZXhwciwgbm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2Iuc2NvcGUuc2V0KHNiLCBub2RlLCBvcHRpb25zLCB0c1V0aWxzLm5vZGUuZ2V0VGV4dChuYW1lTm9kZSkpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV4cHIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHMuaXNBcnJheUJpbmRpbmdQYXR0ZXJuKG5hbWVOb2RlKSkge1xuICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgbmFtZU5vZGUsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIHNiLmhlbHBlcnMuYXJyYXlCaW5kaW5nKHtcbiAgICAgICAgICB0eXBlOiBzYi5jb250ZXh0LmFuYWx5c2lzLmdldFR5cGUoZXhwciksXG4gICAgICAgICAgdmFsdWU6IGV4cHIsXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgbmFtZU5vZGUsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIHNiLmhlbHBlcnMub2JqZWN0QmluZGluZyh7XG4gICAgICAgICAgdHlwZTogc2IuY29udGV4dC5hbmFseXNpcy5nZXRUeXBlKGV4cHIpLFxuICAgICAgICAgIHZhbHVlOiBleHByLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iXX0=