@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
35 lines (33 loc) • 5.16 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const ts_utils_1 = require("@neo-one/ts-utils");
const Helper_1 = require("../Helper");
class IsIterableHelper extends Helper_1.Helper {
emit(sb, node, options) {
if (!options.pushValue) {
sb.emitOp(node, 'DROP');
return;
}
const pushTrue = () => {
sb.emitPushBoolean(node, true);
};
const pushFalse = () => {
sb.emitPushBoolean(node, false);
};
sb.emitHelper(node, options, sb.helpers.forIterableType({
array: pushTrue,
map: pushTrue,
set: pushTrue,
arrayStorage: pushTrue,
mapStorage: pushTrue,
setStorage: pushTrue,
iterableIterator: pushTrue,
defaultCase: pushFalse,
}));
}
}
exports.IsIterableHelper = IsIterableHelper;
exports.hasIterable = (context, node, type) => ts_utils_1.tsUtils.type_.hasType(type, (tpe) => exports.isIterable(context, node, tpe));
exports.isOnlyIterable = (context, node, type) => ts_utils_1.tsUtils.type_.isOnlyType(type, (tpe) => exports.isIterable(context, node, tpe));
exports.isIterable = (context, node, type) => context.builtins.isInterface(node, type, 'Iterable');
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIml0ZXJhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsZ0RBQTRDO0FBSzVDLHNDQUFtQztBQUluQyxNQUFhLGdCQUFpQixTQUFRLGVBQU07SUFDbkMsSUFBSSxDQUFDLEVBQWlCLEVBQUUsSUFBYSxFQUFFLE9BQXFCO1FBQ2pFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFO1lBQ3RCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRXhCLE9BQU87U0FDUjtRQUVELE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRTtZQUNwQixFQUFFLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUM7UUFFRixNQUFNLFNBQVMsR0FBRyxHQUFHLEVBQUU7WUFDckIsRUFBRSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDO1FBRUYsRUFBRSxDQUFDLFVBQVUsQ0FDWCxJQUFJLEVBQ0osT0FBTyxFQUNQLEVBQUUsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDO1lBQ3pCLEtBQUssRUFBRSxRQUFRO1lBQ2YsR0FBRyxFQUFFLFFBQVE7WUFDYixHQUFHLEVBQUUsUUFBUTtZQUNiLFlBQVksRUFBRSxRQUFRO1lBQ3RCLFVBQVUsRUFBRSxRQUFRO1lBQ3BCLFVBQVUsRUFBRSxRQUFRO1lBQ3BCLGdCQUFnQixFQUFFLFFBQVE7WUFDMUIsV0FBVyxFQUFFLFNBQVM7U0FDdkIsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0NBQ0Y7QUEvQkQsNENBK0JDO0FBRVksUUFBQSxXQUFXLEdBQUcsQ0FBQyxPQUFnQixFQUFFLElBQWEsRUFBRSxJQUFhLEVBQVcsRUFBRSxDQUNyRixrQkFBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxrQkFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUUxRCxRQUFBLGNBQWMsR0FBRyxDQUFDLE9BQWdCLEVBQUUsSUFBYSxFQUFFLElBQWEsRUFBVyxFQUFFLENBQ3hGLGtCQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLGtCQUFVLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBRTdELFFBQUEsVUFBVSxHQUFHLENBQUMsT0FBZ0IsRUFBRSxJQUFhLEVBQUUsSUFBYSxFQUFXLEVBQUUsQ0FDcEYsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQyIsImZpbGUiOiJuZW8tb25lLXNtYXJ0LWNvbnRyYWN0LWNvbXBpbGVyL3NyYy9jb21waWxlL2hlbHBlci90eXBlcy9pdGVyYWJsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRzVXRpbHMgfSBmcm9tICdAbmVvLW9uZS90cy11dGlscyc7XG5pbXBvcnQgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vQ29udGV4dCc7XG5pbXBvcnQgeyBTY3JpcHRCdWlsZGVyIH0gZnJvbSAnLi4vLi4vc2InO1xuaW1wb3J0IHsgVmlzaXRPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgSGVscGVyIH0gZnJvbSAnLi4vSGVscGVyJztcblxuLy8gSW5wdXQ6IFt2YWxdXG4vLyBPdXRwdXQ6IFtib29sZWFuXVxuZXhwb3J0IGNsYXNzIElzSXRlcmFibGVIZWxwZXIgZXh0ZW5kcyBIZWxwZXIge1xuICBwdWJsaWMgZW1pdChzYjogU2NyaXB0QnVpbGRlciwgbm9kZTogdHMuTm9kZSwgb3B0aW9uczogVmlzaXRPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKCFvcHRpb25zLnB1c2hWYWx1ZSkge1xuICAgICAgc2IuZW1pdE9wKG5vZGUsICdEUk9QJyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwdXNoVHJ1ZSA9ICgpID0+IHtcbiAgICAgIHNiLmVtaXRQdXNoQm9vbGVhbihub2RlLCB0cnVlKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcHVzaEZhbHNlID0gKCkgPT4ge1xuICAgICAgc2IuZW1pdFB1c2hCb29sZWFuKG5vZGUsIGZhbHNlKTtcbiAgICB9O1xuXG4gICAgc2IuZW1pdEhlbHBlcihcbiAgICAgIG5vZGUsXG4gICAgICBvcHRpb25zLFxuICAgICAgc2IuaGVscGVycy5mb3JJdGVyYWJsZVR5cGUoe1xuICAgICAgICBhcnJheTogcHVzaFRydWUsXG4gICAgICAgIG1hcDogcHVzaFRydWUsXG4gICAgICAgIHNldDogcHVzaFRydWUsXG4gICAgICAgIGFycmF5U3RvcmFnZTogcHVzaFRydWUsXG4gICAgICAgIG1hcFN0b3JhZ2U6IHB1c2hUcnVlLFxuICAgICAgICBzZXRTdG9yYWdlOiBwdXNoVHJ1ZSxcbiAgICAgICAgaXRlcmFibGVJdGVyYXRvcjogcHVzaFRydWUsXG4gICAgICAgIGRlZmF1bHRDYXNlOiBwdXNoRmFsc2UsXG4gICAgICB9KSxcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBoYXNJdGVyYWJsZSA9IChjb250ZXh0OiBDb250ZXh0LCBub2RlOiB0cy5Ob2RlLCB0eXBlOiB0cy5UeXBlKTogYm9vbGVhbiA9PlxuICB0c1V0aWxzLnR5cGVfLmhhc1R5cGUodHlwZSwgKHRwZSkgPT4gaXNJdGVyYWJsZShjb250ZXh0LCBub2RlLCB0cGUpKTtcblxuZXhwb3J0IGNvbnN0IGlzT25seUl0ZXJhYmxlID0gKGNvbnRleHQ6IENvbnRleHQsIG5vZGU6IHRzLk5vZGUsIHR5cGU6IHRzLlR5cGUpOiBib29sZWFuID0+XG4gIHRzVXRpbHMudHlwZV8uaXNPbmx5VHlwZSh0eXBlLCAodHBlKSA9PiBpc0l0ZXJhYmxlKGNvbnRleHQsIG5vZGUsIHRwZSkpO1xuXG5leHBvcnQgY29uc3QgaXNJdGVyYWJsZSA9IChjb250ZXh0OiBDb250ZXh0LCBub2RlOiB0cy5Ob2RlLCB0eXBlOiB0cy5UeXBlKTogYm9vbGVhbiA9PlxuICBjb250ZXh0LmJ1aWx0aW5zLmlzSW50ZXJmYWNlKG5vZGUsIHR5cGUsICdJdGVyYWJsZScpO1xuIl19