| Index: lib/io.js |
| =================================================================== |
| --- a/lib/io.js |
| +++ b/lib/io.js |
| @@ -73,40 +73,40 @@ let IO = exports.IO = |
| { |
| try |
| { |
| let processing = false; |
| let buffer = ""; |
| let loaded = false; |
| let error = null; |
| - let onProgress = function(data) |
| + let onProgress = function*(data) |
| { |
| let index = (processing ? -1 : Math.max(data.lastIndexOf("\n"), data.lastIndexOf("\r"))); |
| if (index >= 0) |
| { |
| // Protect against reentrance in case the listener processes events. |
| processing = true; |
| try |
| { |
| let oldBuffer = buffer; |
| buffer = data.substr(index + 1); |
| data = data.substr(0, index + 1); |
| let lines = data.split(/[\r\n]+/); |
| lines.pop(); |
| lines[0] = oldBuffer + lines[0]; |
| for (let i = 0; i < lines.length; i++) |
| - listener.process(lines[i]); |
| + yield listener.process(lines[i]); |
| } |
| finally |
| { |
| processing = false; |
| data = buffer; |
| buffer = ""; |
| - onProgress(data); |
| + yield* onProgress(data); |
| if (loaded) |
| { |
| loaded = false; |
| onSuccess(); |
| } |
| if (error) |
| @@ -125,16 +125,19 @@ let IO = exports.IO = |
| { |
| if (processing) |
| { |
| // Still processing data, delay processing this event. |
| loaded = true; |
| return; |
| } |
| + // We are ignoring return value of listener.process() here because |
| + // turning this callback into a generator would be complicated, and |
| + // delaying isn't really necessary for the last two calls. |
| if (buffer !== "") |
| listener.process(buffer); |
| listener.process(null); |
| callback(null); |
| }; |
| let onError = function(e) |
| @@ -174,17 +177,17 @@ let IO = exports.IO = |
| let f = yield OS.File.open(file.path, {read: true}); |
| while (true) |
| { |
| let array = yield f.read(BUFFER_SIZE); |
| if (!array.length) |
| break; |
| let data = decoder.decode(array, {stream: true}); |
| - onProgress(data); |
| + yield* onProgress(data); |
| } |
| yield f.close(); |
| }.bind(this)).then(onSuccess, onError); |
| } |
| catch (e) |
| { |
| callback(e); |
| } |