Plato on Github
Report Home
lang/compiler/codegen/assignment-expr.js
Maintainability
120.31
Lines of code
65
Difficulty
20.14
Estimated Errors
0.47
Function weight
By Complexity
By SLOC
(function(sc) { "use strict"; require("./codegen"); var CodeGen = sc.lang.compiler.CodeGen; CodeGen.addGenerateMethod("AssignmentExpression", function(node) { if (Array.isArray(node.left)) { return generateDestructuringAssignment(this, node); } return generateSimpleAssignment(this, node); }); function generateSimpleAssignment(that, node) { var result = []; var opts = { right: node.right, used: false }; result.push(that.generate(node.left, opts)); if (!opts.used) { result.push(node.operator, that.generate(opts.right)); } return result; } function generateDestructuringAssignment(that, node) { return that.useTemporaryVariable(function(tempVar) { var elements = node.left; var operator = node.operator; var result = [ "(" + tempVar + "=", that.generate(node.right), "," ]; result.push(that.stitchWith(elements, ",", function(item, i) { return generateAssign( that, item, operator, tempVar + ".$('at',[$.Integer(" + i + ")])" ); })); if (node.remain) { result.push(",", generateAssign( that, node.remain, operator, tempVar + ".$('copyToEnd',[$.Integer(" + elements.length + ")])" )); } result.push(",", tempVar + ")"); return result; }); } function generateAssign(that, left, operator, right) { var opts = { right: right, used: false }; var result = [ that.generate(left, opts) ]; if (!opts.used) { result.push(operator, right); } return result; } })(sc);