Code coverage report for sc/lang/compiler/parser/identifier.js

Statements: 100% (25 / 25)      Branches: 100% (16 / 16)      Functions: 100% (4 / 4)      Lines: 100% (25 / 25)      Ignored: none     

All files » sc/lang/compiler/parser/ » identifier.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 431     1   1 1 1   1 476 476   476   476 476 476 476 476 11     465         1 255 255 15 15   255     1 193 193      
(function(sc) {
  "use strict";
 
  require("./parser");
 
  var Token = sc.lang.compiler.Token;
  var Node = sc.lang.compiler.Node;
  var Parser = sc.lang.compiler.Parser;
 
  Parser.addParseMethod("Identifier", function(opts) {
    opts = opts || {};
    var marker = this.createMarker();
 
    var node = this.lex();
 
    var err;
    err = err || (node.type !== Token.Identifier);
    err = err || (node.value === "_" && !opts.allowUnderscore);
    err = err || (opts.variable && !isVariable(node.value));
    if (err) {
      this.throwUnexpected(node);
    }
 
    return marker.update().apply(
      Node.createIdentifier(node.value)
    );
  });
 
  Parser.addParseMethod("PrimaryIdentifier", function() {
    var expr = this.parseIdentifier({ allowUnderscore: true });
    if (expr.name === "_") {
      expr.name = "$_" + this.state.underscore.length.toString();
      this.state.underscore.push(expr);
    }
    return expr;
  });
 
  function isVariable(value) {
    var ch = value.charCodeAt(0);
    return 97 <= ch && ch <= 122; // startsWith(/[a-z]/)
  }
})(sc);