package Ġme . mat t co . ree va . runtime . builtins . regexp Ċ Ċ import Ġme . mat t co . ree va . core . Realm Ċ import Ġme . mat t co . ree va . runtime . JS Value Ċ import Ġme . mat t co . ree va . runtime . Operations Ċ import Ġme . mat t co . ree va . runtime . objects . Descriptor Ċ import Ġme . mat t co . ree va . runtime . objects . JS Object Ċ import Ġme . mat t co . ree va . runtime . primitives . JS Null Ċ import Ġme . mat t co . ree va . runtime . primitives . JS Undefined Ċ import Ġme . mat t co . ree va . utils .* Ċ Ċ class ĠJS RegExp String Iterator Proto Ġprivate Ġconstructor ( realm : ĠRealm ) Ġ: ĠJS Object ( realm , Ġrealm . iterator Proto ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . init () ĊĊĠĠĠĠĠĠĠ Ġdefine OwnProperty ( Realm .` @@ toString Tag `, Ġ" RegExp ĠString ĠIterator ". to Value (), ĠDescriptor . CONFIG UR ABLE Ġor ĠDescriptor . HAS _ BASIC ) ĊĠĠĠĠĠĠĠ Ġdefine Native Function (" next ", Ġ 0 , Ġ:: next ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnext ( this Value : ĠJS Value , Ġarguments : ĠJS Arguments ): ĠJS Value Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Value Ġ! is ĠJS RegExp String Iterator ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠErrors . In compatible MethodCall ("% RegExp String Iterator %. prototype . next "). throw TypeError () ĊĠĠĠĠĠĠĠ Ġif Ġ( this Value . done ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠOperations . create Iter Result Object ( JS Undefined , Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmatch Ġ= ĠOperations . reg Exp Exec ( realm , Ġthis Value , Ġthis Value . iter ated String , Ġ". next ") ĊĠĠĠĠĠĠĠ Ġif Ġ( match Ġ== ĠJS Null ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis Value . done Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠOperations . create Iter Result Object ( JS Undefined , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġexpect ( match Ġis ĠJS Object ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( this Value . global ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatch Str Ġ= ĠOperations . toString ( match . get ( 0 )). string ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( match Str Ġ== Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthis Index Ġ= ĠOperations . to Length ( this Value . get (" last Index ")). as Int ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠAdv ance String Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Index Ġ= Ġthis Index Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOperations . set ( this Value , Ġ" last Index ". key (), Ġnext Index . to Value (), Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠOperations . create Iter Result Object ( match , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis Value . done Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠOperations . create Iter Result Object ( match , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate ( realm : ĠRealm ) Ġ= ĠJS RegExp String Iterator Proto ( realm ). initialize () ĊĠĠĠ Ġ} Ċ } Ċ