Index: src/js/json.js |
diff --git a/src/js/json.js b/src/js/json.js |
index 38c46af6d617f41332126f6195cbb45e8c553958..1ed106db25eb3e35bb3164ae0ba1bc1d0c1cc8f8 100644 |
--- a/src/js/json.js |
+++ b/src/js/json.js |
@@ -28,19 +28,24 @@ utils.Import(function(from) { |
// ------------------------------------------------------------------- |
-function Revive(holder, name, reviver) { |
+function InternalizeJSONProperty(holder, name, reviver) { |
var val = holder[name]; |
if (IS_OBJECT(val)) { |
if (IS_ARRAY(val)) { |
Yang
2015/12/08 14:21:54
I thought IS_ARRAY is not the same as IsArray from
|
var length = val.length; |
for (var i = 0; i < length; i++) { |
- var newElement = Revive(val, %_NumberToString(i), reviver); |
- val[i] = newElement; |
+ var newElement = |
+ InternalizeJSONProperty(val, %_NumberToString(i), reviver); |
+ if (IS_UNDEFINED(newElement)) { |
+ delete val[i]; |
+ } else { |
+ val[i] = newElement; |
Yang
2015/12/08 14:21:54
is this equivalent to CreateDataProperty? What if
adamk
2015/12/09 23:49:20
What was the response to this comment? Perhaps thi
|
+ } |
} |
} else { |
for (var p in val) { |
if (HAS_OWN_PROPERTY(val, p)) { |
- var newElement = Revive(val, p, reviver); |
+ var newElement = InternalizeJSONProperty(val, p, reviver); |
if (IS_UNDEFINED(newElement)) { |
delete val[p]; |
} else { |
@@ -57,7 +62,7 @@ function Revive(holder, name, reviver) { |
function JSONParse(text, reviver) { |
var unfiltered = %ParseJson(text); |
if (IS_CALLABLE(reviver)) { |
- return Revive({'': unfiltered}, '', reviver); |
+ return InternalizeJSONProperty({'': unfiltered}, '', reviver); |
} else { |
return unfiltered; |
} |