diff --git a/src/ast/values.ts b/src/ast/values.ts index bb0297421aa..4d91b067f99 100644 --- a/src/ast/values.ts +++ b/src/ast/values.ts @@ -200,6 +200,14 @@ const literalNumberMembers: MemberDescriptions = assembleMemberDescriptions( objectMembers ); +const literalRegExpMembers: MemberDescriptions = assembleMemberDescriptions( + { + exec: returnsUnknown, + test: returnsBoolean + }, + objectMembers +); + export const literalStringMembers: MemberDescriptions = assembleMemberDescriptions( { anchor: returnsString, @@ -258,6 +266,9 @@ export const literalStringMembers: MemberDescriptions = assembleMemberDescriptio export function getLiteralMembersForValue( value: T ): MemberDescriptions { + if (value instanceof RegExp) { + return literalRegExpMembers; + } switch (typeof value) { case 'boolean': { return literalBooleanMembers; diff --git a/test/form/samples/builtin-prototypes/literal/main.js b/test/form/samples/builtin-prototypes/literal/main.js index d3add5bb105..e079316f4d7 100644 --- a/test/form/samples/builtin-prototypes/literal/main.js +++ b/test/form/samples/builtin-prototypes/literal/main.js @@ -48,6 +48,10 @@ const _numberHasOwnProperty = (1).hasOwnProperty('toString').valueOf(); const _numberIsPrototypeOf = (1).isPrototypeOf(1).valueOf(); const _numberPropertyIsEnumerable = (1).propertyIsEnumerable('toString').valueOf(); +// RegExp prototype +/1/.test(2); +/1/.exec(1); + // string prototype 'ab'.valueOf(); 'ab'.valueOf().valueOf();