@@ -109,6 +109,11 @@ writer.options = Object.assign({},
109109
110110exports . _builtinLibs = internalModule . builtinLibs ;
111111
112+ const sep = '\u0000\u0000\u0000' ;
113+ const regExMatcher = new RegExp ( `^${ sep } (.*)${ sep } (.*)${ sep } (.*)${ sep } (.*)` +
114+ `${ sep } (.*)${ sep } (.*)${ sep } (.*)${ sep } (.*)` +
115+ `${ sep } (.*)$` ) ;
116+
112117function REPLServer ( prompt ,
113118 stream ,
114119 eval_ ,
@@ -149,6 +154,7 @@ function REPLServer(prompt,
149154 }
150155
151156 var self = this ;
157+ replMap . set ( self , self ) ;
152158
153159 self . _domain = dom || domain . create ( ) ;
154160 self . useGlobal = ! ! useGlobal ;
@@ -165,41 +171,6 @@ function REPLServer(prompt,
165171 self . rli = this ;
166172
167173 const savedRegExMatches = [ '' , '' , '' , '' , '' , '' , '' , '' , '' , '' ] ;
168- const sep = '\u0000\u0000\u0000' ;
169- const regExMatcher = new RegExp ( `^${ sep } (.*)${ sep } (.*)${ sep } (.*)${ sep } (.*)` +
170- `${ sep } (.*)${ sep } (.*)${ sep } (.*)${ sep } (.*)` +
171- `${ sep } (.*)$` ) ;
172-
173- eval_ = eval_ || defaultEval ;
174-
175- // Pause taking in new input, and store the keys in a buffer.
176- const pausedBuffer = [ ] ;
177- let paused = false ;
178- function pause ( ) {
179- paused = true ;
180- }
181- function unpause ( ) {
182- if ( ! paused ) return ;
183- paused = false ;
184- let entry ;
185- while ( entry = pausedBuffer . shift ( ) ) {
186- const [ type , payload ] = entry ;
187- switch ( type ) {
188- case 'key' : {
189- const [ d , key ] = payload ;
190- self . _ttyWrite ( d , key ) ;
191- break ;
192- }
193- case 'close' :
194- self . emit ( 'exit' ) ;
195- break ;
196- }
197- if ( paused ) {
198- break ;
199- }
200- }
201- }
202-
203174 function defaultEval ( code , context , file , cb ) {
204175 var err , result , script , wrappedErr ;
205176 var wrappedCmd = false ;
@@ -331,7 +302,6 @@ function REPLServer(prompt,
331302
332303 if ( awaitPromise && ! err ) {
333304 let sigintListener ;
334- pause ( ) ;
335305 let promise = result ;
336306 if ( self . breakEvalOnSigint ) {
337307 const interrupt = new Promise ( ( resolve , reject ) => {
@@ -350,7 +320,6 @@ function REPLServer(prompt,
350320 prioritizedSigintQueue . delete ( sigintListener ) ;
351321
352322 finishExecution ( undefined , result ) ;
353- unpause ( ) ;
354323 } , ( err ) => {
355324 // Remove prioritized SIGINT listener if it was not called.
356325 prioritizedSigintQueue . delete ( sigintListener ) ;
@@ -360,7 +329,6 @@ function REPLServer(prompt,
360329 Object . defineProperty ( err , 'stack' , { value : '' } ) ;
361330 }
362331
363- unpause ( ) ;
364332 if ( err && process . domain ) {
365333 debug ( 'not recoverable, send to domain' ) ;
366334 process . domain . emit ( 'error' , err ) ;
@@ -377,6 +345,36 @@ function REPLServer(prompt,
377345 }
378346 }
379347
348+ eval_ = eval_ || defaultEval ;
349+
350+ // Pause taking in new input, and store the keys in a buffer.
351+ const pausedBuffer = [ ] ;
352+ let paused = false ;
353+ function pause ( ) {
354+ paused = true ;
355+ }
356+ function unpause ( ) {
357+ if ( ! paused ) return ;
358+ paused = false ;
359+ let entry ;
360+ while ( entry = pausedBuffer . shift ( ) ) {
361+ const [ type , payload ] = entry ;
362+ switch ( type ) {
363+ case 'key' : {
364+ const [ d , key ] = payload ;
365+ self . _ttyWrite ( d , key ) ;
366+ break ;
367+ }
368+ case 'close' :
369+ self . emit ( 'exit' ) ;
370+ break ;
371+ }
372+ if ( paused ) {
373+ break ;
374+ }
375+ }
376+ }
377+
380378 self . eval = self . _domain . bind ( eval_ ) ;
381379
382380 self . _domain . on ( 'error' , function debugDomainError ( e ) {
@@ -405,6 +403,7 @@ function REPLServer(prompt,
405403 top . clearBufferedCommand ( ) ;
406404 top . lines . level = [ ] ;
407405 top . displayPrompt ( ) ;
406+ unpause ( ) ;
408407 } ) ;
409408
410409 if ( ! input && ! output ) {
@@ -593,6 +592,7 @@ function REPLServer(prompt,
593592 const evalCmd = self [ kBufferedCommandSymbol ] + cmd + '\n' ;
594593
595594 debug ( 'eval %j' , evalCmd ) ;
595+ pause ( ) ;
596596 self . eval ( evalCmd , self . context , 'repl' , finish ) ;
597597
598598 function finish ( e , ret ) {
@@ -605,6 +605,7 @@ function REPLServer(prompt,
605605 '(Press Control-D to exit.)\n' ) ;
606606 self . clearBufferedCommand ( ) ;
607607 self . displayPrompt ( ) ;
608+ unpause ( ) ;
608609 return ;
609610 }
610611
@@ -642,6 +643,7 @@ function REPLServer(prompt,
642643
643644 // Display prompt again
644645 self . displayPrompt ( ) ;
646+ unpause ( ) ;
645647 }
646648 } ) ;
647649
@@ -724,7 +726,6 @@ exports.start = function(prompt,
724726 ignoreUndefined ,
725727 replMode ) ;
726728 if ( ! exports . repl ) exports . repl = repl ;
727- replMap . set ( repl , repl ) ;
728729 return repl ;
729730} ;
730731
0 commit comments