UNPKG

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 (50 loc) 1.88 kB
export const binaryOperatorMap = new Map<string, any>([ ['+', (l: any, r: any) => l + r()], ['-', (l: any, r: any) => l - r()], ['/', (l: any, r: any) => l / r()], ['*', (l: any, r: any) => l * r()], ['**', (l: any, r: any) => l ** r()], ['==', (l: any, r: any) => l == r()], ['!=', (l: any, r: any) => l != r()], ['===', (l: any, r: any) => l === r()], ['!==', (l: any, r: any) => l !== r()], ['<', (l: any, r: any) => l < r()], ['<=', (l: any, r: any) => l <= r()], ['>', (l: any, r: any) => l > r()], ['>=', (l: any, r: any) => l >= r()], ['in', (l: any, r: any) => l in r()], ['instanceof', (l: any, r: any) => l instanceof r()], ['<<', (l: any, r: any) => l << r()], ['>>', (l: any, r: any) => l >> r()], ['>>>', (l: any, r: any) => l >>> r()], ['%', (l: any, r: any) => l % r()], [',', (l: any, r: any) => r()], ['||', (l: any, r: any) => l || r()], ['&&', (l: any, r: any) => l && r()], ['|', (l: any, r: any) => l | r()], ['&', (l: any, r: any) => l & r()], ['^', (l: any, r: any) => l ^ r()], ]); export const unaryOperatorMap = new Map<string, any>([ ['+', (oper: any) => +oper], ['-', (oper: any) => -oper], ['!', (oper: any) => !oper], ['~', (oper: any) => ~oper], ['typeof', (oper: any) => typeof oper], ['void', (oper: any) => void oper], // ["delete", (l: any) => l * r], ]); export const compoundAssignmentOperatorMap = new Map<string, any>([ ['+=', (l: any, r: any) => l + r], ['-=', (l: any, r: any) => l - r], ['/=', (l: any, r: any) => l / r], ['*=', (l: any, r: any) => l * r], ['**=', (l: any, r: any) => l ** r], ['<<=', (l: any, r: any) => l << r], ['>>=', (l: any, r: any) => l >> r], ['>>>=', (l: any, r: any) => l >>> r], ['%=', (l: any, r: any) => l % r], ['|=', (l: any, r: any) => l | r], ['&=', (l: any, r: any) => l & r], ['^=', (l: any, r: any) => l ^ r], ]);