UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

43 lines (41 loc) 1.92 kB
import { Types } from '../../../constants'; import { BuiltinInstanceOf } from '../../BuiltinInstanceOf'; import { BuiltinInterface } from '../../BuiltinInterface'; import { StorageFor, StorageForEach } from '../storage'; import { ArrayStorageIterator } from './iterator'; import { ArrayStorageLength } from './length'; import { ArrayStoragePop } from './pop'; import { ArrayStoragePush } from './push'; class ArrayStorageInterface extends BuiltinInterface { } class ArrayStorageValue extends BuiltinInstanceOf { constructor() { super(...arguments); this.type = 'ArrayStorageConstructor'; } emitInstanceOf(sb, node, optionsIn) { const options = sb.pushValueOptions(optionsIn); sb.visit(node, options); if (optionsIn.pushValue) { sb.emitHelper(node, options, sb.helpers.isArrayStorage); sb.emitHelper(node, options, sb.helpers.wrapBoolean); } else { sb.emitOp(node, 'DROP'); } } } class ArrayStorageConstructorInterface extends BuiltinInterface { } export const add = (builtins) => { builtins.addContractInterface('ArrayStorage', new ArrayStorageInterface()); builtins.addContractValue('ArrayStorage', new ArrayStorageValue()); builtins.addContractMember('ArrayStorage', '__@iterator', new ArrayStorageIterator()); builtins.addContractMember('ArrayStorage', 'forEach', new StorageForEach(Types.ArrayStorage)); builtins.addContractMember('ArrayStorage', 'length', new ArrayStorageLength()); builtins.addContractMember('ArrayStorage', 'push', new ArrayStoragePush()); builtins.addContractMember('ArrayStorage', 'pop', new ArrayStoragePop()); builtins.addContractInterface('ArrayStorageConstructor', new ArrayStorageConstructorInterface()); builtins.addContractMember('ArrayStorageConstructor', 'for', new StorageFor(Types.ArrayStorage)); }; //# sourceMappingURL=index.js.map