(function (tree) { tree.Operation = function (op, operands) { this.op = op.trim(); this.operands = operands; }; tree.Operation.prototype.eval = function (env) { var a = this.operands[0].eval(env), b = this.operands[1].eval(env), temp; if (a instanceof tree.Dimension && b instanceof tree.Color) { if (this.op === '*' || this.op === '+') { temp = b, b = a, a = temp; } else { throw { name: "OperationError", message: "Can't substract or divide a color from a number" }; } } return a.operate(this.op, b); }; tree.operate = function (op, a, b) { switch (op) { case '+': return a + b; case '-': return a - b; case '*': return a * b; case '/': return a / b; } }; })(require('mess/tree'));