diff --git a/lib/ast.js b/lib/ast.js
index <HASH>..<HASH> 100644
--- a/lib/ast.js
+++ b/lib/ast.js
@@ -32,25 +32,28 @@ Interpolation.prototype.render = function* (context) {
 
 		let resolvePromise = null;
 		let rejectPromise = null;
+		let end = false;
 
 		const readableListener = () => resolvePromise();
 		const errorListener = err => rejectPromise(err);
 		src.on('readable', readableListener);
-		src.on('end', readableListener);
+		src.on('end', () => { end = true; readableListener(); });
 		src.on('error', errorListener);
 
-		while (true) {
+		while (!end) {
 			yield new Promise((resolve, reject) => {
 				resolvePromise = resolve;
 				rejectPromise = reject;
 			});
 
-			const chunk = src.read();
+			while (!end) {
+				const chunk = src.read();
 
-			if (chunk === null) break;
+				if (chunk === null) break;
 
-			if (this.verbatim) yield chunk;
-			else yield* escape(chunk);
+				if (this.verbatim) yield chunk;
+				else yield* escape(chunk);
+			}
 		}
 
 		src.removeListener('error', errorListener);
Update stream reading to what I currently believe is correct