       isOperator: -> false
       isNumber: -> false
       preceedingSubexpression: -> false
+      clone: -> @ # by default, cloning does nothing
 
     class Expression extends ExpressionComponent
       @buildWithContent: (content)->

      append: (new_last)->
        expr = _.clone(@expression)
        expr.push new_last
        Expression.build(expression: expr)

      replaceLast: (new_last)->
        @withoutLast().append(new_last)


      clone: (new_vals={})->
        data =
          expression: _.map(@expression, (it)-> it.clone())
          is_error: @is_error
          is_open: @is_open
        @klass.build(_.extend({}, data, new_vals))
