Plato on Github
Report Home
lang/compiler/parser/signed-expr.js
Maintainability
108.58
Lines of code
48
Difficulty
17.50
Estimated Errors
0.34
Function weight
By Complexity
By SLOC
(function(sc) { "use strict"; require("./parser"); var Syntax = sc.lang.compiler.Syntax; var Token = sc.lang.compiler.Token; var Node = sc.lang.compiler.Node; var Parser = sc.lang.compiler.Parser; /* SignedExpression : PrimaryExpression - PrimaryExpression */ Parser.addParseMethod("SignedExpression", function() { // TODO: fix like this // if (!this.match("-")) { // return this.parsePrimaryExpression(); // } var marker = this.createMarker(); var expr; if (this.match("-")) { this.lex(); var method = Node.createIdentifier("neg"); method = marker.update().apply(method); expr = this.parsePrimaryExpression(); if (isNumber(expr)) { expr.value = "-" + expr.value; } else { expr = Node.createCallExpression(expr, method, { list: [] }, "("); } } else { expr = this.parsePrimaryExpression(); } return marker.update().apply(expr, true); }); function isNumber(node) { if (node.type !== Syntax.Literal) { return false; } var valueType = node.valueType; return valueType === Token.IntegerLiteral || valueType === Token.FloatLiteral; } })(sc);