Module: Fdlint::Parser::JS::Expr::Expr

Includes:
LeftHand, Operate, Primary
Included in:
JsParser
Defined in:
lib/fdlint/parser/js/expr/expr.rb

Constant Summary

Constants included from Primary

Primary::RESERVED_WORDS, Primary::R_HEX, Primary::R_IDENTIFY, Primary::R_NUMBERIC, Primary::R_REGEXP, Primary::R_STRING, Primary::R_THIS_NULL_BOOLEAN

Instance Method Summary collapse

Methods included from Operate

#expr_operate_not_in=, #expr_operate_not_in?, #parse_expr_add, #parse_expr_bit_and, #parse_expr_bit_or, #parse_expr_bit_xor, #parse_expr_equal, #parse_expr_logical_and, #parse_expr_logical_or, #parse_expr_mul, #parse_expr_postfix, #parse_expr_relation, #parse_expr_shift, #parse_expr_unary

Methods included from LeftHand

#parse_expr_lefthand, #parse_expr_member, #parse_expr_new

Methods included from Primary

#parse_expr_array, #parse_expr_identifier, #parse_expr_literal_hex, #parse_expr_literal_number, #parse_expr_literal_regexp, #parse_expr_literal_string, #parse_expr_literal_this_null_boolean, #parse_expr_object, #parse_expr_object_item, #parse_expr_parentheses, #parse_expr_primary

Instance Method Details

#parse_expr_assignmentObject



22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/fdlint/parser/js/expr/expr.rb', line 22

def parse_expr_assignment
  log 'parse expr assignment'

  expr = parse_expr_condition

  r = /=|\*=|\/=|%=|\+=|-=|<<=|>>=|>>>=|&=|\^=|\|=/
  if expr.left_hand? && check(r)
    op = scan r
    expr = create_element Expression, op.text, expr, parse_expr_assignment
  end
  expr
end

#parse_expr_conditionObject



35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/fdlint/parser/js/expr/expr.rb', line 35

def parse_expr_condition
  log 'parse expr condition'
  expr = parse_expr_logical_or
  if check /\?/
    skip /\?/
    left = parse_expr_assignment
    skip /:/
    right = parse_expr_assignment

    expr = create_element ConditionExpression, expr, left, right
  end
  expr
end

#parse_expr_with_operate(left, pattern = nil, &block) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/fdlint/parser/js/expr/expr.rb', line 49

def parse_expr_with_operate(left, pattern = nil, &block)
  block = block || lambda {
    if check pattern
      skip_empty
      before_pos = scanner_pos
      op = scan pattern
      [op.text, self.send(left), before_pos]
    end
  }

  expr = self.send left
  while (ret = block.call) 
    expr = create_element Expression, ret[0], expr, ret[1], ret[2]
  end 
  expr
end

#parse_expressionObject



17
18
19
20
# File 'lib/fdlint/parser/js/expr/expr.rb', line 17

def parse_expression
  log 'parse expression'
  parse_expr_with_operate :parse_expr_assignment, /,/ 
end