2008-10-11 11:00:55 +00:00
|
|
|
module Sass
|
|
|
|
module Constant
|
|
|
|
class Funcall
|
|
|
|
attr_reader :name, :args
|
|
|
|
|
|
|
|
def initialize(name, args)
|
|
|
|
@name = name
|
|
|
|
@args = args
|
|
|
|
end
|
|
|
|
|
|
|
|
def to_s
|
|
|
|
perform.to_s
|
|
|
|
end
|
|
|
|
|
|
|
|
def inspect
|
|
|
|
"#{name}(#{args.map {|a| a.inspect}.join(', ')})"
|
|
|
|
end
|
|
|
|
|
|
|
|
def perform
|
|
|
|
unless Functions.public_instance_methods.include?(name) && name !~ /^__/
|
2008-10-11 21:55:45 +00:00
|
|
|
return Constant::String.new("#{name}(#{args.join(', ')})")
|
2008-10-11 11:00:55 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
return Functions.send(name, *args)
|
|
|
|
rescue ArgumentError => e
|
|
|
|
raise e unless e.backtrace.first =~ /:in `#{name}'$/
|
|
|
|
raise Sass::SyntaxError.new("#{e.message} for `#{name}'")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|