summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xhistory.txt4
-rw-r--r--lists.js5
2 files changed, 8 insertions, 1 deletions
diff --git a/history.txt b/history.txt
index 88d7ca4..53bd4a6 100755
--- a/history.txt
+++ b/history.txt
@@ -2321,3 +2321,7 @@ ______
141117
------
* Threads, Blocks: Treat REPORT blocks inside custom command definitions as STOP THIS BLOCK / IGNORE INPUTS
+
+141120
+------
+* Lists: Fixed #642, avoid “freezing” when calling CONS on non-list/null
diff --git a/lists.js b/lists.js
index a4aff6c..bd856fe 100644
--- a/lists.js
+++ b/lists.js
@@ -61,7 +61,7 @@ PushButtonMorph, SyntaxElementMorph, Color, Point, WatcherMorph,
StringMorph, SpriteMorph, ScrollFrameMorph, CellMorph, ArrowMorph,
MenuMorph, snapEquals, Morph, isNil, localize, MorphicPreferences*/
-modules.lists = '2014-July-28';
+modules.lists = '2014-November-20';
var List;
var ListWatcherMorph;
@@ -125,6 +125,9 @@ List.prototype.changed = function () {
List.prototype.cons = function (car, cdr) {
var answer = new List();
+ if (!(cdr instanceof List || isNil(cdr))) {
+ throw new Error("cdr isn't a list: " + cdr);
+ }
answer.first = isNil(car) ? null : car;
answer.rest = cdr || null;
answer.isLinked = true;