Skip to content

Commit

Permalink
Support interpolated symbol node
Browse files Browse the repository at this point in the history
  • Loading branch information
mame committed May 10, 2024
1 parent 03be8b8 commit d183892
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 0 deletions.
1 change: 1 addition & 0 deletions lib/typeprof/core/ast.rb
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,7 @@ def self.create_node(raw_node, lenv)
when :integer_node then IntegerNode.new(raw_node, lenv)
when :float_node then FloatNode.new(raw_node, lenv)
when :symbol_node then SymbolNode.new(raw_node, lenv)
when :interpolated_symbol_node then InterpolatedSymbolNode.new(raw_node, lenv)
when :string_node then StringNode.new(raw_node, lenv, raw_node.content)
when :source_file_node then StringNode.new(raw_node, lenv, "")
when :interpolated_string_node then InterpolatedStringNode.new(raw_node, lenv)
Expand Down
28 changes: 28 additions & 0 deletions lib/typeprof/core/ast/value.rb
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,34 @@ def initialize(raw_node, lenv)
def install0(genv) = Source.new(Type::Symbol.new(genv, @lit))
end

class InterpolatedSymbolNode < Node
def initialize(raw_node, lenv)
super(raw_node, lenv)
@parts = []
raw_node.parts.each do |raw_part|
case raw_part.type
when :string_node
@parts << AST.create_node(raw_part, lenv)
when :embedded_statements_node
@parts << AST.create_node(raw_part.statements, lenv)
else
raise "unknown symbol part: #{ raw_part.type }"
end
end
end

attr_reader :parts

def subnodes = { parts: }

def install0(genv)
@parts.each do |subnode|
subnode.install(genv)
end
Source.new(genv.symbol_type)
end
end

class StringNode < LiteralNode
def initialize(raw_node, lenv, content)
super(raw_node, lenv, content)
Expand Down
15 changes: 15 additions & 0 deletions scenario/misc/dsym.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
## update: test.rb
def foo = "symbol#{ 42 }"

## assert: test.rb
class Object
def foo: -> String
end

## update: test.rb
def foo = :"symbol#{ 42 }"

## assert: test.rb
class Object
def foo: -> Symbol
end

0 comments on commit d183892

Please sign in to comment.