Code coverage report for sc/lang/compiler/parser/event-expr.js

Statements: 100% (31 / 31)      Branches: 100% (6 / 6)      Functions: 100% (6 / 6)      Lines: 100% (31 / 31)      Ignored: none     

All files » sc/lang/compiler/parser/ » event-expr.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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 621     1       1 1 1   1 14     1 14   1   1 14   14   14 14   14 14 14     12 4     12   12   12         1 14 4     10 9   8     1 12      
(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("EventExpression", function() {
    return new EventExpressionParser(this).parse();
  });
 
  function EventExpressionParser(parent) {
    Parser.call(this, parent);
  }
  sc.libs.extend(EventExpressionParser, Parser);
 
  EventExpressionParser.prototype.parse = function() {
    var marker = this.createMarker();
 
    this.expect("(");
 
    var innerElements = this.state.innerElements;
    this.state.innerElements = true;
 
    var elements = [];
    while (this.hasNextToken() && !this.match(")")) {
      elements.push(
        this._getKeyElement(), this._getValElement()
      );
      if (this.match(",")) {
        this.lex();
      }
    }
    this.state.innerElements = innerElements;
 
    this.expect(")");
 
    return marker.update().apply(
      Node.createEventExpression(elements)
    );
  };
 
  EventExpressionParser.prototype._getKeyElement = function() {
    if (this.lookahead.type === Token.Label) {
      return this.parseLabelAsSymbol();
    }
 
    var node = this.parseExpression();
    this.expect(":");
 
    return node;
  };
 
  EventExpressionParser.prototype._getValElement = function() {
    return this.parseExpression();
  };
})(sc);