浏览代码

[eval] make an array copy when iterating

Apparently that's how it is supposed to be. Xml.iterator() relies on this being the case.
Simon Krajewski 8 年之前
父节点
当前提交
db27674c51
共有 1 个文件被更改,包括 9 次插入4 次删除
  1. 9 4
      src/macro/eval/evalArray.ml

+ 9 - 4
src/macro/eval/evalArray.ml

@@ -81,14 +81,19 @@ let insert a pos x =
 
 let iterator a =
 	let i = ref 0 in
-	let length = a.alength in
+	let a = Array.sub a.avalues 0 a.alength in
+	let length = Array.length a in
 	(fun () ->
 		!i < length
 	),
 	(fun () ->
-		let v = get a !i in
-		incr i;
-		v
+		if !i >= length then
+			vnull
+		else begin
+			let v = a.(!i) in
+			incr i;
+			v
+		end
 	)
 
 let join a f sep =