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;