diff --git a/blocks/procedures.js b/blocks/procedures.js index c41eb92db..a9682d706 100644 --- a/blocks/procedures.js +++ b/blocks/procedures.js @@ -711,10 +711,10 @@ const PROCEDURE_CALL_COMMON = { if (!mutatorOpen) { this.quarkConnections_ = {}; this.quarkIds_ = null; - } - if (!paramIds) { - // Reset the quarks (a mutator is about to open). - return; + } else { + // fix #6091 - this call could cause an error when outside if-else + // expanding block while mutating prevents another error (ancient fix) + this.setCollapsed(false); } // Test arguments (arrays of strings) for changes. '\n' is not a valid // argument name character, so it is a valid delimiter here. @@ -726,7 +726,6 @@ const PROCEDURE_CALL_COMMON = { if (paramIds.length !== paramNames.length) { throw RangeError('paramNames and paramIds must be the same length.'); } - this.setCollapsed(false); if (!this.quarkIds_) { // Initialize tracking for this block. this.quarkConnections_ = {}; diff --git a/core/serialization/blocks.js b/core/serialization/blocks.js index fa6b9886c..8b5a6d67a 100644 --- a/core/serialization/blocks.js +++ b/core/serialization/blocks.js @@ -611,8 +611,8 @@ const initBlock = function(block, rendered) { // operation to decrease load time. block.setConnectionTracking(false); - blockSvg.initSvg(); - blockSvg.render(false); + block.initSvg(); + block.render(false); // fixes #6076 JSO deserialization doesn't // set .iconXY_ property so here it will be set const icons = block.getIcons(); diff --git a/tests/mocha/serializer_test.js b/tests/mocha/serializer_test.js index 43b77c51e..8ea086dc5 100644 --- a/tests/mocha/serializer_test.js +++ b/tests/mocha/serializer_test.js @@ -1672,12 +1672,52 @@ Serializer.Mutations.Procedure.Caller = new SerializerTestCase( '' + '' + ''); +Serializer.Mutations.Procedure.CollapsedProceduresCallreturn = new SerializerTestCase( + 'CollapsedProceduresCallreturn', + '' + + '' + + 'x' + + '' + + '' + + '' + + '' + + '' + + 'do something' + + 'Describe this function...' + + '' + + '' + + '' + + '' + + '' + + '' + + ''); +Serializer.Mutations.Procedure.CollapsedProceduresCallnoreturn = new SerializerTestCase( + 'CollapsedProceduresCallnoreturn', + '' + + '' + + 'x' + + '' + + '' + + '' + + '' + + '' + + 'do something' + + 'Describe this function...' + + '' + + '' + + '' + + '' + + '' + + '' + + ''); Serializer.Mutations.Procedure.testCases = [ Serializer.Mutations.Procedure.NoMutation, Serializer.Mutations.Procedure.Variables, Serializer.Mutations.Procedure.NoStatements, Serializer.Mutations.Procedure.IfReturn, Serializer.Mutations.Procedure.Caller, + Serializer.Mutations.Procedure.CollapsedProceduresCallreturn, + Serializer.Mutations.Procedure.CollapsedProceduresCallnoreturn, ]; Serializer.Mutations.Procedure.Names = new SerializerTestSuite('Names');