@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
37 lines (35 loc) • 6.79 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const constants_1 = require("../../constants");
const BuiltinInterface_1 = require("../BuiltinInterface");
const SysCallInstanceMemberPrimitive_1 = require("./SysCallInstanceMemberPrimitive");
const ValueFor_1 = require("./ValueFor");
const ValueInstanceOf_1 = require("./ValueInstanceOf");
class ContractInterface extends BuiltinInterface_1.BuiltinInterface {
}
class ContractConstructorInterface extends BuiltinInterface_1.BuiltinInterface {
}
exports.add = (builtins) => {
builtins.addContractInterface('Contract', new ContractInterface());
builtins.addContractValue('Contract', new ValueInstanceOf_1.ValueInstanceOf('ContractConstructor', (sb) => sb.helpers.isContract));
builtins.addContractMember('Contract', 'script', new SysCallInstanceMemberPrimitive_1.SysCallInstanceMemberPrimitive('Neo.Contract.GetScript', constants_1.Types.Contract, constants_1.Types.Buffer));
builtins.addContractMember('Contract', 'payable', new SysCallInstanceMemberPrimitive_1.SysCallInstanceMemberPrimitive('Neo.Contract.IsPayable', constants_1.Types.Contract, constants_1.Types.Boolean));
builtins.addContractInterface('ContractConstructor', new ContractConstructorInterface());
builtins.addContractMember('ContractConstructor', 'for', new ValueFor_1.ValueFor('Neo.Blockchain.GetContract', (sb, node, options) => {
sb.emitHelper(node, options, sb.helpers.if({
condition: () => {
sb.emitOp(node, 'DUP');
sb.emitPushBuffer(node, Buffer.from([]));
sb.emitOp(node, 'EQUAL');
},
whenTrue: () => {
sb.emitOp(node, 'DROP');
sb.emitHelper(node, options, sb.helpers.wrapUndefined);
},
whenFalse: () => {
sb.emitHelper(node, options, sb.helpers.wrapContract);
},
}));
}));
};
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbnRyYWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsK0NBQXdDO0FBQ3hDLDBEQUF1RDtBQUV2RCxxRkFBa0Y7QUFDbEYseUNBQXNDO0FBQ3RDLHVEQUFvRDtBQUVwRCxNQUFNLGlCQUFrQixTQUFRLG1DQUFnQjtDQUFHO0FBQ25ELE1BQU0sNEJBQTZCLFNBQVEsbUNBQWdCO0NBQUc7QUFHakQsUUFBQSxHQUFHLEdBQUcsQ0FBQyxRQUFrQixFQUFRLEVBQUU7SUFDOUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsRUFBRSxJQUFJLGlCQUFpQixFQUFFLENBQUMsQ0FBQztJQUNuRSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLElBQUksaUNBQWUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ2pILFFBQVEsQ0FBQyxpQkFBaUIsQ0FDeEIsVUFBVSxFQUNWLFFBQVEsRUFDUixJQUFJLCtEQUE4QixDQUFDLHdCQUF3QixFQUFFLGlCQUFLLENBQUMsUUFBUSxFQUFFLGlCQUFLLENBQUMsTUFBTSxDQUFDLENBQzNGLENBQUM7SUFDRixRQUFRLENBQUMsaUJBQWlCLENBQ3hCLFVBQVUsRUFDVixTQUFTLEVBQ1QsSUFBSSwrREFBOEIsQ0FBQyx3QkFBd0IsRUFBRSxpQkFBSyxDQUFDLFFBQVEsRUFBRSxpQkFBSyxDQUFDLE9BQU8sQ0FBQyxDQUM1RixDQUFDO0lBRUYsUUFBUSxDQUFDLG9CQUFvQixDQUFDLHFCQUFxQixFQUFFLElBQUksNEJBQTRCLEVBQUUsQ0FBQyxDQUFDO0lBQ3pGLFFBQVEsQ0FBQyxpQkFBaUIsQ0FDeEIscUJBQXFCLEVBQ3JCLEtBQUssRUFDTCxJQUFJLG1CQUFRLENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFO1FBQy9ELEVBQUUsQ0FBQyxVQUFVLENBQ1gsSUFBSSxFQUNKLE9BQU8sRUFDUCxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNaLFNBQVMsRUFBRSxHQUFHLEVBQUU7Z0JBRWQsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBRXZCLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFFekMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDM0IsQ0FBQztZQUNELFFBQVEsRUFBRSxHQUFHLEVBQUU7Z0JBQ2IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3hCLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3pELENBQUM7WUFDRCxTQUFTLEVBQUUsR0FBRyxFQUFFO2dCQUNkLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3hELENBQUM7U0FDRixDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7QUFDSixDQUFDLENBQUMiLCJmaWxlIjoibmVvLW9uZS1zbWFydC1jb250cmFjdC1jb21waWxlci9zcmMvY29tcGlsZS9idWlsdGlucy9jb250cmFjdC9jb250cmFjdC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFR5cGVzIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEJ1aWx0aW5JbnRlcmZhY2UgfSBmcm9tICcuLi9CdWlsdGluSW50ZXJmYWNlJztcbmltcG9ydCB7IEJ1aWx0aW5zIH0gZnJvbSAnLi4vQnVpbHRpbnMnO1xuaW1wb3J0IHsgU3lzQ2FsbEluc3RhbmNlTWVtYmVyUHJpbWl0aXZlIH0gZnJvbSAnLi9TeXNDYWxsSW5zdGFuY2VNZW1iZXJQcmltaXRpdmUnO1xuaW1wb3J0IHsgVmFsdWVGb3IgfSBmcm9tICcuL1ZhbHVlRm9yJztcbmltcG9ydCB7IFZhbHVlSW5zdGFuY2VPZiB9IGZyb20gJy4vVmFsdWVJbnN0YW5jZU9mJztcblxuY2xhc3MgQ29udHJhY3RJbnRlcmZhY2UgZXh0ZW5kcyBCdWlsdGluSW50ZXJmYWNlIHt9XG5jbGFzcyBDb250cmFjdENvbnN0cnVjdG9ySW50ZXJmYWNlIGV4dGVuZHMgQnVpbHRpbkludGVyZmFjZSB7fVxuXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgZXhwb3J0LW5hbWVcbmV4cG9ydCBjb25zdCBhZGQgPSAoYnVpbHRpbnM6IEJ1aWx0aW5zKTogdm9pZCA9PiB7XG4gIGJ1aWx0aW5zLmFkZENvbnRyYWN0SW50ZXJmYWNlKCdDb250cmFjdCcsIG5ldyBDb250cmFjdEludGVyZmFjZSgpKTtcbiAgYnVpbHRpbnMuYWRkQ29udHJhY3RWYWx1ZSgnQ29udHJhY3QnLCBuZXcgVmFsdWVJbnN0YW5jZU9mKCdDb250cmFjdENvbnN0cnVjdG9yJywgKHNiKSA9PiBzYi5oZWxwZXJzLmlzQ29udHJhY3QpKTtcbiAgYnVpbHRpbnMuYWRkQ29udHJhY3RNZW1iZXIoXG4gICAgJ0NvbnRyYWN0JyxcbiAgICAnc2NyaXB0JyxcbiAgICBuZXcgU3lzQ2FsbEluc3RhbmNlTWVtYmVyUHJpbWl0aXZlKCdOZW8uQ29udHJhY3QuR2V0U2NyaXB0JywgVHlwZXMuQ29udHJhY3QsIFR5cGVzLkJ1ZmZlciksXG4gICk7XG4gIGJ1aWx0aW5zLmFkZENvbnRyYWN0TWVtYmVyKFxuICAgICdDb250cmFjdCcsXG4gICAgJ3BheWFibGUnLFxuICAgIG5ldyBTeXNDYWxsSW5zdGFuY2VNZW1iZXJQcmltaXRpdmUoJ05lby5Db250cmFjdC5Jc1BheWFibGUnLCBUeXBlcy5Db250cmFjdCwgVHlwZXMuQm9vbGVhbiksXG4gICk7XG5cbiAgYnVpbHRpbnMuYWRkQ29udHJhY3RJbnRlcmZhY2UoJ0NvbnRyYWN0Q29uc3RydWN0b3InLCBuZXcgQ29udHJhY3RDb25zdHJ1Y3RvckludGVyZmFjZSgpKTtcbiAgYnVpbHRpbnMuYWRkQ29udHJhY3RNZW1iZXIoXG4gICAgJ0NvbnRyYWN0Q29uc3RydWN0b3InLFxuICAgICdmb3InLFxuICAgIG5ldyBWYWx1ZUZvcignTmVvLkJsb2NrY2hhaW4uR2V0Q29udHJhY3QnLCAoc2IsIG5vZGUsIG9wdGlvbnMpID0+IHtcbiAgICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICAgIG5vZGUsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIHNiLmhlbHBlcnMuaWYoe1xuICAgICAgICAgIGNvbmRpdGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgLy8gW2J1ZmZlciwgYnVmZmVyXVxuICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdEVVAnKTtcbiAgICAgICAgICAgIC8vIFtidWZmZXIsIGJ1ZmZlciwgYnVmZmVyXVxuICAgICAgICAgICAgc2IuZW1pdFB1c2hCdWZmZXIobm9kZSwgQnVmZmVyLmZyb20oW10pKTtcbiAgICAgICAgICAgIC8vIFtib29sZWFuLCBidWZmZXJdXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0VRVUFMJyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB3aGVuVHJ1ZTogKCkgPT4ge1xuICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdEUk9QJyk7XG4gICAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMud3JhcFVuZGVmaW5lZCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB3aGVuRmFsc2U6ICgpID0+IHtcbiAgICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy53cmFwQ29udHJhY3QpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9KSxcbiAgKTtcbn07XG4iXX0=