Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
[`-$2`, new Unary('-', new AccessScope('$2'))],
[`+$3`, new Unary('+', new AccessScope('$3'))],
[`void $4`, new Unary('void', new AccessScope('$4'))],
[`typeof $5`, new Unary('typeof', new AccessScope('$5'))]
];
// concatenation of Unary + LeftHandSide
// This forms the group Precedence.LeftHandSide and includes Precedence.Unary
const SimpleIsUnaryList: [string, IsUnary][] = [
...SimpleIsLeftHandSideList,
...SimpleUnaryList
];
// This forms the group Precedence.Multiplicative
const SimpleMultiplicativeList: [string, Binary][] = [
[`$6*$7`, new Binary('*', new AccessScope('$6'), new AccessScope('$7'))],
[`$8%$9`, new Binary('%', new AccessScope('$8'), new AccessScope('$9'))],
[`$10/$11`, new Binary('/', new AccessScope('$10'), new AccessScope('$11'))]
];
const SimpleIsMultiplicativeList: [string, IsBinary][] = [
...SimpleIsUnaryList,
...SimpleMultiplicativeList
];
// This forms the group Precedence.Additive
const SimpleAdditiveList: [string, Binary][] = [
[`$12+$13`, new Binary('+', new AccessScope('$12'), new AccessScope('$13'))],
[`$14-$15`, new Binary('-', new AccessScope('$14'), new AccessScope('$15'))]
];
const SimpleIsAdditiveList: [string, IsBinary][] = [
...SimpleIsMultiplicativeList,
...SimpleAdditiveList
];
const SimpleAdditiveList: [string, Binary][] = [
[`$12+$13`, new Binary('+', new AccessScope('$12'), new AccessScope('$13'))],
[`$14-$15`, new Binary('-', new AccessScope('$14'), new AccessScope('$15'))]
];
const SimpleIsAdditiveList: [string, IsBinary][] = [
...SimpleIsMultiplicativeList,
...SimpleAdditiveList
];
// This forms the group Precedence.Relational
const SimpleRelationalList: [string, Binary][] = [
[`$16<$17`, new Binary('<', new AccessScope('$16'), new AccessScope('$17'))],
[`$18>$19`, new Binary('>', new AccessScope('$18'), new AccessScope('$19'))],
[`$20<=$21`, new Binary('<=', new AccessScope('$20'), new AccessScope('$21'))],
[`$22>=$23`, new Binary('>=', new AccessScope('$22'), new AccessScope('$23'))],
[`$24 in $25`, new Binary('in', new AccessScope('$24'), new AccessScope('$25'))],
[`$26 instanceof $27`, new Binary('instanceof', new AccessScope('$26'), new AccessScope('$27'))]
];
const SimpleIsRelationalList: [string, IsBinary][] = [
...SimpleIsAdditiveList,
...SimpleRelationalList
];
// This forms the group Precedence.Equality
const SimpleEqualityList: [string, Binary][] = [
[`$28==$29`, new Binary('==', new AccessScope('$28'), new AccessScope('$29'))],
[`$30!=$31`, new Binary('!=', new AccessScope('$30'), new AccessScope('$31'))],
[`$32===$33`, new Binary('===', new AccessScope('$32'), new AccessScope('$33'))],
[`$34!==$35`, new Binary('!==', new AccessScope('$34'), new AccessScope('$35'))]
];
const SimpleIsEqualityList: [string, IsBinary][] = [
...SimpleIsRelationalList,
[`!$1`, new Unary('!', new AccessScope('$1'))],
[`-$2`, new Unary('-', new AccessScope('$2'))],
[`+$3`, new Unary('+', new AccessScope('$3'))],
[`void $4`, new Unary('void', new AccessScope('$4'))],
[`typeof $5`, new Unary('typeof', new AccessScope('$5'))]
];
// concatenation of Unary + LeftHandSide
// This forms the group Precedence.LeftHandSide and includes Precedence.Unary
const SimpleIsUnaryList: [string, IsUnary][] = [
...SimpleIsLeftHandSideList,
...SimpleUnaryList
];
// This forms the group Precedence.Multiplicative
const SimpleMultiplicativeList: [string, Binary][] = [
[`$6*$7`, new Binary('*', new AccessScope('$6'), new AccessScope('$7'))],
[`$8%$9`, new Binary('%', new AccessScope('$8'), new AccessScope('$9'))],
[`$10/$11`, new Binary('/', new AccessScope('$10'), new AccessScope('$11'))]
];
const SimpleIsMultiplicativeList: [string, IsBinary][] = [
...SimpleIsUnaryList,
...SimpleMultiplicativeList
];
// This forms the group Precedence.Additive
const SimpleAdditiveList: [string, Binary][] = [
[`$12+$13`, new Binary('+', new AccessScope('$12'), new AccessScope('$13'))],
[`$14-$15`, new Binary('-', new AccessScope('$14'), new AccessScope('$15'))]
];
const SimpleIsAdditiveList: [string, IsBinary][] = [
...SimpleIsMultiplicativeList,
...SimpleAdditiveList
[`$32===$33`, new Binary('===', new AccessScope('$32'), new AccessScope('$33'))],
[`$34!==$35`, new Binary('!==', new AccessScope('$34'), new AccessScope('$35'))]
];
const SimpleIsEqualityList: [string, IsBinary][] = [
...SimpleIsRelationalList,
...SimpleEqualityList
];
// This forms the group Precedence.LogicalAND
const SimpleLogicalANDList: [string, Binary][] = [
[`$36&&$37`, new Binary('&&', new AccessScope('$36'), new AccessScope('$37'))]
];
// This forms the group Precedence.LogicalOR
const SimpleLogicalORList: [string, Binary][] = [
[`$38||$39`, new Binary('||', new AccessScope('$38'), new AccessScope('$39'))]
];
// This forms the group Precedence.Conditional
const SimpleConditionalList: [string, Conditional][] = [
[`a?b:c`, new Conditional(new AccessScope('a'), new AccessScope('b'), new AccessScope('c'))]
];
// This forms the group Precedence.Assign
const SimpleAssignList: [string, Assign][] = [
[`a=b`, new Assign(new AccessScope('a'), new AccessScope('b'))]
];
// This forms the group Precedence.Variadic
const SimpleValueConverterList: [string, ValueConverter][] = [
[`a|b`, new ValueConverter(new AccessScope('a'), 'b', [])],
[`a|b:c`, new ValueConverter(new AccessScope('a'), 'b', [new AccessScope('c')])],
expr: new Binary(
'instanceof',
new AccessScope('bar', 0),
new AccessMember(new AccessScope('foo', 0), 'constructor')
),
expected: true
},
{
expr: new Binary(
'instanceof',
new PrimitiveLiteral('foo'),
new AccessMember(new AccessScope('foo', 0), 'constructor')
),
expected: false
},
{ expr: new Binary('instanceof', new AccessScope('foo', 0), new AccessScope('foo', 0)), expected: false },
{ expr: new Binary('instanceof', new AccessScope('foo', 0), $null), expected: false },
{ expr: new Binary('instanceof', new AccessScope('foo', 0), $undefined), expected: false },
{ expr: new Binary('instanceof', $null, new AccessScope('foo', 0)), expected: false },
{ expr: new Binary('instanceof', $undefined, new AccessScope('foo', 0)), expected: false }
];
const scope: IScope = createScopeForTest({ foo: new Foo(), bar: new Bar() });
for (const { expr, expected } of tests) {
it(expr.toString(), function () {
expect(expr.evaluate(LF.none, scope, null)).to.equal(expected);
});
}
});
});
new AccessMember(new AccessScope('foo', 0), 'constructor')
),
expected: true
},
{
expr: new Binary(
'instanceof',
new PrimitiveLiteral('foo'),
new AccessMember(new AccessScope('foo', 0), 'constructor')
),
expected: false
},
{ expr: new Binary('instanceof', new AccessScope('foo', 0), new AccessScope('foo', 0)), expected: false },
{ expr: new Binary('instanceof', new AccessScope('foo', 0), $null), expected: false },
{ expr: new Binary('instanceof', new AccessScope('foo', 0), $undefined), expected: false },
{ expr: new Binary('instanceof', $null, new AccessScope('foo', 0)), expected: false },
{ expr: new Binary('instanceof', $undefined, new AccessScope('foo', 0)), expected: false }
];
const scope: IScope = createScopeForTest({ foo: new Foo(), bar: new Bar() });
for (const { expr, expected } of tests) {
it(expr.toString(), function () {
expect(expr.evaluate(LF.none, scope, null)).to.equal(expected);
});
}
});
});
'instanceof',
new AccessScope('bar', 0),
new AccessMember(new AccessScope('bar', 0), 'constructor')
),
expected: true
},
{
expr: new Binary(
'instanceof',
new AccessScope('bar', 0),
new AccessMember(new AccessScope('foo', 0), 'constructor')
),
expected: true
},
{
expr: new Binary(
'instanceof',
new PrimitiveLiteral('foo'),
new AccessMember(new AccessScope('foo', 0), 'constructor')
),
expected: false
},
{ expr: new Binary('instanceof', new AccessScope('foo', 0), new AccessScope('foo', 0)), expected: false },
{ expr: new Binary('instanceof', new AccessScope('foo', 0), $null), expected: false },
{ expr: new Binary('instanceof', new AccessScope('foo', 0), $undefined), expected: false },
{ expr: new Binary('instanceof', $null, new AccessScope('foo', 0)), expected: false },
{ expr: new Binary('instanceof', $undefined, new AccessScope('foo', 0)), expected: false }
];
const scope: IScope = createScopeForTest({ foo: new Foo(), bar: new Bar() });
for (const { expr, expected } of tests) {
it(expr.toString(), function () {
describe('performs \'in\'', function () {
const tests: { expr: Binary; expected: boolean }[] = [
{ expr: new Binary('in', new PrimitiveLiteral('foo'), new ObjectLiteral(['foo'], [$null])), expected: true },
{ expr: new Binary('in', new PrimitiveLiteral('foo'), new ObjectLiteral(['bar'], [$null])), expected: false },
{ expr: new Binary('in', new PrimitiveLiteral(1), new ObjectLiteral(['1'], [$null])), expected: true },
{ expr: new Binary('in', new PrimitiveLiteral('1'), new ObjectLiteral(['1'], [$null])), expected: true },
{ expr: new Binary('in', new PrimitiveLiteral('foo'), $null), expected: false },
{ expr: new Binary('in', new PrimitiveLiteral('foo'), $undefined), expected: false },
{ expr: new Binary('in', new PrimitiveLiteral('foo'), $true), expected: false },
{ expr: new Binary('in', new PrimitiveLiteral('foo'), $this), expected: true },
{ expr: new Binary('in', new PrimitiveLiteral('bar'), $this), expected: true },
{ expr: new Binary('in', new PrimitiveLiteral('foo'), $parent), expected: false },
{ expr: new Binary('in', new PrimitiveLiteral('bar'), $parent), expected: false },
{ expr: new Binary('in', new PrimitiveLiteral('foo'), new AccessScope('foo', 0)), expected: false },
{ expr: new Binary('in', new PrimitiveLiteral('bar'), new AccessScope('bar', 0)), expected: false },
{ expr: new Binary('in', new PrimitiveLiteral('bar'), new AccessScope('foo', 0)), expected: true }
];
const scope = createScopeForTest({ foo: { bar: null }, bar: null });
for (const { expr, expected } of tests) {
it(expr.toString(), function () {
expect(expr.evaluate(LF.none, scope, null)).to.equal(expected);
});
}
});
describe('performs \'in\'', function () {
const tests: { expr: Binary; expected: boolean }[] = [
{ expr: new Binary('in', new PrimitiveLiteral('foo'), new ObjectLiteral(['foo'], [$null])), expected: true },
{ expr: new Binary('in', new PrimitiveLiteral('foo'), new ObjectLiteral(['bar'], [$null])), expected: false },
{ expr: new Binary('in', new PrimitiveLiteral(1), new ObjectLiteral(['1'], [$null])), expected: true },
{ expr: new Binary('in', new PrimitiveLiteral('1'), new ObjectLiteral(['1'], [$null])), expected: true },
{ expr: new Binary('in', new PrimitiveLiteral('foo'), $null), expected: false },
{ expr: new Binary('in', new PrimitiveLiteral('foo'), $undefined), expected: false },
{ expr: new Binary('in', new PrimitiveLiteral('foo'), $true), expected: false },
{ expr: new Binary('in', new PrimitiveLiteral('foo'), $this), expected: true },
{ expr: new Binary('in', new PrimitiveLiteral('bar'), $this), expected: true },
{ expr: new Binary('in', new PrimitiveLiteral('foo'), $parent), expected: false },
{ expr: new Binary('in', new PrimitiveLiteral('bar'), $parent), expected: false },
{ expr: new Binary('in', new PrimitiveLiteral('foo'), new AccessScope('foo', 0)), expected: false },
{ expr: new Binary('in', new PrimitiveLiteral('bar'), new AccessScope('bar', 0)), expected: false },
{ expr: new Binary('in', new PrimitiveLiteral('bar'), new AccessScope('foo', 0)), expected: true }
];
const scope = createScopeForTest({ foo: { bar: null }, bar: null });
for (const { expr, expected } of tests) {
it(expr.toString(), function () {
expect(expr.evaluate(LF.none, scope, null)).to.equal(expected);
});
}
});
'instanceof',
new AccessScope('foo', 0),
new AccessMember(new AccessScope('foo', 0), 'constructor')
),
expected: true
},
{
expr: new Binary(
'instanceof',
new AccessScope('foo', 0),
new AccessMember(new AccessScope('bar', 0), 'constructor')
),
expected: false
},
{
expr: new Binary(
'instanceof',
new AccessScope('bar', 0),
new AccessMember(new AccessScope('bar', 0), 'constructor')
),
expected: true
},
{
expr: new Binary(
'instanceof',
new AccessScope('bar', 0),
new AccessMember(new AccessScope('foo', 0), 'constructor')
),
expected: true
},
{
expr: new Binary(