Skip to content

Commit

Permalink
+ builder: update definition_map to handle endless methods
Browse files Browse the repository at this point in the history
  • Loading branch information
palkan committed Apr 20, 2020
1 parent c64f99d commit fcc3c26
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 9 deletions.
20 changes: 13 additions & 7 deletions lib/parser/builders/default.rb
Original file line number Diff line number Diff line change
Expand Up @@ -648,8 +648,9 @@ def def_module(module_t, name,

def def_method(def_t, name_t, args,
body, end_t)
n(:def, [ value(name_t).to_sym, args, body ],
definition_map(def_t, nil, name_t, end_t))
node = end_t ? :def : :def_e
n(node, [ value(name_t).to_sym, args, body ],
definition_map(def_t, nil, name_t, body, end_t))
end

def def_singleton(def_t, definee, dot_t,
Expand All @@ -662,8 +663,9 @@ def def_singleton(def_t, definee, dot_t,
diagnostic :error, :singleton_literal, nil, definee.loc.expression

else
n(:defs, [ definee, value(name_t).to_sym, args, body ],
definition_map(def_t, dot_t, name_t, end_t))
node = end_t ? :defs : :defs_e
n(node, [ definee, value(name_t).to_sym, args, body ],
definition_map(def_t, dot_t, name_t, body, end_t))
end
end

Expand Down Expand Up @@ -1728,13 +1730,17 @@ def module_definition_map(keyword_t, name_e, operator_t, end_t)

Source::Map::Definition.new(loc(keyword_t),
loc(operator_t), name_l,
loc(end_t))
nil, loc(end_t))
end

def definition_map(keyword_t, operator_t, name_t, end_t)
def definition_map(keyword_t, operator_t, name_t, body_e, end_t)
if body_e
body_l = body_e.loc.expression
end

Source::Map::Definition.new(loc(keyword_t),
loc(operator_t), loc(name_t),
loc(end_t))
body_l, loc(end_t))
end

def send_map(receiver_e, dot_t, selector_t, begin_t=nil, args=[], end_t=nil)
Expand Down
4 changes: 2 additions & 2 deletions lib/parser/source/map/definition.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@ class Map::Definition < Map
attr_reader :name
attr_reader :end

def initialize(keyword_l, operator_l, name_l, end_l)
def initialize(keyword_l, operator_l, name_l, body_l, end_l)
@keyword = keyword_l
@operator = operator_l
@name = name_l
@end = end_l

super(@keyword.join(@end))
super(@keyword.join(@end || body_l))
end
end

Expand Down

0 comments on commit fcc3c26

Please sign in to comment.