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');