@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
38 lines (36 loc) • 2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.add = void 0;
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=contract.js.map