title: Unreachable code in varien/configurable.js Magento
body: <p><br/>
  I was taking a look at the Magento source file to try to understand why I can't move varien/configurable.js whithout throwing an error with another extension, so Google Closure Compiler to shrink it, but it returns an error at line 267:</p>
  
  <blockquote>
    <p>JSC_UNREACHABLE_CODE: unreachable code at line 267 character 8
    if($('product-price-'+this.config.productId)){ ^</p>
  </blockquote>
  
  <p>In particular these is the slice of code:</p>
  
  <pre><code>getAttributeOptions: function(attributeId){
              if(this.config.attributes[attributeId]){
                  return this.config.attributes[attributeId].options;
              }
          },
  </code></pre>
  
  <p>Could someone explain me why it throw out that warning?</p>
  
  <p>This is the whole code:</p>
  
  <pre><code>/**
   * Magento
   *
   * NOTICE OF LICENSE
   *
   * This source file is subject to the Academic Free License (AFL 3.0)
   * that is bundled with this package in the file LICENSE_AFL.txt.
   * It is also available through the world-wide-web at this URL:
   * http://opensource.org/licenses/afl-3.0.php
   * If you did not receive a copy of the license and are unable to
   * obtain it through the world-wide-web, please send an email
   * to license@magentocommerce.com so we can send you a copy immediately.
   *
   * DISCLAIMER
   *
   * Do not edit or add to this file if you wish to upgrade Magento to newer
   * versions in the future. If you wish to customize Magento for your
   * needs please refer to http://www.magentocommerce.com for more information.
   *
   * @category    Varien
   * @package     js
   * @copyright   Copyright (c) 2014 Magento Inc. (http://www.magentocommerce.com)
   * @license     http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
   */
  if (typeof Product == 'undefined') {
      var Product = {};
  }
  
  /**************************** CONFIGURABLE PRODUCT **************************/
  Product.Config = Class.create();
  Product.Config.prototype = {
      initialize: function(config){
          this.config     = config;
          this.taxConfig  = this.config.taxConfig;
          if (config.containerId) {
              this.settings   = $$('#' + config.containerId + ' ' + '.super-attribute-select');
          } else {
              this.settings   = $$('.super-attribute-select');
          }
          this.state      = new Hash();
          this.priceTemplate = new Template(this.config.template);
          this.prices     = config.prices;
  
          // Set default values from config
          if (config.defaultValues) {
              this.values = config.defaultValues;
          }
  
          // Overwrite defaults by url
          var separatorIndex = window.location.href.indexOf('#');
          if (separatorIndex != -1) {
              var paramsStr = window.location.href.substr(separatorIndex+1);
              var urlValues = paramsStr.toQueryParams();
              if (!this.values) {
                  this.values = {};
              }
              for (var i in urlValues) {
                  this.values[i] = urlValues[i];
              }
          }
  
          // Overwrite defaults by inputs values if needed
          if (config.inputsInitialized) {
              this.values = {};
              this.settings.each(function(element) {
                  if (element.value) {
                      var attributeId = element.id.replace(/[a-z]*/, '');
                      this.values[attributeId] = element.value;
                  }
              }.bind(this));
          }
  
          // Put events to check select reloads
          this.settings.each(function(element){
              Event.observe(element, 'change', this.configure.bind(this))
          }.bind(this));
  
          // fill state
          this.settings.each(function(element){
              var attributeId = element.id.replace(/[a-z]*/, '');
              if(attributeId &amp;&amp; this.config.attributes[attributeId]) {
                  element.config = this.config.attributes[attributeId];
                  element.attributeId = attributeId;
                  this.state[attributeId] = false;
              }
          }.bind(this))
  
          // Init settings dropdown
          var childSettings = [];
          for(var i=this.settings.length-1;i&gt;=0;i--){
              var prevSetting = this.settings[i-1] ? this.settings[i-1] : false;
              var nextSetting = this.settings[i+1] ? this.settings[i+1] : false;
              if (i == 0){
                  this.fillSelect(this.settings[i])
              } else {
                  this.settings[i].disabled = true;
              }
              $(this.settings[i]).childSettings = childSettings.clone();
              $(this.settings[i]).prevSetting   = prevSetting;
              $(this.settings[i]).nextSetting   = nextSetting;
              childSettings.push(this.settings[i]);
          }
  
          // Set values to inputs
          this.configureForValues();
          document.observe("dom:loaded", this.configureForValues.bind(this));
      },
  
      configureForValues: function () {
          if (this.values) {
              this.settings.each(function(element){
                  var attributeId = element.attributeId;
                  element.value = (typeof(this.values[attributeId]) == 'undefined')? '' : this.values[attributeId];
                  this.configureElement(element);
              }.bind(this));
          }
      },
  
      configure: function(event){
          var element = Event.element(event);
          this.configureElement(element);
      },
  
      configureElement : function(element) {
          this.reloadOptionLabels(element);
          if(element.value){
              this.state[element.config.id] = element.value;
              if(element.nextSetting){
                  element.nextSetting.disabled = false;
                  this.fillSelect(element.nextSetting);
                  this.resetChildren(element.nextSetting);
              }
          }
          else {
              this.resetChildren(element);
          }
          this.reloadPrice();
      },
  
      reloadOptionLabels: function(element){
          var selectedPrice;
          if(element.options[element.selectedIndex].config &amp;&amp; !this.config.stablePrices){
              selectedPrice = parseFloat(element.options[element.selectedIndex].config.price)
          }
          else{
              selectedPrice = 0;
          }
          for(var i=0;i&lt;element.options.length;i++){
              if(element.options[i].config){
                  element.options[i].text = this.getOptionLabel(element.options[i].config, element.options[i].config.price-selectedPrice);
              }
          }
      },
  
      resetChildren : function(element){
          if(element.childSettings) {
              for(var i=0;i&lt;element.childSettings.length;i++){
                  element.childSettings[i].selectedIndex = 0;
                  element.childSettings[i].disabled = true;
                  if(element.config){
                      this.state[element.config.id] = false;
                  }
              }
          }
      },
  
      fillSelect: function(element){
          var attributeId = element.id.replace(/[a-z]*/, '');
          var options = this.getAttributeOptions(attributeId);
          this.clearSelect(element);
          element.options[0] = new Option('', '');
          element.options[0].innerHTML = this.config.chooseText;
  
          var prevConfig = false;
          if(element.prevSetting){
              prevConfig = element.prevSetting.options[element.prevSetting.selectedIndex];
          }
  
          if(options) {
              var index = 1;
              for(var i=0;i&lt;options.length;i++){
                  var allowedProducts = [];
                  if(prevConfig) {
                      for(var j=0;j&lt;options[i].products.length;j++){
                          if(prevConfig.config.allowedProducts
                              &amp;&amp; prevConfig.config.allowedProducts.indexOf(options[i].products[j])&gt;-1){
                              allowedProducts.push(options[i].products[j]);
                          }
                      }
                  } else {
                      allowedProducts = options[i].products.clone();
                  }
  
                  if(allowedProducts.size()&gt;0){
                      options[i].allowedProducts = allowedProducts;
                      element.options[index] = new Option(this.getOptionLabel(options[i], options[i].price), options[i].id);
                      if (typeof options[i].price != 'undefined') {
                          element.options[index].setAttribute('price', options[i].price);
                      }
                      element.options[index].config = options[i];
                      index++;
                  }
              }
          }
      },
  
      getOptionLabel: function(option, price){
          var price = parseFloat(price);
          if (this.taxConfig.includeTax) {
              var tax = price / (100 + this.taxConfig.defaultTax) * this.taxConfig.defaultTax;
              var excl = price - tax;
              var incl = excl*(1+(this.taxConfig.currentTax/100));
          } else {
              var tax = price * (this.taxConfig.currentTax / 100);
              var excl = price;
              var incl = excl + tax;
          }
  
          if (this.taxConfig.showIncludeTax || this.taxConfig.showBothPrices) {
              price = incl;
          } else {
              price = excl;
          }
  
          var str = option.label;
          if(price){
              if (this.taxConfig.showBothPrices) {
                  str+= ' ' + this.formatPrice(excl, true) + ' (' + this.formatPrice(price, true) + ' ' + this.taxConfig.inclTaxTitle + ')';
              } else {
                  str+= ' ' + this.formatPrice(price, true);
              }
          }
          return str;
      },
  
      formatPrice: function(price, showSign){
          var str = '';
          price = parseFloat(price);
          if(showSign){
              if(price&lt;0){
                  str+= '-';
                  price = -price;
              }
              else{
                  str+= '+';
              }
          }
  
          var roundedPrice = (Math.round(price*100)/100).toString();
  
          if (this.prices &amp;&amp; this.prices[roundedPrice]) {
              str+= this.prices[roundedPrice];
          }
          else {
              str+= this.priceTemplate.evaluate({price:price.toFixed(2)});
          }
          return str;
      },
  
      clearSelect: function(element){
          for(var i=element.options.length-1;i&gt;=0;i--){
              element.remove(i);
          }
      },
  
      getAttributeOptions: function(attributeId){
          if(this.config.attributes[attributeId]){
              return this.config.attributes[attributeId].options;
          }
      },
  
      reloadPrice: function(){
          if (this.config.disablePriceReload) {
              return;
          }
          var price    = 0;
          var oldPrice = 0;
          for(var i=this.settings.length-1;i&gt;=0;i--){
              var selected = this.settings[i].options[this.settings[i].selectedIndex];
              if(selected.config){
                  price    += parseFloat(selected.config.price);
                  oldPrice += parseFloat(selected.config.oldPrice);
              }
          }
  
          optionsPrice.changePrice('config', {'price': price, 'oldPrice': oldPrice});
          optionsPrice.reload();
  
          return price;
  
          if($('product-price-'+this.config.productId)){
              $('product-price-'+this.config.productId).innerHTML = price;
          }
          this.reloadOldPrice();
      },
  
      reloadOldPrice: function(){
          if (this.config.disablePriceReload) {
              return;
          }
          if ($('old-price-'+this.config.productId)) {
  
              var price = parseFloat(this.config.oldPrice);
              for(var i=this.settings.length-1;i&gt;=0;i--){
                  var selected = this.settings[i].options[this.settings[i].selectedIndex];
                  if(selected.config){
                      price+= parseFloat(selected.config.price);
                  }
              }
              if (price &lt; 0)
                  price = 0;
              price = this.formatPrice(price);
  
              if($('old-price-'+this.config.productId)){
                  $('old-price-'+this.config.productId).innerHTML = price;
              }
  
          }
      }
  }
  </code></pre>