def resolve_parent_refs(super_cseq)
resolved_members = @members.map do |sel|
next sel unless sel.is_a?(Pseudo) && sel.selector
sel.with_selector(sel.selector.resolve_parent_refs(super_cseq, false))
end.flatten
unless (parent = resolved_members.first).is_a?(Parent)
return CommaSequence.new([Sequence.new([SimpleSequence.new(resolved_members, subject?)])])
end
return super_cseq if @members.size == 1 && parent.suffix.nil?
CommaSequence.new(super_cseq.members.map do |super_seq|
members = super_seq.members.dup
newline = members.pop if members.last == "\n"
unless members.last.is_a?(SimpleSequence)
raise Sass::SyntaxError.new("Invalid parent selector for \"#{self}\": \"" +
super_seq.to_s + '"')
end
parent_sub = members.last.members
unless parent.suffix.nil?
parent_sub = parent_sub.dup
parent_sub[-1] = parent_sub.last.dup
case parent_sub.last
when Sass::Selector::Class, Sass::Selector::Id, Sass::Selector::Placeholder
parent_sub[-1] = parent_sub.last.class.new(parent_sub.last.name + parent.suffix)
when Sass::Selector::Element
parent_sub[-1] = parent_sub.last.class.new(
parent_sub.last.name + parent.suffix,
parent_sub.last.namespace)
when Sass::Selector::Pseudo
if parent_sub.last.arg || parent_sub.last.selector
raise Sass::SyntaxError.new("Invalid parent selector for \"#{self}\": \"" +
super_seq.to_s + '"')
end
parent_sub[-1] = Sass::Selector::Pseudo.new(
parent_sub.last.type,
parent_sub.last.name + parent.suffix,
nil, nil)
else
raise Sass::SyntaxError.new("Invalid parent selector for \"#{self}\": \"" +
super_seq.to_s + '"')
end
end
Sequence.new(members[0...-1] +
[SimpleSequence.new(parent_sub + resolved_members[1..-1], subject?)] +
[newline].compact)
end)
end