shift-interpreter
Version:
Shift-interpreter is an experimental JavaScript meta-interpreter useful for reverse engineering and analysis. One notable difference from other projects is that shift-interpreter retains state over an entire script but can be fed expressions and statement
53 lines • 1.69 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.compoundAssignmentOperatorMap = exports.unaryOperatorMap = exports.binaryOperatorMap = void 0;
exports.binaryOperatorMap = new Map([
['+', (l, r) => l + r()],
['-', (l, r) => l - r()],
['/', (l, r) => l / r()],
['*', (l, r) => l * r()],
['**', (l, r) => l ** r()],
['==', (l, r) => l == r()],
['!=', (l, r) => l != r()],
['===', (l, r) => l === r()],
['!==', (l, r) => l !== r()],
['<', (l, r) => l < r()],
['<=', (l, r) => l <= r()],
['>', (l, r) => l > r()],
['>=', (l, r) => l >= r()],
['in', (l, r) => l in r()],
['instanceof', (l, r) => l instanceof r()],
['<<', (l, r) => l << r()],
['>>', (l, r) => l >> r()],
['>>>', (l, r) => l >>> r()],
['%', (l, r) => l % r()],
[',', (l, r) => r()],
['||', (l, r) => l || r()],
['&&', (l, r) => l && r()],
['|', (l, r) => l | r()],
['&', (l, r) => l & r()],
['^', (l, r) => l ^ r()],
]);
exports.unaryOperatorMap = new Map([
['+', (oper) => +oper],
['-', (oper) => -oper],
['!', (oper) => !oper],
['~', (oper) => ~oper],
['typeof', (oper) => typeof oper],
['void', (oper) => void oper],
]);
exports.compoundAssignmentOperatorMap = new Map([
['+=', (l, r) => l + r],
['-=', (l, r) => l - r],
['/=', (l, r) => l / r],
['*=', (l, r) => l * r],
['**=', (l, r) => l ** r],
['<<=', (l, r) => l << r],
['>>=', (l, r) => l >> r],
['>>>=', (l, r) => l >>> r],
['%=', (l, r) => l % r],
['|=', (l, r) => l | r],
['&=', (l, r) => l & r],
['^=', (l, r) => l ^ r],
]);
//# sourceMappingURL=operators.js.map