Class: Ibex::Runtime::CST::Cursor
- Inherits:
-
Object
- Object
- Ibex::Runtime::CST::Cursor
- Defined in:
- lib/json5/generated_parser.rb
Overview
Allocation-light cursor over Green elements and absolute offsets. rubocop:disable Naming/PredicateMethod -- cursor movement names follow the public tree-cursor convention.
Instance Attribute Summary collapse
- #green ⇒ Object readonly
- #offset ⇒ Object readonly
Instance Method Summary collapse
- #goto_first_child ⇒ Object
- #goto_next_sibling ⇒ Object
- #goto_parent ⇒ Object
-
#initialize(node) ⇒ Cursor
constructor
A new instance of Cursor.
- #kind ⇒ Object
Constructor Details
#initialize(node) ⇒ Cursor
Returns a new instance of Cursor.
1559 1560 1561 1562 1563 |
# File 'lib/json5/generated_parser.rb', line 1559 def initialize(node) @green = node.green @offset = node.offset @frames = [] #: Array[frame] end |
Instance Attribute Details
#green ⇒ Object (readonly)
1555 1556 1557 |
# File 'lib/json5/generated_parser.rb', line 1555 def green @green end |
#offset ⇒ Object (readonly)
1556 1557 1558 |
# File 'lib/json5/generated_parser.rb', line 1556 def offset @offset end |
Instance Method Details
#goto_first_child ⇒ Object
1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 |
# File 'lib/json5/generated_parser.rb', line 1566 def goto_first_child green = @green return false unless green.is_a?(GreenNode) return false if green.children.empty? parent = green @frames << [parent, 0, @offset] @green = parent.children.fetch(0) true end |
#goto_next_sibling ⇒ Object
1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 |
# File 'lib/json5/generated_parser.rb', line 1578 def goto_next_sibling frame = @frames.last return false unless frame parent, index, parent_offset = frame next_index = index + 1 return false if next_index >= parent.children.length frame[1] = next_index @offset = parent_offset + parent.children.first(next_index).sum(&:full_width) @green = parent.children.fetch(next_index) true end |
#goto_parent ⇒ Object
1593 1594 1595 1596 1597 1598 1599 1600 |
# File 'lib/json5/generated_parser.rb', line 1593 def goto_parent frame = @frames.pop return false unless frame @green = frame.fetch(0) @offset = frame.fetch(2) true end |
#kind ⇒ Object
1603 |
# File 'lib/json5/generated_parser.rb', line 1603 def kind = @green.kind |