@@ -265,6 +265,10 @@ ExecutionVisualizer.prototype.resetJsPlumbManager = function() {
265265 //
266266 // The reason we need to prepend this.visualizerID is because jsPlumb needs
267267 // GLOBALLY UNIQUE IDs for use as connector endpoints.
268+ //
269+ // TODO: jsPlumb might be able to directly take DOM elements rather
270+ // than IDs, which makes the above point moot. But let's just stick
271+ // with this for now until I want to majorly refactor :)
268272
269273 // the only elements in these sets are NEW elements to be rendered in this
270274 // particular call to renderDataStructures.
@@ -273,7 +277,7 @@ ExecutionVisualizer.prototype.resetJsPlumbManager = function() {
273277 // analogous to connectionEndpointIDs, except for environment parent pointers
274278 parentPointerConnectionEndpointIDs : d3 . map ( ) ,
275279
276- renderedObjectIDs : d3 . map ( ) ,
280+ renderedHeapObjectIDs : d3 . map ( ) , // format given by generateHeapObjID()
277281 } ;
278282}
279283
@@ -2103,7 +2107,9 @@ ExecutionVisualizer.prototype.renderDataStructures = function(curEntry, curTople
21032107 // in d3 .each() statements
21042108 $ . each ( curToplevelLayout , function ( xxx , row ) {
21052109 for ( var i = 0 ; i < row . length ; i ++ ) {
2106- myViz . jsPlumbManager . renderedObjectIDs . set ( row [ i ] , 1 ) ;
2110+ var objID = row [ i ] ;
2111+ var heapObjID = myViz . generateHeapObjID ( objID , myViz . curInstr ) ;
2112+ myViz . jsPlumbManager . renderedHeapObjectIDs . set ( heapObjID , 1 ) ;
21072113 }
21082114 } ) ;
21092115
@@ -2857,11 +2863,13 @@ ExecutionVisualizer.prototype.renderCompoundObject =
28572863function ( objID , stepNum , d3DomElement , isTopLevel ) {
28582864 var myViz = this ; // to prevent confusion of 'this' inside of nested functions
28592865
2860- if ( ! isTopLevel && myViz . jsPlumbManager . renderedObjectIDs . has ( objID ) ) {
2866+ var heapObjID = myViz . generateHeapObjID ( objID , stepNum ) ;
2867+
2868+ if ( ! isTopLevel && myViz . jsPlumbManager . renderedHeapObjectIDs . has ( heapObjID ) ) {
28612869 var srcDivID = myViz . generateID ( 'heap_pointer_src_' + myViz . jsPlumbManager . heap_pointer_src_id ) ;
28622870 myViz . jsPlumbManager . heap_pointer_src_id ++ ; // just make sure each source has a UNIQUE ID
28632871
2864- var dstDivID = myViz . generateHeapObjID ( objID , stepNum ) ;
2872+ var dstDivID = heapObjID ;
28652873
28662874 if ( myViz . textualMemoryLabels ) {
28672875 var labelID = srcDivID + '_text_label' ;
@@ -2896,15 +2904,13 @@ function(objID, stepNum, d3DomElement, isTopLevel) {
28962904 return ; // early return!
28972905 }
28982906
2899- var heapObjID = myViz . generateHeapObjID ( objID , stepNum ) ;
2900-
29012907
29022908 // wrap ALL compound objects in a heapObject div so that jsPlumb
29032909 // connectors can point to it:
29042910 d3DomElement . append ( '<div class="heapObject" id="' + heapObjID + '"></div>' ) ;
2905- d3DomElement = myViz . domRoot . find ( '#' + heapObjID ) ;
2911+ d3DomElement = myViz . domRoot . find ( '#' + heapObjID ) ; // TODO: maybe inefficient
29062912
2907- myViz . jsPlumbManager . renderedObjectIDs . set ( objID , 1 ) ;
2913+ myViz . jsPlumbManager . renderedHeapObjectIDs . set ( heapObjID , 1 ) ;
29082914
29092915 var curHeap = myViz . curTrace [ stepNum ] . heap ;
29102916 var obj = curHeap [ objID ] ;
0 commit comments