From beb9ba7215932363f87ae4f296d4723e3309eda4 Mon Sep 17 00:00:00 2001 From: Chris Eppstein Date: Sun, 5 Apr 2009 00:44:13 -0700 Subject: [PATCH 01/24] [Haml] Disable the powerset test when set equality is broken (Fixed in Ruby 1.8.7+) --- test/haml/util_test.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/test/haml/util_test.rb b/test/haml/util_test.rb index 710cb62c..834f8482 100644 --- a/test/haml/util_test.rb +++ b/test/haml/util_test.rb @@ -37,6 +37,7 @@ class UtilTest < Test::Unit::TestCase end def test_powerset + return unless Set[Set[]] == Set[Set[]] # There's a bug in Ruby 1.8.6 that breaks nested set equality assert_equal([[].to_set].to_set, powerset([])) assert_equal([[].to_set, [1].to_set].to_set, From 0c7f7b6d4e0fddd2c5018390fabaa42a61a29a5a Mon Sep 17 00:00:00 2001 From: Chris Eppstein Date: Sun, 5 Apr 2009 00:13:08 -0700 Subject: [PATCH 02/24] [Sass] Provide access to the Sass::Engine options from the Sass::Environment and during Sass function evaluation. This enables some cleverness to occur during compilation. --- lib/sass/engine.rb | 2 +- lib/sass/environment.rb | 7 ++++++- lib/sass/script/funcall.rb | 14 +++++++++++++- lib/sass/script/functions.rb | 3 +++ test/sass/functions_test.rb | 2 +- 5 files changed, 24 insertions(+), 4 deletions(-) diff --git a/lib/sass/engine.rb b/lib/sass/engine.rb index 973507e5..acf0cda6 100644 --- a/lib/sass/engine.rb +++ b/lib/sass/engine.rb @@ -94,7 +94,7 @@ module Sass :load_paths => ['.'] }.merge! options @template = template - @environment = Environment.new + @environment = Environment.new(nil, @options) @environment.set_var("important", Script::String.new("!important")) end diff --git a/lib/sass/environment.rb b/lib/sass/environment.rb index 6e46711e..1089445b 100644 --- a/lib/sass/environment.rb +++ b/lib/sass/environment.rb @@ -2,10 +2,15 @@ module Sass class Environment attr_reader :parent - def initialize(parent = nil) + def initialize(parent = nil, options = nil) @vars = {} @mixins = {} @parent = parent + @options = options + end + + def options + @options || (parent && parent.options) || {} end def self.inherited_hash(name) diff --git a/lib/sass/script/funcall.rb b/lib/sass/script/funcall.rb index dbb13c0c..169fab16 100644 --- a/lib/sass/script/funcall.rb +++ b/lib/sass/script/funcall.rb @@ -1,6 +1,18 @@ +require File.join(File.dirname(__FILE__), 'functions') module Sass module Script class Funcall # :nodoc: + class EvaluationContext # :nodoc: + + include Sass::Script::Functions + + attr_reader :options + + def initialize(options) + @options = options + end + end + attr_reader :name, :args def initialize(name, args) @@ -18,7 +30,7 @@ module Sass return Script::String.new("#{name}(#{args.map {|a| a.perform(environment)}.join(', ')})") end - return Functions.send(name, *args) + return EvaluationContext.new(environment.options).send(name, *args) rescue ArgumentError => e raise e unless e.backtrace.first =~ /:in `(#{name}|perform)'$/ raise Sass::SyntaxError.new("#{e.message} for `#{name}'") diff --git a/lib/sass/script/functions.rb b/lib/sass/script/functions.rb index 4af6fa6c..0928ac00 100644 --- a/lib/sass/script/functions.rb +++ b/lib/sass/script/functions.rb @@ -19,6 +19,9 @@ module Sass::Script # and then left as static CSS files. # Any dynamic CSS should be left in