code: function Expression(op, parameters1) {
              var j, len, len1, m, parameter, ref1, ref2;
              this.parameters = parameters1 != null ? parameters1 : [];
              this.operator = _operator(op);
              this.constant = this.operator.constant === true;
              if (this.constant) {
                  ref1 = this.parameters;
                  for (j = 0, len = ref1.length; j < len; j++) {
                      parameter = ref1[j];
                      if (isExpression(parameter) && !parameter.constant) {
                          this.constant = false;
                          break;
                      }
                  }
              }
              this.vector = this.operator.vector;
              if (this.vector === void 0) {
                  this.vector = false;
                  ref2 = this.parameters;
                  for (m = 0, len1 = ref2.length; m < len1; m++) {
                      parameter = ref2[m];
                      if (isExpression(parameter) && parameter.vector) {
                          this.vector = true;
                          break;
                      }
                  }
              }
              if (this.constant && this.operator.name !== _scalar) {
                  return new Expression('scalar', [this.evaluate(_global)]);
              }
              return;
          }
docs: -------------
  The expressions constructor.  Depending on the operations' constant and
  vector the given paramters might get evaluated here, to save nesting depth.
  
  @param  {String} op             expression's operation name
  @param  {Array}  [parameters]   optional array of parameters
  @return {Expression|void}       expression or an early resolved new instance
  @constructor