Slide 25
Slide 25 text
Implement!
diff --git a/lib/typeprof/core/ast.rb b/lib/typeprof/core/ast.rb
index 28073bb..b2a3d78 100644
--- a/lib/typeprof/core/ast.rb
+++ b/lib/typeprof/core/ast.rb
@@ -170,6 +170,7 @@ module TypeProf::Core
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)
diff --git a/lib/typeprof/core/ast/value.rb
b/lib/typeprof/core/ast/value.rb
index 8e1fe99..e5c8031 100644
--- a/lib/typeprof/core/ast/value.rb
+++ b/lib/typeprof/core/ast/value.rb
@@ -69,6 +69,34 @@ module TypeProf::Core
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)
https://github.com/ruby/typeprof/pull/170