@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
33 lines (31 loc) • 5.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const ts_utils_1 = require("@neo-one/ts-utils");
const SmartContractForBase_1 = require("../SmartContractForBase");
class SmartContractFor extends SmartContractForBase_1.SmartContractForBase {
emitInitial(sb, _func, node, addressName, options) {
if (ts_utils_1.tsUtils.argumented.getArguments(node).length < 1) {
return;
}
const arg = ts_utils_1.tsUtils.argumented.getArguments(node)[0];
sb.visit(arg, options);
sb.scope.set(sb, arg, options, addressName);
}
emitInvoke(sb, _func, node, prop, addressName, callBuffer, options) {
if (ts_utils_1.tsUtils.argumented.getArguments(node).length < 1) {
return;
}
const arg = ts_utils_1.tsUtils.argumented.getArguments(node)[0];
const scriptHash = sb.context.analysis.extractLiteralAddress(arg);
if (scriptHash === undefined) {
sb.scope.get(sb, arg, options, addressName);
sb.emitHelper(prop, options, sb.helpers.unwrapBuffer);
sb.emitOp(prop, 'CALL_ED', callBuffer);
}
else {
sb.emitOp(prop, 'CALL_E', Buffer.concat([callBuffer, scriptHash]));
}
}
}
exports.SmartContractFor = SmartContractFor;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGdEQUE0QztBQU01QyxrRUFBK0Q7QUFHL0QsTUFBYSxnQkFBaUIsU0FBUSwyQ0FBb0I7SUFDOUMsV0FBVyxDQUNuQixFQUFpQixFQUNqQixLQUEyQixFQUMzQixJQUF1QixFQUN2QixXQUFpQixFQUNqQixPQUFxQjtRQUVyQixJQUFJLGtCQUFPLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBRXBELE9BQU87U0FDUjtRQUVELE1BQU0sR0FBRyxHQUFHLGtCQUFPLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVyRCxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUV2QixFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRVMsVUFBVSxDQUNsQixFQUFpQixFQUNqQixLQUEyQixFQUMzQixJQUF1QixFQUN2QixJQUFvQixFQUNwQixXQUFpQixFQUNqQixVQUFrQixFQUNsQixPQUFxQjtRQUVyQixJQUFJLGtCQUFPLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBRXBELE9BQU87U0FDUjtRQUVELE1BQU0sR0FBRyxHQUFHLGtCQUFPLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRCxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsRSxJQUFJLFVBQVUsS0FBSyxTQUFTLEVBQUU7WUFFNUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFFNUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFdEQsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1NBQ3hDO2FBQU07WUFFTCxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEU7SUFDSCxDQUFDO0NBQ0Y7QUFoREQsNENBZ0RDIiwiZmlsZSI6Im5lby1vbmUtc21hcnQtY29udHJhY3QtY29tcGlsZXIvc3JjL2NvbXBpbGUvYnVpbHRpbnMvY29udHJhY3Qvc21hcnRDb250cmFjdC9mb3IuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0c1V0aWxzIH0gZnJvbSAnQG5lby1vbmUvdHMtdXRpbHMnO1xuaW1wb3J0IHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHsgU2NyaXB0QnVpbGRlciB9IGZyb20gJy4uLy4uLy4uL3NiJztcbmltcG9ydCB7IE5hbWUgfSBmcm9tICcuLi8uLi8uLi9zY29wZSc7XG5pbXBvcnQgeyBWaXNpdE9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBNZW1iZXJMaWtlRXhwcmVzc2lvbiB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IFNtYXJ0Q29udHJhY3RGb3JCYXNlIH0gZnJvbSAnLi4vU21hcnRDb250cmFjdEZvckJhc2UnO1xuXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgZXhwb3J0LW5hbWVcbmV4cG9ydCBjbGFzcyBTbWFydENvbnRyYWN0Rm9yIGV4dGVuZHMgU21hcnRDb250cmFjdEZvckJhc2Uge1xuICBwcm90ZWN0ZWQgZW1pdEluaXRpYWwoXG4gICAgc2I6IFNjcmlwdEJ1aWxkZXIsXG4gICAgX2Z1bmM6IE1lbWJlckxpa2VFeHByZXNzaW9uLFxuICAgIG5vZGU6IHRzLkNhbGxFeHByZXNzaW9uLFxuICAgIGFkZHJlc3NOYW1lOiBOYW1lLFxuICAgIG9wdGlvbnM6IFZpc2l0T3B0aW9ucyxcbiAgKTogdm9pZCB7XG4gICAgaWYgKHRzVXRpbHMuYXJndW1lbnRlZC5nZXRBcmd1bWVudHMobm9kZSkubGVuZ3RoIDwgMSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhcmcgPSB0c1V0aWxzLmFyZ3VtZW50ZWQuZ2V0QXJndW1lbnRzKG5vZGUpWzBdO1xuICAgIC8vIFtidWZmZXJWYWxdXG4gICAgc2IudmlzaXQoYXJnLCBvcHRpb25zKTtcbiAgICAvLyBbXVxuICAgIHNiLnNjb3BlLnNldChzYiwgYXJnLCBvcHRpb25zLCBhZGRyZXNzTmFtZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZW1pdEludm9rZShcbiAgICBzYjogU2NyaXB0QnVpbGRlcixcbiAgICBfZnVuYzogTWVtYmVyTGlrZUV4cHJlc3Npb24sXG4gICAgbm9kZTogdHMuQ2FsbEV4cHJlc3Npb24sXG4gICAgcHJvcDogdHMuRGVjbGFyYXRpb24sXG4gICAgYWRkcmVzc05hbWU6IE5hbWUsXG4gICAgY2FsbEJ1ZmZlcjogQnVmZmVyLFxuICAgIG9wdGlvbnM6IFZpc2l0T3B0aW9ucyxcbiAgKTogdm9pZCB7XG4gICAgaWYgKHRzVXRpbHMuYXJndW1lbnRlZC5nZXRBcmd1bWVudHMobm9kZSkubGVuZ3RoIDwgMSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhcmcgPSB0c1V0aWxzLmFyZ3VtZW50ZWQuZ2V0QXJndW1lbnRzKG5vZGUpWzBdO1xuICAgIGNvbnN0IHNjcmlwdEhhc2ggPSBzYi5jb250ZXh0LmFuYWx5c2lzLmV4dHJhY3RMaXRlcmFsQWRkcmVzcyhhcmcpO1xuICAgIGlmIChzY3JpcHRIYXNoID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFtidWZmZXJWYWwsIHN0cmluZywgcGFyYW1zXVxuICAgICAgc2Iuc2NvcGUuZ2V0KHNiLCBhcmcsIG9wdGlvbnMsIGFkZHJlc3NOYW1lKTtcbiAgICAgIC8vIFtidWZmZXIsIHN0cmluZywgcGFyYW1zXVxuICAgICAgc2IuZW1pdEhlbHBlcihwcm9wLCBvcHRpb25zLCBzYi5oZWxwZXJzLnVud3JhcEJ1ZmZlcik7XG4gICAgICAvLyBbcmVzdWx0XVxuICAgICAgc2IuZW1pdE9wKHByb3AsICdDQUxMX0VEJywgY2FsbEJ1ZmZlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFtyZXN1bHRdXG4gICAgICBzYi5lbWl0T3AocHJvcCwgJ0NBTExfRScsIEJ1ZmZlci5jb25jYXQoW2NhbGxCdWZmZXIsIHNjcmlwdEhhc2hdKSk7XG4gICAgfVxuICB9XG59XG4iXX0=