From 6e18008a5d64f467f77c8b72b3c76612a7d3f165 Mon Sep 17 00:00:00 2001 From: Nathan Weizenbaum Date: Thu, 5 Jun 2008 14:31:48 -0700 Subject: [PATCH] Don't error out on empty Sass function arglists. This also means we've got to add a Nil type for Sass. --- lib/sass/constant.rb | 9 ++++++--- lib/sass/constant/literal.rb | 1 + lib/sass/constant/nil.rb | 9 +++++++++ test/sass/engine_test.rb | 4 ++-- 4 files changed, 18 insertions(+), 5 deletions(-) create mode 100644 lib/sass/constant/nil.rb diff --git a/lib/sass/constant.rb b/lib/sass/constant.rb index 9854104d..3b72ceec 100644 --- a/lib/sass/constant.rb +++ b/lib/sass/constant.rb @@ -207,7 +207,10 @@ module Sass #++ def operationalize(value, constants) value = [value] unless value.is_a?(Array) - if value.length == 1 + case value.length + when 0 + Sass::Constant::Nil.new + when 1 value = value[0] if value.is_a? Array operationalize(value, constants) @@ -216,7 +219,7 @@ module Sass else Literal.parse(value) end - elsif value.length == 2 + when 2 if value[0] == :neg Operation.new(Sass::Constant::Number.new('0'), operationalize(value[1], constants), :minus) elsif value[0] == :const @@ -224,7 +227,7 @@ module Sass else raise SyntaxError.new("Constant arithmetic error") end - elsif value.length == 3 + when 3 Operation.new(operationalize(value[0], constants), operationalize(value[2], constants), value[1]) else if SECOND_ORDER.include?(value[1]) && FIRST_ORDER.include?(value[3]) diff --git a/lib/sass/constant/literal.rb b/lib/sass/constant/literal.rb index cb9df479..97514a25 100644 --- a/lib/sass/constant/literal.rb +++ b/lib/sass/constant/literal.rb @@ -4,6 +4,7 @@ module Sass::Constant; class Literal; end; end; # :nodoc: require 'sass/constant/string' require 'sass/constant/number' require 'sass/constant/color' +require 'sass/constant/nil' class Sass::Constant::Literal # :nodoc: # The regular expression matching numbers. diff --git a/lib/sass/constant/nil.rb b/lib/sass/constant/nil.rb new file mode 100644 index 00000000..0d046278 --- /dev/null +++ b/lib/sass/constant/nil.rb @@ -0,0 +1,9 @@ +require 'sass/constant/literal' + +module Sass::Constant # :nodoc: + class Nil < Literal # :nodoc: + def to_s + '' + end + end +end diff --git a/test/sass/engine_test.rb b/test/sass/engine_test.rb index 36f74f31..f1bd187d 100755 --- a/test/sass/engine_test.rb +++ b/test/sass/engine_test.rb @@ -132,8 +132,8 @@ END end def test_default_function - assert_equal("foo {\n bar: url(foo.png); }\n", - render("foo\n bar = url(foo.png)\n")); + assert_equal("foo {\n bar: url(foo.png); }\n", render("foo\n bar = url(foo.png)\n")); + assert_equal("foo {\n bar: url(); }\n", render("foo\n bar = url()\n")); end def test_basic_multiline_selector