diff --git a/lib/expression/node/FunctionAssignmentNode.js b/lib/expression/node/FunctionAssignmentNode.js index 5eb9ad3c7..c2a8d5477 100644 --- a/lib/expression/node/FunctionAssignmentNode.js +++ b/lib/expression/node/FunctionAssignmentNode.js @@ -3,6 +3,7 @@ var Node = require('./Node'); var keywords = require('../keywords'); var latex = require('../../util/latex'); +var operators = require('../operators'); var isString = require('../../util/string').isString; var isArray = Array.isArray; @@ -96,9 +97,15 @@ FunctionAssignmentNode.prototype.clone = function() { * @return {String} str */ FunctionAssignmentNode.prototype.toString = function() { + var precedence = operators.getPrecedence(this); + var exprPrecedence = operators.getPrecedence(this.expr); + + var expr = this.expr.toString(); + if ((exprPrecedence !== null) && (exprPrecedence <= precedence)) { + expr = '(' + expr + ')'; + } return 'function ' + this.name + - '(' + this.params.join(', ') + ') = ' + - this.expr.toString(); + '(' + this.params.join(', ') + ') = ' + expr; }; /** diff --git a/test/expression/node/FunctionAssignmentNode.test.js b/test/expression/node/FunctionAssignmentNode.test.js index e48260c76..6f3cc3c22 100644 --- a/test/expression/node/FunctionAssignmentNode.test.js +++ b/test/expression/node/FunctionAssignmentNode.test.js @@ -6,6 +6,7 @@ var assert = require('assert'), ConstantNode = require('../../../lib/expression/node/ConstantNode'), OperatorNode = require('../../../lib/expression/node/OperatorNode'), FunctionAssignmentNode = require('../../../lib/expression/node/FunctionAssignmentNode'), + AssignmentNode = require('../../../lib/expression/node/AssignmentNode'), RangeNode = require('../../../lib/expression/node/RangeNode'), SymbolNode = require('../../../lib/expression/node/SymbolNode'); @@ -178,6 +179,15 @@ describe('FunctionAssignmentNode', function() { assert.equal(n.toString(), 'function f(x) = 2 + x'); }); + it ('should stringify a FunctionAssignmentNode conataining an AssignmentNode', function () { + var a = new ConstantNode(2); + + var n1 = new AssignmentNode('a', a); + var n = new FunctionAssignmentNode('f', ['x'], n1); + + assert.equal(n.toString(), 'function f(x) = (a = 2)'); + }); + it ('should LaTeX a FunctionAssignmentNode', function() { var a = new ConstantNode(2); var x = new SymbolNode('x');