@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
73 lines (71 loc) • 2.76 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.add = void 0;
const BuiltinInstanceOf_1 = require("../BuiltinInstanceOf");
const BuiltinInterface_1 = require("../BuiltinInterface");
const concat_1 = require("./concat");
const entries_1 = require("./entries");
const every_1 = require("./every");
const filter_1 = require("./filter");
const forEach_1 = require("./forEach");
const iterator_1 = require("./iterator");
const join_1 = require("./join");
const length_1 = require("./length");
const map_1 = require("./map");
const pop_1 = require("./pop");
const push_1 = require("./push");
const reduce_1 = require("./reduce");
const slice_1 = require("./slice");
const some_1 = require("./some");
const toString_1 = require("./toString");
class ArrayInterface extends BuiltinInterface_1.BuiltinInterface {
}
class ReadonlyArrayInterface extends BuiltinInterface_1.BuiltinInterface {
}
class ArrayValue extends BuiltinInstanceOf_1.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_1.BuiltinInterface {
}
const COMMON = [
['filter', new filter_1.ArrayFilter()],
['forEach', new forEach_1.ArrayForEach()],
['__@iterator', new iterator_1.ArrayIterator()],
['length', new length_1.ArrayLength()],
['map', new map_1.ArrayMap()],
['reduce', new reduce_1.ArrayReduce()],
['toString', new toString_1.ArrayToString()],
['concat', new concat_1.ArrayConcat()],
['join', new join_1.ArrayJoin()],
['slice', new slice_1.ArraySlice()],
['some', new some_1.ArraySome()],
['every', new every_1.ArrayEvery()],
['entries', new entries_1.ArrayEntries()],
];
exports.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 pop_1.ArrayPop());
builtins.addGlobalMember('Array', 'push', new push_1.ArrayPush());
builtins.addInterface('ArrayConstructor', new ArrayConstructorInterface());
};
//# sourceMappingURL=index.js.map