@@ -47,6 +47,10 @@ const {
47
47
makeRequireFunction,
48
48
addBuiltinLibsToObject
49
49
} = require ( 'internal/modules/cjs/helpers' ) ;
50
+ const {
51
+ isIdentifierStart,
52
+ isIdentifierChar
53
+ } = require ( 'internal/deps/acorn/dist/acorn' ) ;
50
54
const internalUtil = require ( 'internal/util' ) ;
51
55
const { isTypedArray } = require ( 'internal/util/types' ) ;
52
56
const util = require ( 'util' ) ;
@@ -900,9 +904,25 @@ const requireRE = /\brequire\s*\(['"](([\w@./-]+\/)?(?:[\w@./-]*))/;
900
904
const simpleExpressionRE =
901
905
/ (?: [ a - z A - Z _ $ ] (?: \w | \$ ) * \. ) * [ a - z A - Z _ $ ] (?: \w | \$ ) * \. ? $ / ;
902
906
903
- function intFilter ( item ) {
904
- // filters out anything not starting with A-Z, a-z, $ or _
905
- return / ^ [ A - Z a - z _ $ ] / . test ( item ) ;
907
+ function isIdentifier ( str ) {
908
+ if ( str === '' ) {
909
+ return false ;
910
+ }
911
+ const first = str . codePointAt ( 0 ) ;
912
+ if ( ! isIdentifierStart ( first ) ) {
913
+ return false ;
914
+ }
915
+ const firstLen = first > 0xffff ? 2 : 1 ;
916
+ for ( var i = firstLen ; i < str . length ; i += 1 ) {
917
+ const cp = str . codePointAt ( i ) ;
918
+ if ( ! isIdentifierChar ( cp ) ) {
919
+ return false ;
920
+ }
921
+ if ( cp > 0xffff ) {
922
+ i += 1 ;
923
+ }
924
+ }
925
+ return true ;
906
926
}
907
927
908
928
const ARRAY_LENGTH_THRESHOLD = 1e6 ;
@@ -932,7 +952,7 @@ function filteredOwnPropertyNames(obj) {
932
952
933
953
return fakeProperties ;
934
954
}
935
- return Object . getOwnPropertyNames ( obj ) . filter ( intFilter ) ;
955
+ return Object . getOwnPropertyNames ( obj ) . filter ( isIdentifier ) ;
936
956
}
937
957
938
958
function getGlobalLexicalScopeNames ( contextId ) {
0 commit comments