From 6a882ca2e89be70c0deafd8efa8085d34b9fb3cd Mon Sep 17 00:00:00 2001 From: Rachel Fenichel Date: Fri, 23 Sep 2016 18:19:16 -0700 Subject: [PATCH] disallow variables on shadow blocks --- core/field_variable.js | 11 +++++++++++ core/xml.js | 3 +++ 2 files changed, 14 insertions(+) diff --git a/core/field_variable.js b/core/field_variable.js index f93caa150..242cee9f0 100644 --- a/core/field_variable.js +++ b/core/field_variable.js @@ -29,6 +29,7 @@ goog.provide('Blockly.FieldVariable'); goog.require('Blockly.FieldDropdown'); goog.require('Blockly.Msg'); goog.require('Blockly.Variables'); +goog.require('goog.asserts'); goog.require('goog.string'); @@ -73,6 +74,16 @@ Blockly.FieldVariable.prototype.init = function() { } }; +/** + * Attach this field to a block. + * @param {!Blockly.Block} block The block containing this field. + */ +Blockly.FieldVariable.prototype.setSourceBlock = function(block) { + goog.asserts.assert(!block.isShadow(), + 'Variable fields are not allowed to exist on shadow blocks.'); + Blockly.FieldVariable.superClass_.setSourceBlock.call(this, block); +}; + /** * Get the variable's name (use a variableDB to convert into a real name). * Unline a regular dropdown, variables are literal and have no neutral value. diff --git a/core/xml.js b/core/xml.js index 2567560cd..8ee0e24af 100644 --- a/core/xml.js +++ b/core/xml.js @@ -535,6 +535,9 @@ Blockly.Xml.domToBlockHeadless_ = function(xmlBlock, workspace) { goog.asserts.assert(child.isShadow(), 'Shadow block not allowed non-shadow child.'); } + // Ensure this block doesn't have any variable inputs. + goog.asserts.assert(block.getVars().length == 0, + 'Shadow blocks cannot have variable fields.'); block.setShadow(true); } return block;