From 05253d0766f3516a7cfd299c880e381d6500bbc5 Mon Sep 17 00:00:00 2001 From: Neil Fraser Date: Wed, 15 May 2019 17:03:21 -0700 Subject: [PATCH] Add prefix/suffix to orphaned value blocks. Also respect suppressPrefixSuffix on loops when generating prefix/suffix with continue/break blocks. --- core/generator.js | 10 ++++++++-- generators/dart/loops.js | 2 +- generators/javascript/loops.js | 2 +- generators/lua/loops.js | 2 +- generators/php/loops.js | 2 +- generators/python/loops.js | 2 +- 6 files changed, 13 insertions(+), 7 deletions(-) diff --git a/core/generator.js b/core/generator.js index d07333722..fc59214c1 100644 --- a/core/generator.js +++ b/core/generator.js @@ -116,6 +116,12 @@ Blockly.Generator.prototype.workspaceToCode = function(workspace) { // This block is a naked value. Ask the language's code generator if // it wants to append a semicolon, or something. line = this.scrubNakedValue(line); + if (this.STATEMENT_PREFIX && !block.suppressPrefixSuffix) { + line = this.injectId(this.STATEMENT_PREFIX, block) + line; + } + if (this.STATEMENT_SUFFIX && !block.suppressPrefixSuffix) { + line = line + this.injectId(this.STATEMENT_SUFFIX, block); + } } code.push(line); } @@ -322,11 +328,11 @@ Blockly.Generator.prototype.addLoopTrap = function(branch, block) { branch = this.prefixLines(this.injectId(this.INFINITE_LOOP_TRAP, block), this.INDENT) + branch; } - if (this.STATEMENT_SUFFIX) { + if (this.STATEMENT_SUFFIX && !block.suppressPrefixSuffix) { branch = this.prefixLines(this.injectId(this.STATEMENT_SUFFIX, block), this.INDENT) + branch; } - if (this.STATEMENT_PREFIX) { + if (this.STATEMENT_PREFIX && !block.suppressPrefixSuffix) { branch = branch + this.prefixLines(this.injectId(this.STATEMENT_PREFIX, block), this.INDENT); } diff --git a/generators/dart/loops.js b/generators/dart/loops.js index b24895e97..617768ce6 100644 --- a/generators/dart/loops.js +++ b/generators/dart/loops.js @@ -166,7 +166,7 @@ Blockly.Dart['controls_flow_statements'] = function(block) { if (Blockly.Dart.STATEMENT_PREFIX) { var loop = Blockly.Constants.Loops .CONTROL_FLOW_IN_LOOP_CHECK_MIXIN.getSurroundLoop(block); - if (loop) { + if (loop && !loop.suppressPrefixSuffix) { // Inject loop's statement prefix here since the regular one at the end // of the loop will not get executed if 'continue' is triggered. // In the case of 'break', a prefix is needed due to the loop's suffix. diff --git a/generators/javascript/loops.js b/generators/javascript/loops.js index 3ce74f6b0..79dda13c1 100644 --- a/generators/javascript/loops.js +++ b/generators/javascript/loops.js @@ -180,7 +180,7 @@ Blockly.JavaScript['controls_flow_statements'] = function(block) { if (Blockly.JavaScript.STATEMENT_PREFIX) { var loop = Blockly.Constants.Loops .CONTROL_FLOW_IN_LOOP_CHECK_MIXIN.getSurroundLoop(block); - if (loop) { + if (loop && !loop.suppressPrefixSuffix) { // Inject loop's statement prefix here since the regular one at the end // of the loop will not get executed if 'continue' is triggered. // In the case of 'break', a prefix is needed due to the loop's suffix. diff --git a/generators/lua/loops.js b/generators/lua/loops.js index 7a41d58b9..d229a9402 100644 --- a/generators/lua/loops.js +++ b/generators/lua/loops.js @@ -170,7 +170,7 @@ Blockly.Lua['controls_flow_statements'] = function(block) { if (Blockly.Lua.STATEMENT_PREFIX) { var loop = Blockly.Constants.Loops .CONTROL_FLOW_IN_LOOP_CHECK_MIXIN.getSurroundLoop(block); - if (loop) { + if (loop && !loop.suppressPrefixSuffix) { // Inject loop's statement prefix here since the regular one at the end // of the loop will not get executed if 'continue' is triggered. // In the case of 'break', a prefix is needed due to the loop's suffix. diff --git a/generators/php/loops.js b/generators/php/loops.js index 7b277156e..09d54de0a 100644 --- a/generators/php/loops.js +++ b/generators/php/loops.js @@ -167,7 +167,7 @@ Blockly.PHP['controls_flow_statements'] = function(block) { if (Blockly.PHP.STATEMENT_PREFIX) { var loop = Blockly.Constants.Loops .CONTROL_FLOW_IN_LOOP_CHECK_MIXIN.getSurroundLoop(block); - if (loop) { + if (loop && !loop.suppressPrefixSuffix) { // Inject loop's statement prefix here since the regular one at the end // of the loop will not get executed if 'continue' is triggered. // In the case of 'break', a prefix is needed due to the loop's suffix. diff --git a/generators/python/loops.js b/generators/python/loops.js index f0e31a2cd..4e331f089 100644 --- a/generators/python/loops.js +++ b/generators/python/loops.js @@ -210,7 +210,7 @@ Blockly.Python['controls_flow_statements'] = function(block) { if (Blockly.Python.STATEMENT_PREFIX) { var loop = Blockly.Constants.Loops .CONTROL_FLOW_IN_LOOP_CHECK_MIXIN.getSurroundLoop(block); - if (loop) { + if (loop && !loop.suppressPrefixSuffix) { // Inject loop's statement prefix here since the regular one at the end // of the loop will not get executed if 'continue' is triggered. // In the case of 'break', a prefix is needed due to the loop's suffix.