@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
70 lines (68 loc) • 2.49 kB
JavaScript
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