def interpolate
case @node
when Hash
@defines = (@node[VarDefKey] || {})
interpolated = Hash.new
@node.each do |k, v|
begin
next if k == VarDefKey
interpolated[k] = Interpolator.interpolate(v, self)
rescue UndefinedVariable => e
e.reference.unshift k
raise e
end
end
interpolated
when Array
@node.collect { |v| Interpolator.interpolate(v, self) }
else
begin
each_interpolation(@node) { |varname| value_of(varname) }
rescue UndefinedVariable => e
e.reference.unshift @node.to_str if @node.respond_to?(:to_str)
raise e
end
end
end