[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[sc-dev] SF.net SVN: supercollider: [6887] trunk/Source/lang/LangPrimSource/ PyrArrayPrimitives.cpp



Revision: 6887
          http://svn.sourceforge.net/supercollider/?rev=6887&view=rev
Author:   joshpar
Date:     2008-01-07 10:22:41 -0800 (Mon, 07 Jan 2008)

Log Message:
-----------
fix .lace crash

Modified Paths:
--------------
    trunk/Source/lang/LangPrimSource/PyrArrayPrimitives.cpp

Modified: trunk/Source/lang/LangPrimSource/PyrArrayPrimitives.cpp
===================================================================
--- trunk/Source/lang/LangPrimSource/PyrArrayPrimitives.cpp	2008-01-07 16:55:50 UTC (rev 6886)
+++ trunk/Source/lang/LangPrimSource/PyrArrayPrimitives.cpp	2008-01-07 18:22:41 UTC (rev 6887)
@@ -2024,25 +2024,29 @@
 	
 
 	n = sc_max(1, n);
-	obj2 = (PyrObject*)instantiateObject(g->gc, obj1->classptr, n, false, true);
-	for (i=j=k=0; i<n; ++i) {
-		if (slots[k].utag == tagObj) {
-			obj3 = slots[k].uo;
-			if (isKindOf((PyrObject*)obj3, class_list)) {
-				obj3 = obj3->slots[0].uo; // get the list's array
-			}
-			if (obj3 && isKindOf((PyrObject*)obj3, class_array)) {
-				m = j % obj3->size;
-				obj2->slots[i].ucopy = obj3->slots[m].ucopy;
-			} else {
-				obj2->slots[i].ucopy = slots[k].ucopy;
-			}
-		} else {
-			obj2->slots[i].ucopy = slots[k].ucopy;
-		}
-		k = (k+1) % obj1->size;
-		if (k == 0) j++;
-	}
+	if(obj1->size > 0) {
+	    obj2 = (PyrObject*)instantiateObject(g->gc, obj1->classptr, n, false, true);
+	    for (i=j=k=0; i<n; ++i) {
+		    if (slots[k].utag == tagObj) {
+			    obj3 = slots[k].uo;
+			    if (isKindOf((PyrObject*)obj3, class_list)) {
+				    obj3 = obj3->slots[0].uo; // get the list's array
+			    }
+			    if (obj3 && isKindOf((PyrObject*)obj3, class_array)) {
+				    m = j % obj3->size;
+				    obj2->slots[i].ucopy = obj3->slots[m].ucopy;
+			    } else {
+				    obj2->slots[i].ucopy = slots[k].ucopy;
+			    }
+		    } else {
+			    obj2->slots[i].ucopy = slots[k].ucopy;
+		    }
+		    k = (k+1) % obj1->size;
+		    if (k == 0) j++;
+	    }
+	} else {
+	obj2 = (PyrObject*)instantiateObject(g->gc, obj1->classptr, n, true, true);
+	}	
 	obj2->size = n;
 	a->uo = obj2;
 	return errNone;


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.