UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

70 lines (68 loc) 2.49 kB
import { BuiltinInstanceOf } from '../BuiltinInstanceOf'; import { BuiltinInterface } from '../BuiltinInterface'; import { ArrayConcat } from './concat'; import { ArrayEntries } from './entries'; import { ArrayEvery } from './every'; import { ArrayFilter } from './filter'; import { ArrayForEach } from './forEach'; import { ArrayIterator } from './iterator'; import { ArrayJoin } from './join'; import { ArrayLength } from './length'; import { ArrayMap } from './map'; import { ArrayPop } from './pop'; import { ArrayPush } from './push'; import { ArrayReduce } from './reduce'; import { ArraySlice } from './slice'; import { ArraySome } from './some'; import { ArrayToString } from './toString'; class ArrayInterface extends BuiltinInterface { } class ReadonlyArrayInterface extends BuiltinInterface { } class ArrayValue extends BuiltinInstanceOf { constructor() { super(...arguments); this.type = 'ArrayConstructor'; } emitInstanceOf(sb, node, optionsIn) { const options = sb.pushValueOptions(optionsIn); sb.visit(node, options); if (optionsIn.pushValue) { sb.emitHelper(node, options, sb.helpers.isArray); sb.emitHelper(node, options, sb.helpers.wrapBoolean); } else { sb.emitOp(node, 'DROP'); } } } class ArrayConstructorInterface extends BuiltinInterface { } const COMMON = [ ['filter', new ArrayFilter()], ['forEach', new ArrayForEach()], ['__@iterator', new ArrayIterator()], ['length', new ArrayLength()], ['map', new ArrayMap()], ['reduce', new ArrayReduce()], ['toString', new ArrayToString()], ['concat', new ArrayConcat()], ['join', new ArrayJoin()], ['slice', new ArraySlice()], ['some', new ArraySome()], ['every', new ArrayEvery()], ['entries', new ArrayEntries()], ]; export const add = (builtins) => { builtins.addInterface('Array', new ArrayInterface()); builtins.addInterface('ReadonlyArray', new ReadonlyArrayInterface()); builtins.addValue('Array', new ArrayValue()); COMMON.forEach(([name, builtin]) => { builtins.addGlobalMember('Array', name, builtin); builtins.addGlobalMember('ReadonlyArray', name, builtin); }); builtins.addGlobalMember('Array', 'pop', new ArrayPop()); builtins.addGlobalMember('Array', 'push', new ArrayPush()); builtins.addInterface('ArrayConstructor', new ArrayConstructorInterface()); }; //# sourceMappingURL=index.js.map