DOCUMENTATION XS XS Conformance
Overview
Getting Started
BASE
Reference
Worker
Setup modules
COMMODETTO
Reference
Poco Renderer
Outlines
Creating Fonts
Crypt
Data
DEVICES
Moddable One
Moddable Two
Moddable Three
Moddable Four
ESP32
ESP8266
nRF52
nRF52 Low Power Notes
Raspberry Pi Pico
M5Core Ink
M5Paper
Wasm
SiLabs Gecko
QCA4020
Moddable Zero
DISPLAYS
Overview
Adafruit 1.8" ST7735
Adafruit OLED Display
BuyDisplay 2.8" CTP - ESP8266
Crystalfontz ePaper
DotStar
Generic 1.44"
Generic 2.4" & 2.8" (Resistive Touch) - ESP32
Generic 2.4" & 2.8" (Resistive Touch) - ESP8266
Generic 2.4" & 2.8" (Resistive Touch) - Pico
Sharp Memory
Sharp Memory Screen 1.3"
SparkFun TeensyView
Switch Science Reflective LCD
DRIVERS
DESTM32S display
DotStar display
ILI9341 display
LPM013M126A display
LS013B4DN04 display
MCP230XX GPIO expander
NeoStrand
SSD1306 display
SSD1351 display
ST7735 display
Files
IO
TC53 IO
Firmata
NETWORK
Reference
TLS (SecureSocket)
BLE
Ethernet
Web Things
PINS
Reference
Audio Output
PIU
Reference
Localization
Keyboard
Expanding Keyboard
Die Cut
Using After Effects Motion Data
TOOLS
Reference
Manifest
Defines in Manifests
Testing
XS
Handle
JavaScript language considerations on embedded devices using the XS engine
Mods – User Installed Extensions
ROM Colors
Using XS Preload to Optimize Applications
XS Conformance
XS Marshalling
XS Platforms
XS in C
XS linker warnings
xsbug
xst
XS Compartment
XS Profiler

XS Conformance

Copyright 2016-2023 Moddable Tech, Inc.
Revised: August 31, 2023

Caveat

Realm

XS supports one realm by virtual machine. Tests that expect $262.createRealm to return a new realm fail.

Internationalization

XS does not implement ECMA-402, the Internationalization API Specification, so the intl402 tests are skipped.

Annex B

No XS hosts are web browsers, so the annexB tests are skipped. However XS implements Date.prototype.getYear, Date.prototype.setYear, Object.prototype.__defineGetter__, Object.prototype.__defineSetter__, Object.prototype.__lookupGetter__, Object.prototype.__lookupSetter__, Object.prototype.__proto__, String.prototype.substr, escape and unescape,

Runtime models

On microcontrollers, XS uses a runtime model based on a virtual machine prepared by the XS compiler and linker. The prepared virtual machine contains the ECMAScript built-ins, along with the classes, functions and objects of preloaded modules. The prepared virtual machine is in ROM, its contents is shared by the tiny virtual machines that XS quickly creates in RAM to run apps.

Such a runtime model introduces no conformance issues in itself since XS can alias shared classes, functions and objects if apps modify them. However, in order to save ROM and RAM, other restrictions have been introduced:

  • Host functions, i.e. functions implemented in C, are primitive values like booleans, numbers, strings, etc. They are promoted to Function objects when necessary.
  • Scripts evaluation is optional. So some platforms do not support eval, new Function, etc. But all platforms support JSON.parse.
  • Optionally the XS linker can dead strip ECMAScript built-ins that Moddable apps do not use, and remove length and name properties from functions.

Here the conformance is tested on macOS with a traditional runtime model and without any restrictions. For each case, XS creates a virtual machine, then parses and runs the script. The XS harness, xst, uses LibYAML to load the frontmatter, which contains, among other information, the harness scripts to parse and run before the case script itself.

To build xst:

Linux

cd $MODDABLE/xs/makefiles/lin
make

macOS

cd $MODDABLE/xs/makefiles/mac
make

Windows

cd %MODDABLE%\xs\makefiles\win
build

To pass some tests, clone test262 and change the directory to the test directory inside the test262 directory. Then you can run xst with files or directories. For instance:

cd ~/test262/test
$MODDABLE/build/bin/mac/release/xst language/block-scope
$MODDABLE/build/bin/mac/release/xst built-ins/TypedArray*

Results

After the 6th edition, TC39 adopted a process based on proposals. Each proposal has a maturity stage. At stage 4, proposals are finished and will be published in the following edition of the specifications.

The official conformance test suite, test262, contains cases for the published specifications, together with cases for proposals at stages 3 and 4, which is great to prepare XS for future editions. The XS harness, xst uses adhoc comparisons of the frontmatter [features] to skip cases related to not yet implemented proposals. See the skipped cases at the end of this document.

Currently, on macOS, XS passes 99.62% of the language tests and 83.84% of the built-ins tests. Mostly because of Temporal, XS skips 16.06% of the built-ins tests.

Details are here under. The numbers of skipped cases are between parentheses. The following section lists the failed tests with some explanations.

Language

 42613/42774 (128) language
     460/460 arguments-object
         43/43 mapped
         8/8 unmapped
     204/204 asi
     287/287 block-scope
         30/30 leave
         4/4 return-from
         30/30 shadowing
         223/223 syntax
             16/16 for-in
             12/12 function-declarations
             189/189 redeclaration
             6/6 redeclaration-global
     81/81 comments
         35/35 hashbang
     96/96 computed-property-names
         6/6 basics
         58/58 class
             8/8 accessor
             22/22 method
             28/28 static
         24/24 object
             12/12 accessor
             10/10 method
             2/2 property
         8/8 to-name-side-effects
     34/34 destructuring
         34/34 binding
             28/28 syntax
     62/62 directive-prologue
     452/454 eval-code
         336/336 direct
         116/118 indirect
     3/3 export
     20244/20342 (73) expressions
         95/95 addition
         104/104 array
         643/643 arrow-function
             10/10 arrow
             454/454 dstr
             5/5 forbidden-ext
                 2/2 b1
                 3/3 b2
             77/77 syntax
                 43/43 early-errors
         833/839 assignment
             6/6 destructuring
             640/640 dstr
         615/615 assignmenttargettype
         108/108 async-arrow-function
             5/5 forbidden-ext
                 2/2 b1
                 3/3 b2
         158/161 async-function
             10/10 forbidden-ext
                 4/4 b1
                 6/6 b2
         1209/1212 async-generator
             744/744 dstr
             10/10 forbidden-ext
                 4/4 b1
                 6/6 b2
         42/42 await
         59/59 bitwise-and
         32/32 bitwise-not
         59/59 bitwise-or
         59/59 bitwise-xor
         170/171 call
         8010/8020 (10) class
             42/42 accessor-name-inst
             42/42 accessor-name-static
             191/191 async-gen-method
                 5/5 forbidden-ext
                     2/2 b1
                     3/3 b2
             191/191 async-gen-method-static
                 5/5 forbidden-ext
                     2/2 b1
                     3/3 b2
             59/59 async-method
                 5/5 forbidden-ext
                     2/2 b1
                     3/3 b2
             59/59 async-method-static
                 5/5 forbidden-ext
                     2/2 b1
                     3/3 b2
             0/8 (8) decorator
                 0/8 (8) syntax
                     0/1 (1) class-valid
                     0/7 (7) valid
             3840/3840 dstr
             2839/2841 (2) elements
                 156/156 async-gen-private-method
                 156/156 async-gen-private-method-static
                 24/24 async-private-method
                 24/24 async-private-method-static
                 12/12 evaluation-error
                 20/20 gen-private-method
                 20/20 gen-private-method-static
                 40/40 private-accessor-name
                 10/10 private-methods
                 498/499 (1) syntax
                     444/444 early-errors
                         192/192 delete
                         56/56 invalid-names
                     54/55 (1) valid
             55/55 gen-method
                 5/5 forbidden-ext
                     2/2 b1
                     3/3 b2
             55/55 gen-method-static
                 5/5 forbidden-ext
                     2/2 b1
                     3/3 b2
             35/35 method
                 5/5 forbidden-ext
                     2/2 b1
                     3/3 b2
             35/35 method-static
                 5/5 forbidden-ext
                     2/2 b1
                     3/3 b2
             72/72 subclass-builtins
         46/46 coalesce
         11/11 comma
         786/786 compound-assignment
         10/10 concatenation
         42/42 conditional
         99/99 delete
         89/89 division
         75/75 does-not-equals
         959/1022 (63) dynamic-import
             53/53 assignment-expression
             208/208 catch
             116/116 namespace
             320/362 (42) syntax
                 194/194 invalid
                 126/168 (42) valid
             216/216 usage
         93/93 equals
         88/88 exponentiation
         480/484 function
             372/372 dstr
             8/8 early-errors
             5/5 forbidden-ext
                 2/2 b1
                 3/3 b2
         542/546 generators
             372/372 dstr
             5/5 forbidden-ext
                 2/2 b1
                 3/3 b2
         97/97 greater-than
         85/85 greater-than-or-equal
         16/16 grouping
         27/27 import.meta
             23/23 syntax
         69/69 in
         85/85 instanceof
         89/89 left-shift
         89/89 less-than
         93/93 less-than-or-equal
         34/34 logical-and
         132/132 logical-assignment
         38/38 logical-not
         34/34 logical-or
         79/79 modulus
         79/79 multiplication
         118/118 new
         28/28 new.target
         2248/2250 object
             1122/1122 dstr
             557/557 method-definition
                 20/20 forbidden-ext
                     8/8 b1
                     12/12 b2
         76/76 optional-chaining
         63/63 postfix-decrement
         64/64 postfix-increment
         56/56 prefix-decrement
         55/55 prefix-increment
         42/42 property-accessors
         2/2 relational
         73/73 right-shift
         59/59 strict-does-not-equals
         59/59 strict-equals
         75/75 subtraction
         166/168 super
         48/48 tagged-template
         114/114 template-literal
         11/11 this
         32/32 typeof
         28/28 unary-minus
         34/34 unary-plus
         89/89 unsigned-right-shift
         18/18 void
         123/123 yield
     281/281 function-code
     85/85 future-reserved-words
     73/73 global-code
     21/22 identifier-resolution
     487/487 identifiers
     4/16 (12) import
     50/50 keywords
     82/82 line-terminators
     865/865 literals
         118/118 bigint
             92/92 numeric-separators
         4/4 boolean
         4/4 null
         301/301 numeric
             126/126 numeric-separators
         310/310 regexp
             112/112 named-groups
         128/128 string
     552/581 (29) module-code
         36/36 namespace
             34/34 internals
         245/245 top-level-await
             211/211 syntax
     22/22 punctuators
     53/53 reserved-words
     22/22 rest-parameters
     2/2 source-text
     160/160 statementList
     17586/17605 (14) statements
         133/133 async-function
             5/5 forbidden-ext
                 2/2 b1
                 3/3 b2
         590/590 async-generator
             372/372 dstr
             5/5 forbidden-ext
                 2/2 b1
                 3/3 b2
         40/40 block
             8/8 early-errors
         40/40 break
         8630/8646 (14) class
             42/42 accessor-name-inst
             42/42 accessor-name-static
             4/4 arguments
             191/191 async-gen-method
                 5/5 forbidden-ext
                     2/2 b1
                     3/3 b2
             191/191 async-gen-method-static
                 5/5 forbidden-ext
                     2/2 b1
                     3/3 b2
             59/59 async-method
                 5/5 forbidden-ext
                     2/2 b1
                     3/3 b2
             59/59 async-method-static
                 5/5 forbidden-ext
                     2/2 b1
                     3/3 b2
             0/12 (12) decorator
                 0/12 (12) syntax
                     0/1 (1) class-valid
                     0/11 (11) valid
             130/130 definition
             3840/3840 dstr
             3046/3048 (2) elements
                 156/156 async-gen-private-method
                 156/156 async-gen-private-method-static
                 24/24 async-private-method
                 24/24 async-private-method-static
                 12/12 evaluation-error
                 20/20 gen-private-method
                 20/20 gen-private-method-static
                 40/40 private-accessor-name
                 10/10 private-methods
                 498/499 (1) syntax
                     444/444 early-errors
                         192/192 delete
                         56/56 invalid-names
                     54/55 (1) valid
             55/55 gen-method
                 5/5 forbidden-ext
                     2/2 b1
                     3/3 b2
             55/55 gen-method-static
                 5/5 forbidden-ext
                     2/2 b1
                     3/3 b2
             35/35 method
                 5/5 forbidden-ext
                     2/2 b1
                     3/3 b2
             35/35 method-static
                 5/5 forbidden-ext
                     2/2 b1
                     3/3 b2
             12/12 name-binding
             4/4 strict-mode
             214/216 subclass
                 140/140 builtin-objects
                     10/10 Array
                     4/4 ArrayBuffer
                     4/4 Boolean
                     4/4 DataView
                     4/4 Date
                     6/6 Error
                     8/8 Function
                     10/10 GeneratorFunction
                     4/4 Map
                     36/36 NativeError
                     4/4 Number
                     8/8 Object
                     4/4 Promise
                     2/2 Proxy
                     6/6 RegExp
                     4/4 Set
                     6/6 String
                     4/4 Symbol
                     4/4 TypedArray
                     4/4 WeakMap
                     4/4 WeakSet
             72/72 subclass-builtins
             16/16 super
             26/26 syntax
                 4/4 early-errors
         271/271 const
             186/186 dstr
             50/50 syntax
         48/48 continue
         4/4 debugger
         70/70 do-while
         4/4 empty
         6/6 expression
         758/758 for
             570/570 dstr
         2425/2427 for-await-of
         196/196 for-in
             49/49 dstr
         1416/1416 for-of
             1095/1095 dstr
         783/783 function
             372/372 dstr
             8/8 early-errors
             5/5 forbidden-ext
                 2/2 b1
                 3/3 b2
         510/510 generators
             372/372 dstr
             5/5 forbidden-ext
                 2/2 b1
                 3/3 b2
         125/125 if
         37/37 labeled
         287/287 let
             186/186 dstr
             60/60 syntax
         31/31 return
         216/216 switch
             127/127 syntax
                 127/127 redeclaration
         28/28 throw
         387/388 try
             186/186 dstr
         309/309 variable
             194/194 dstr
         72/72 while
         170/170 with
     211/211 types
         10/10 boolean
         6/6 list
         8/8 null
         39/39 number
         36/36 object
         49/49 reference
         48/48 string
         15/15 undefined
     134/134 white-space

Built-ins

 33309/39729 (6382) built-ins
     5761/5860 (87) Array
         8/8 Symbol.species
         90/90 from
         0/49 (49) fromAsync
         58/58 isArray
         58/58 length
         32/32 of
         5415/5465 (38) prototype
             2/2 Symbol.iterator
             8/9 (1) Symbol.unscopables
             22/22 at
             135/137 concat
             76/76 copyWithin
             18/18 entries
             427/427 every
             40/40 fill
             472/474 filter
             38/38 find
             38/38 findIndex
             40/40 findLast
             40/40 findLastIndex
             38/38 flat
             45/45 flatMap
             370/370 forEach
             0/18 (18) group
             0/19 (19) groupToMap
             54/54 includes
             393/393 indexOf
             40/40 join
             18/18 keys
             389/389 lastIndexOf
             421/423 map
             46/46 pop
             48/48 push
             511/511 reduce
             509/511 reduceRight
             34/34 reverse
             40/40 shift
             134/136 slice
             428/428 some
             99/99 sort
             160/162 splice
             16/16 toLocaleString
             34/34 toReversed
                 6/6 metadata
             38/38 toSorted
                 6/6 metadata
             60/60 toSpliced
                 6/6 metadata
             22/22 toString
             42/42 unshift
             18/18 values
             38/38 with
                 6/6 metadata
     322/322 ArrayBuffer
         8/8 Symbol.species
         34/34 isView
         230/230 prototype
             20/20 byteLength
             22/22 detached
             22/22 maxByteLength
             20/20 resizable
             40/40 resize
             64/64 slice
             38/38 transfer
     46/46 ArrayIteratorPrototype
         6/6 Symbol.toStringTag
         40/40 next
     2/2 AsyncArrowFunction
     52/52 AsyncFromSyncIteratorPrototype
         14/14 next
         20/20 return
         18/18 throw
     36/36 AsyncFunction
     46/46 AsyncGeneratorFunction
         12/12 prototype
     96/96 AsyncGeneratorPrototype
         22/22 next
         38/38 return
         32/32 throw
     8/8 AsyncIteratorPrototype
         8/8 Symbol.asyncIterator
     536/638 (102) Atomics
         30/30 add
             6/6 bigint
         30/30 and
             6/6 bigint
         32/32 compareExchange
             6/6 bigint
         32/32 exchange
             6/6 bigint
         14/14 isLockFree
             2/2 bigint
         28/28 load
             6/6 bigint
         94/94 notify
             16/16 bigint
         30/30 or
             6/6 bigint
         32/32 store
             6/6 bigint
         30/30 sub
             6/6 bigint
         148/150 (2) wait
             48/49 (1) bigint
         0/100 (100) waitAsync
             0/44 (44) bigint
         30/30 xor
             6/6 bigint
     150/150 BigInt
         28/28 asIntN
         28/28 asUintN
         2/2 parseInt
         48/48 prototype
             2/2 toLocaleString
             22/22 toString
             16/16 valueOf
     101/101 Boolean
         51/51 prototype
             2/2 constructor
             20/20 toString
             20/20 valueOf
     1010/1010 DataView
         888/888 prototype
             22/22 buffer
             28/28 byteLength
             26/26 byteOffset
             42/42 getBigInt64
             42/42 getBigUint64
             42/42 getFloat32
             42/42 getFloat64
             36/36 getInt16
             56/56 getInt32
             34/34 getInt8
             36/36 getUint16
             36/36 getUint32
             34/34 getUint8
             46/46 setBigInt64
             4/4 setBigUint64
             46/46 setFloat32
             46/46 setFloat64
             46/46 setInt16
             46/46 setInt32
             42/42 setInt8
             46/46 setUint16
             46/46 setUint32
             42/42 setUint8
     1540/1540 Date
         44/44 UTC
         12/12 now
         26/26 parse
         1304/1304 prototype
             36/36 Symbol.toPrimitive
             14/14 constructor
             26/26 getDate
             26/26 getDay
             26/26 getFullYear
             26/26 getHours
             26/26 getMilliseconds
             26/26 getMinutes
             26/26 getMonth
             26/26 getSeconds
             26/26 getTime
             26/26 getTimezoneOffset
             26/26 getUTCDate
             26/26 getUTCDay
             26/26 getUTCFullYear
             26/26 getUTCHours
             26/26 getUTCMilliseconds
             26/26 getUTCMinutes
             26/26 getUTCMonth
             26/26 getUTCSeconds
             34/34 setDate
             46/46 setFullYear
             52/52 setHours
             34/34 setMilliseconds
             42/42 setMinutes
             40/40 setMonth
             40/40 setSeconds
             32/32 setTime
             20/20 setUTCDate
             18/18 setUTCFullYear
             20/20 setUTCHours
             20/20 setUTCMilliseconds
             20/20 setUTCMinutes
             20/20 setUTCMonth
             20/20 setUTCSeconds
             24/24 toDateString
             34/34 toISOString
             26/26 toJSON
             18/18 toLocaleDateString
             18/18 toLocaleString
             18/18 toLocaleTimeString
             26/26 toString
             22/22 toTimeString
             28/28 toUTCString
             22/22 valueOf
     82/82 Error
         54/54 prototype
             4/4 constructor
             2/2 message
             2/2 name
             28/28 toString
     94/110 (16) FinalizationRegistry
         62/77 (15) prototype
             0/14 (14) cleanupSome
             34/34 register
             20/21 (1) unregister
     887/889 Function
         16/16 internals
             4/4 Call
             12/12 Construct
         26/26 length
         596/598 prototype
             22/22 Symbol.hasInstance
             86/86 apply
             200/200 bind
             90/90 call
             2/2 constructor
             158/160 toString
     46/46 GeneratorFunction
         12/12 prototype
     120/120 GeneratorPrototype
         28/28 next
         44/44 return
         44/44 throw
     10/10 Infinity
     8/8 IteratorPrototype
         8/8 Symbol.iterator
     286/288 JSON
         144/144 parse
         130/132 stringify
     312/312 Map
         8/8 Symbol.species
         244/244 prototype
             2/2 Symbol.iterator
             22/22 clear
             22/22 delete
             20/20 entries
             36/36 forEach
             22/22 get
             22/22 has
             20/20 keys
             28/28 set
             22/22 size
             20/20 values
     22/22 MapIteratorPrototype
         20/20 next
     622/622 Math
         4/4 E
         4/4 LN10
         4/4 LN2
         4/4 LOG10E
         4/4 LOG2E
         4/4 PI
         4/4 SQRT1_2
         4/4 SQRT2
         16/16 abs
         16/16 acos
         14/14 acosh
         18/18 asin
         10/10 asinh
         14/14 atan
         22/22 atan2
         10/10 atanh
         10/10 cbrt
         22/22 ceil
         20/20 clz32
         18/18 cos
         10/10 cosh
         18/18 exp
         10/10 expm1
         22/22 floor
         18/18 fround
         24/24 hypot
         10/10 imul
         18/18 log
         10/10 log10
         10/10 log1p
         10/10 log2
         20/20 max
         20/20 min
         56/56 pow
         10/10 random
         22/22 round
         10/10 sign
         16/16 sin
         10/10 sinh
         18/18 sqrt
         18/18 tan
         10/10 tanh
         24/24 trunc
     10/10 NaN
     234/234 NativeErrors
         50/50 AggregateError
             12/12 prototype
         30/30 EvalError
             10/10 prototype
         30/30 RangeError
             10/10 prototype
         30/30 ReferenceError
             10/10 prototype
         30/30 SyntaxError
             10/10 prototype
         30/30 TypeError
             10/10 prototype
         30/30 URIError
             10/10 prototype
     670/670 Number
         6/6 MAX_VALUE
         6/6 MIN_VALUE
         8/8 NEGATIVE_INFINITY
         8/8 POSITIVE_INFINITY
         16/16 isFinite
         18/18 isInteger
         14/14 isNaN
         20/20 isSafeInteger
         2/2 parseFloat
         2/2 parseInt
         330/330 prototype
             30/30 toExponential
             26/26 toFixed
             8/8 toLocaleString
             34/34 toPrecision
             180/180 toString
             22/22 valueOf
     6742/6742 Object
         74/74 assign
         640/640 create
         1262/1262 defineProperties
         2244/2244 defineProperty
         42/42 entries
         102/102 freeze
         50/50 fromEntries
         620/620 getOwnPropertyDescriptor
         36/36 getOwnPropertyDescriptors
         90/90 getOwnPropertyNames
         24/24 getOwnPropertySymbols
         78/78 getPrototypeOf
         124/124 hasOwn
         12/12 internals
             12/12 DefineOwnProperty
         42/42 is
         76/76 isExtensible
         118/118 isFrozen
         66/66 isSealed
         118/118 keys
         78/78 preventExtensions
         474/474 prototype
             22/22 __defineGetter__
             22/22 __defineSetter__
             32/32 __lookupGetter__
             32/32 __lookupSetter__
             30/30 __proto__
             4/4 constructor
             126/126 hasOwnProperty
             20/20 isPrototypeOf
             32/32 propertyIsEnumerable
             22/22 toLocaleString
             66/66 toString
             40/40 valueOf
         186/186 seal
         24/24 setPrototypeOf
         40/40 values
     1220/1220 Promise
         10/10 Symbol.species
         192/192 all
         204/204 allSettled
         184/184 any
         242/242 prototype
             28/28 catch
             56/56 finally
             146/146 then
         184/184 race
         30/30 reject
         60/60 resolve
     607/607 Proxy
         28/28 apply
         58/58 construct
         48/48 defineProperty
         30/30 deleteProperty
         2/2 enumerate
         38/38 get
         42/42 getOwnPropertyDescriptor
         38/38 getPrototypeOf
         43/43 has
         24/24 isExtensible
         54/54 ownKeys
         23/23 preventExtensions
         35/35 revocable
         54/54 set
         34/34 setPrototypeOf
     306/306 Reflect
         18/18 apply
         20/20 construct
         24/24 defineProperty
         22/22 deleteProperty
         2/2 enumerate
         22/22 get
         26/26 getOwnPropertyDescriptor
         20/20 getPrototypeOf
         20/20 has
         16/16 isExtensible
         26/26 ownKeys
         20/20 preventExtensions
         36/36 set
         28/28 setPrototypeOf
     2986/3162 (160) RegExp
         48/48 CharacterClassEscapes
         8/8 Symbol.species
         8/8 dotall
         34/34 lookBehind
         28/28 match-indices
         52/62 (10) named-groups
         1120/1148 (28) property-escapes
             834/862 (28) generated
                 0/28 (28) strings
         872/901 (13) prototype
             106/106 Symbol.match
             52/52 Symbol.matchAll
             138/138 Symbol.replace
             46/46 Symbol.search
             88/88 Symbol.split
             14/16 dotAll
             152/154 (2) exec
             30/31 (1) flags
             18/20 global
             14/16 hasIndices
             18/20 ignoreCase
             18/20 multiline
             22/24 source
             14/16 sticky
             90/90 test
             18/18 toString
             14/16 unicode
             0/10 (10) unicodeSets
         0/108 (108) unicodeSets
             0/108 (108) generated
     34/34 RegExpStringIteratorPrototype
         30/30 next
     392/392 Set
         8/8 Symbol.species
         340/340 prototype
             2/2 Symbol.iterator
             2/2 Symbol.toStringTag
             42/42 add
             38/38 clear
             4/4 constructor
             40/40 delete
             34/34 entries
             64/64 forEach
             60/60 has
             2/2 keys
             12/12 size
             36/36 values
     22/22 SetIteratorPrototype
         20/20 next
     0/64 (64) ShadowRealm
         0/5 (5) WrappedFunction
         0/51 (51) prototype
             0/37 (37) evaluate
             0/12 (12) importValue
     202/202 SharedArrayBuffer
         156/156 prototype
             18/18 byteLength
             30/30 grow
             18/18 growable
             20/20 maxByteLength
             64/64 slice
     2323/2343 (18) String
         30/30 fromCharCode
         22/22 fromCodePoint
         2028/2048 (18) prototype
             12/12 Symbol.iterator
             22/22 at
             60/60 charAt
             50/50 charCodeAt
             32/32 codePointAt
             44/44 concat
             4/4 constructor
             54/54 endsWith
             54/54 includes
             94/94 indexOf
             0/8 (8) isWellFormed
             48/48 lastIndexOf
             24/26 localeCompare
             88/90 (2) match
             40/40 matchAll
             28/28 normalize
             26/26 padEnd
             26/26 padStart
             32/32 repeat
             92/92 replace
             82/82 replaceAll
             74/74 search
             72/72 slice
             232/232 split
             42/42 startsWith
             88/88 substring
             56/56 toLocaleLowerCase
             52/52 toLocaleUpperCase
             56/56 toLowerCase
             14/14 toString
             52/52 toUpperCase
             0/8 (8) toWellFormed
             258/258 trim
             46/46 trimEnd
             46/46 trimStart
             14/14 valueOf
         60/60 raw
     14/14 StringIteratorPrototype
         10/10 next
     176/180 Symbol
         4/4 asyncIterator
         16/18 for
         4/4 hasInstance
         4/4 isConcatSpreadable
         4/4 iterator
         14/16 keyFor
         4/4 match
         4/4 matchAll
         68/68 prototype
             18/18 Symbol.toPrimitive
             14/14 description
             14/14 toString
             16/16 valueOf
         4/4 replace
         4/4 search
         8/8 species
         4/4 split
         4/4 toPrimitive
         4/4 toStringTag
         4/4 unscopables
     0/5934 (5934) Temporal
         0/790 (790) Calendar
             0/18 (18) from
             0/765 (765) prototype
                 0/60 (60) dateAdd
                 0/23 (23) dateFromFields
                 0/50 (50) dateUntil
                 0/43 (43) day
                 0/42 (42) dayOfWeek
                 0/42 (42) dayOfYear
                 0/42 (42) daysInMonth
                 0/42 (42) daysInWeek
                 0/42 (42) daysInYear
                 0/13 (13) fields
                 0/3 (3) id
                 0/39 (39) inLeapYear
                 0/12 (12) mergeFields
                 0/44 (44) month
                 0/44 (44) monthCode
                 0/22 (22) monthDayFromFields
                 0/39 (39) monthsInYear
                 0/6 (6) toJSON
                 0/6 (6) toString
                 0/1 (1) toStringTag
                 0/42 (42) weekOfYear
                 0/43 (43) year
                 0/23 (23) yearMonthFromFields
                 0/40 (40) yearOfWeek
         0/539 (539) Duration
             0/51 (51) compare
             0/21 (21) from
             0/445 (445) prototype
                 0/9 (9) abs
                 0/76 (76) add
                 0/3 (3) blank
                 0/2 (2) days
                 0/2 (2) hours
                 0/2 (2) microseconds
                 0/2 (2) milliseconds
                 0/2 (2) minutes
                 0/2 (2) months
                 0/2 (2) nanoseconds
                 0/8 (8) negated
                 0/101 (101) round
                 0/2 (2) seconds
                 0/2 (2) sign
                 0/76 (76) subtract
                 0/9 (9) toJSON
                 0/6 (6) toLocaleString
                 0/39 (39) toString
                 0/1 (1) toStringTag
                 0/65 (65) total
                 0/7 (7) valueOf
                 0/2 (2) weeks
                 0/21 (21) with
                 0/2 (2) years
         0/422 (422) Instant
             0/23 (23) compare
             0/27 (27) from
             0/7 (7) fromEpochMicroseconds
             0/7 (7) fromEpochMilliseconds
             0/7 (7) fromEpochNanoseconds
             0/7 (7) fromEpochSeconds
             0/336 (336) prototype
                 0/22 (22) add
                 0/3 (3) epochMicroseconds
                 0/3 (3) epochMilliseconds
                 0/3 (3) epochNanoseconds
                 0/3 (3) epochSeconds
                 0/23 (23) equals
                 0/31 (31) round
                 0/54 (54) since
                 0/22 (22) subtract
                 0/10 (10) toJSON
                 0/7 (7) toLocaleString
                 0/55 (55) toString
                 0/1 (1) toStringTag
                 0/22 (22) toZonedDateTime
                 0/14 (14) toZonedDateTimeISO
                 0/53 (53) until
                 0/7 (7) valueOf
         0/192 (192) Now
             0/9 (9) instant
             0/21 (21) plainDate
             0/13 (13) plainDateISO
             0/42 (42) plainDateTime
             0/28 (28) plainDateTimeISO
             0/15 (15) plainTimeISO
             0/7 (7) timeZone
             0/2 (2) toStringTag
             0/33 (33) zonedDateTime
             0/20 (20) zonedDateTimeISO
         0/657 (657) PlainDate
             0/42 (42) compare
             0/55 (55) from
             0/540 (540) prototype
                 0/31 (31) add
                 0/2 (2) calendar
                 0/4 (4) day
                 0/5 (5) dayOfWeek
                 0/5 (5) dayOfYear
                 0/5 (5) daysInMonth
                 0/5 (5) daysInWeek
                 0/5 (5) daysInYear
                 0/45 (45) equals
                 0/11 (11) getISOFields
                 0/5 (5) inLeapYear
                 0/4 (4) month
                 0/4 (4) monthCode
                 0/5 (5) monthsInYear
                 0/84 (84) since
                 0/31 (31) subtract
                 0/8 (8) toJSON
                 0/7 (7) toLocaleString
                 0/35 (35) toPlainDateTime
                 0/12 (12) toPlainMonthDay
                 0/13 (13) toPlainYearMonth
                 0/20 (20) toString
                 0/1 (1) toStringTag
                 0/46 (46) toZonedDateTime
                 0/83 (83) until
                 0/7 (7) valueOf
                 0/5 (5) weekOfYear
                 0/25 (25) with
                 0/16 (16) withCalendar
                 0/4 (4) year
                 0/5 (5) yearOfWeek
         0/819 (819) PlainDateTime
             0/40 (40) compare
             0/60 (60) from
             0/693 (693) prototype
                 0/32 (32) add
                 0/2 (2) calendar
                 0/4 (4) day
                 0/5 (5) dayOfWeek
                 0/5 (5) dayOfYear
                 0/5 (5) daysInMonth
                 0/5 (5) daysInWeek
                 0/5 (5) daysInYear
                 0/41 (41) equals
                 0/11 (11) getISOFields
                 0/2 (2) hour
                 0/5 (5) inLeapYear
                 0/2 (2) microsecond
                 0/2 (2) millisecond
                 0/2 (2) minute
                 0/4 (4) month
                 0/4 (4) monthCode
                 0/5 (5) monthsInYear
                 0/2 (2) nanosecond
                 0/42 (42) round
                 0/2 (2) second
                 0/91 (91) since
                 0/32 (32) subtract
                 0/8 (8) toJSON
                 0/7 (7) toLocaleString
                 0/7 (7) toPlainDate
                 0/10 (10) toPlainMonthDay
                 0/7 (7) toPlainTime
                 0/10 (10) toPlainYearMonth
                 0/48 (48) toString
                 0/1 (1) toStringTag
                 0/34 (34) toZonedDateTime
                 0/94 (94) until
                 0/7 (7) valueOf
                 0/5 (5) weekOfYear
                 0/33 (33) with
                 0/17 (17) withCalendar
                 0/49 (49) withPlainDate
                 0/35 (35) withPlainTime
                 0/4 (4) year
                 0/5 (5) yearOfWeek
         0/206 (206) PlainMonthDay
             0/45 (45) from
             0/140 (140) prototype
                 0/2 (2) calendar
                 0/5 (5) day
                 0/34 (34) equals
                 0/11 (11) getISOFields
                 0/1 (1) month
                 0/5 (5) monthCode
                 0/8 (8) toJSON
                 0/6 (6) toLocaleString
                 0/15 (15) toPlainDate
                 0/19 (19) toString
                 0/1 (1) toStringTag
                 0/7 (7) valueOf
                 0/24 (24) with
         0/568 (568) PlainTime
             0/30 (30) compare
             0/49 (49) from
             0/473 (473) prototype
                 0/27 (27) add
                 0/3 (3) calendar
                 0/31 (31) equals
                 0/11 (11) getISOFields
                 0/2 (2) hour
                 0/2 (2) microsecond
                 0/2 (2) millisecond
                 0/2 (2) minute
                 0/2 (2) nanosecond
                 0/39 (39) round
                 0/2 (2) second
                 0/72 (72) since
                 0/27 (27) subtract
                 0/7 (7) toJSON
                 0/7 (7) toLocaleString
                 0/40 (40) toPlainDateTime
                 0/39 (39) toString
                 0/1 (1) toStringTag
                 0/56 (56) toZonedDateTime
                 0/72 (72) until
                 0/7 (7) valueOf
                 0/20 (20) with
         0/495 (495) PlainYearMonth
             0/35 (35) compare
             0/47 (47) from
             0/392 (392) prototype
                 0/37 (37) add
                 0/2 (2) calendar
                 0/5 (5) daysInMonth
                 0/5 (5) daysInYear
                 0/37 (37) equals
                 0/11 (11) getISOFields
                 0/5 (5) inLeapYear
                 0/4 (4) month
                 0/4 (4) monthCode
                 0/5 (5) monthsInYear
                 0/77 (77) since
                 0/37 (37) subtract
                 0/7 (7) toJSON
                 0/6 (6) toLocaleString
                 0/15 (15) toPlainDate
                 0/19 (19) toString
                 0/1 (1) toStringTag
                 0/76 (76) until
                 0/7 (7) valueOf
                 0/26 (26) with
                 0/4 (4) year
         0/260 (260) TimeZone
             0/18 (18) from
             0/234 (234) prototype
                 0/47 (47) getInstantFor
                 0/20 (20) getNextTransition
                 0/20 (20) getOffsetNanosecondsFor
                 0/26 (26) getOffsetStringFor
                 0/41 (41) getPlainDateTimeFor
                 0/39 (39) getPossibleInstantsFor
                 0/20 (20) getPreviousTransition
                 0/3 (3) id
                 0/9 (9) toJSON
                 0/6 (6) toString
                 0/1 (1) toStringTag
         0/981 (981) ZonedDateTime
             0/43 (43) compare
             0/62 (62) from
             0/855 (855) prototype
                 0/27 (27) add
                 0/2 (2) calendar
                 0/9 (9) day
                 0/8 (8) dayOfWeek
                 0/8 (8) dayOfYear
                 0/8 (8) daysInMonth
                 0/8 (8) daysInWeek
                 0/9 (9) daysInYear
                 0/3 (3) epochMicroseconds
                 0/3 (3) epochMilliseconds
                 0/3 (3) epochNanoseconds
                 0/3 (3) epochSeconds
                 0/46 (46) equals
                 0/18 (18) getISOFields
                 0/7 (7) hour
                 0/8 (8) hoursInDay
                 0/9 (9) inLeapYear
                 0/8 (8) microsecond
                 0/8 (8) millisecond
                 0/7 (7) minute
                 0/8 (8) month
                 0/8 (8) monthCode
                 0/8 (8) monthsInYear
                 0/7 (7) nanosecond
                 0/7 (7) offset
                 0/6 (6) offsetNanoseconds
                 0/43 (43) round
                 0/7 (7) second
                 0/89 (89) since
                 0/12 (12) startOfDay
                 0/27 (27) subtract
                 0/2 (2) timeZone
                 0/6 (6) toInstant
                 0/15 (15) toJSON
                 0/7 (7) toLocaleString
                 0/10 (10) toPlainDate
                 0/13 (13) toPlainDateTime
                 0/15 (15) toPlainMonthDay
                 0/12 (12) toPlainTime
                 0/15 (15) toPlainYearMonth
                 0/63 (63) toString
                 0/1 (1) toStringTag
                 0/88 (88) until
                 0/7 (7) valueOf
                 0/8 (8) weekOfYear
                 0/40 (40) with
                 0/15 (15) withCalendar
                 0/45 (45) withPlainDate
                 0/36 (36) withPlainTime
                 0/15 (15) withTimeZone
                 0/8 (8) year
                 0/8 (8) yearOfWeek
         0/2 (2) toStringTag
     28/28 ThrowTypeError
     2572/2572 TypedArray
         8/8 Symbol.species
         28/28 from
         14/14 of
         2514/2514 prototype
             2/2 Symbol.iterator
             36/36 Symbol.toStringTag
                 18/18 BigInt
             26/26 at
                 2/2 BigInt
             24/24 buffer
                 4/4 BigInt
             30/30 byteLength
                 8/8 BigInt
             30/30 byteOffset
                 8/8 BigInt
             122/122 copyWithin
                 48/48 BigInt
             32/32 entries
                 8/8 BigInt
             82/82 every
                 32/32 BigInt
             96/96 fill
                 36/36 BigInt
             154/154 filter
                 68/68 BigInt
             66/66 find
                 24/24 BigInt
             66/66 findIndex
                 24/24 BigInt
             66/66 findLast
                 24/24 BigInt
             66/66 findLastIndex
                 24/24 BigInt
             78/78 forEach
                 30/30 BigInt
             76/76 includes
                 28/28 BigInt
             78/78 indexOf
                 30/30 BigInt
             56/56 join
                 18/18 BigInt
             32/32 keys
                 8/8 BigInt
             74/74 lastIndexOf
                 28/28 BigInt
             30/30 length
                 8/8 BigInt
             150/150 map
                 64/64 BigInt
             94/94 reduce
                 38/38 BigInt
             94/94 reduceRight
                 38/38 BigInt
             40/40 reverse
                 12/12 BigInt
             204/204 set
                 98/98 BigInt
             162/162 slice
                 72/72 BigInt
             82/82 some
                 32/32 BigInt
             62/62 sort
                 20/20 BigInt
             124/124 subarray
                 54/54 BigInt
             72/72 toLocaleString
                 28/28 BigInt
             16/16 toReversed
                 6/6 metadata
             20/20 toSorted
                 6/6 metadata
             6/6 toString
                 2/2 BigInt
             32/32 values
                 8/8 BigInt
             28/28 with
                 2/2 BigInt
                 6/6 metadata
     1406/1406 TypedArrayConstructors
         24/24 BigInt64Array
             8/8 prototype
         24/24 BigUint64Array
             8/8 prototype
         22/22 Float32Array
             8/8 prototype
         22/22 Float64Array
             8/8 prototype
         22/22 Int16Array
             8/8 prototype
         22/22 Int32Array
             8/8 prototype
         22/22 Int8Array
             8/8 prototype
         22/22 Uint16Array
             8/8 prototype
         22/22 Uint32Array
             8/8 prototype
         22/22 Uint8Array
             8/8 prototype
         22/22 Uint8ClampedArray
             8/8 prototype
         222/222 ctors
             106/106 buffer-arg
             24/24 length-arg
             14/14 no-args
             52/52 object-arg
             24/24 typedarray-arg
         226/226 ctors-bigint
             104/104 buffer-arg
             24/24 length-arg
             14/14 no-args
             62/62 object-arg
             22/22 typedarray-arg
         112/112 from
             54/54 BigInt
         428/428 internals
             108/108 DefineOwnProperty
                 52/52 BigInt
             54/54 Delete
                 26/26 BigInt
             56/56 Get
                 28/28 BigInt
             48/48 GetOwnProperty
                 24/24 BigInt
             62/62 HasProperty
                 29/29 BigInt
             20/20 OwnPropertyKeys
                 8/8 BigInt
             80/80 Set
                 46/46 BigInt
         52/52 of
             24/24 BigInt
         120/120 prototype
             4/4 Symbol.toStringTag
             4/4 buffer
             4/4 byteLength
             4/4 byteOffset
             4/4 copyWithin
             4/4 entries
             4/4 every
             4/4 fill
             4/4 filter
             4/4 find
             4/4 findIndex
             4/4 forEach
             4/4 indexOf
             4/4 join
             4/4 keys
             4/4 lastIndexOf
             4/4 length
             4/4 map
             4/4 reduce
             4/4 reduceRight
             4/4 reverse
             4/4 set
             4/4 slice
             4/4 some
             4/4 sort
             4/4 subarray
             4/4 toLocaleString
             4/4 toString
             4/4 values
     204/204 WeakMap
         156/156 prototype
             44/44 delete
             26/26 get
             40/40 has
             40/40 set
     58/59 (1) WeakRef
         26/27 (1) prototype
             18/19 (1) deref
     170/170 WeakSet
         132/132 prototype
             44/44 add
             4/4 constructor
             40/40 delete
             40/40 has
     110/110 decodeURI
     110/110 decodeURIComponent
     62/62 encodeURI
     62/62 encodeURIComponent
     20/20 eval
     56/56 global
     34/34 isFinite
     34/34 isNaN
     118/118 parseFloat
     120/120 parseInt
     12/12 undefined

Failures

Here under are the failed tests. The comments are primarily here for the sake of future versions of XS.

Language

language/eval-code/indirect/realm.js
language/expressions/call/eval-realm-indirect.js (sloppy)

One realm.

language/expressions/assignment/fn-name-lhs-cover.js

Assignments should rename functions only if the left hand side is an identifier. XS also rename functions if the left hand side is a group with only an identifier.

language/expressions/async-function/named-reassign-fn-name-in-body-in-arrow.js (sloppy)
language/expressions/async-function/named-reassign-fn-name-in-body-in-eval.js (sloppy)
language/expressions/async-function/named-reassign-fn-name-in-body.js (sloppy)
language/expressions/async-generator/named-no-strict-reassign-fn-name-in-body-in-arrow.js (sloppy)
language/expressions/async-generator/named-no-strict-reassign-fn-name-in-body-in-eval.js (sloppy)
language/expressions/async-generator/named-no-strict-reassign-fn-name-in-body.js (sloppy)
language/expressions/function/named-no-strict-reassign-fn-name-in-body-in-arrow.js (sloppy)
language/expressions/function/named-no-strict-reassign-fn-name-in-body-in-eval.js (sloppy)
language/expressions/function/named-no-strict-reassign-fn-name-in-body.js (sloppy)
language/expressions/function/scope-name-var-open-non-strict.js (sloppy)
language/expressions/generators/named-no-strict-reassign-fn-name-in-body-in-arrow.js (sloppy)
language/expressions/generators/named-no-strict-reassign-fn-name-in-body-in-eval.js (sloppy)
language/expressions/generators/named-no-strict-reassign-fn-name-in-body.js (sloppy)
language/expressions/generators/scope-name-var-open-non-strict.js (sloppy)

The name of a function expression always defines a constant variable that reference the current function. In sloppy mode it should define a variable that can be assigned but does not change!

language/expressions/object/literal-property-name-bigint.js

XS does not support bigint as property name.

language/expressions/super/call-proto-not-ctor.js

XS checks if super is a constructor before evaluating arguments.

language/statements/class/subclass/default-constructor-spread-override.js

The default derived constructor should not use %Array.prototype% @@iterator

language/statements/for-await-of/head-lhs-async.js

for (async of x) is a syntax error but for await (async of x) should not be!

language/statements/try/tco-catch.js (strict)

XS does not tail call optimize return inside catch

language/expressions/assignment/target-member-computed-reference-null.js
language/expressions/assignment/target-member-computed-reference-undefined.js
language/identifier-resolution/assign-to-global-undefined.js

To be investigated.

Built-ins

built-ins/Array/prototype/concat/create-proto-from-ctor-realm-array.js
built-ins/Array/prototype/filter/create-proto-from-ctor-realm-array.js
built-ins/Array/prototype/map/create-proto-from-ctor-realm-array.js
built-ins/Array/prototype/slice/create-proto-from-ctor-realm-array.js
built-ins/Array/prototype/splice/create-proto-from-ctor-realm-array.js
built-ins/RegExp/prototype/dotAll/cross-realm.js
built-ins/RegExp/prototype/global/cross-realm.js
built-ins/RegExp/prototype/ignoreCase/cross-realm.js
built-ins/RegExp/prototype/multiline/cross-realm.js
built-ins/RegExp/prototype/source/cross-realm.js
built-ins/RegExp/prototype/sticky/cross-realm.js
built-ins/RegExp/prototype/unicode/cross-realm.js
built-ins/Symbol/for/cross-realm.js
built-ins/Symbol/for/cross-realm.js
built-ins/Symbol/keyFor/cross-realm.js
built-ins/Symbol/keyFor/cross-realm.js

One realm.

built-ins/Array/prototype/reduceRight/length-near-integer-limit.js
built-ins/String/prototype/localeCompare/15.5.4.9_CE.js
built-ins/JSON/stringify/replacer-function-object-deleted-property.js

To be investigated.

built-ins/Function/prototype/toString/method-computed-property-name.js

Invalid test.

Skipped cases

xst skips cases with the following features:

  • Array.fromAsync
  • Atomics.waitAsync
  • FinalizationRegistry.prototype.cleanupSome
  • ShadowRealm
  • String.prototype.isWellFormed
  • String.prototype.toWellFormed
  • Temporal
  • arbitrary-module-namespace-names
  • array-grouping
  • decorators
  • import-assertions
  • json-modules
  • regexp-duplicate-named-groups
  • regexp-v-flag