lib/sass/script/parser.rb in sass-3.1.0.alpha.50 vs lib/sass/script/parser.rb in sass-3.1.0.alpha.51

- old
+ new

@@ -110,10 +110,28 @@ rescue Sass::SyntaxError => e e.modify_backtrace :line => @lexer.line, :filename => @options[:filename] raise e end + # Parses the argument list for a function definition. + # + # @return [Array<Script::Node>] The root nodes of the arguments. + # @raise [Sass::SyntaxError] if the argument list isn't valid SassScript + def parse_function_definition_arglist + args = defn_arglist!(true) + assert_done + + args.each do |k, v| + k.options = @options + v.options = @options if v + end + args + rescue Sass::SyntaxError => e + e.modify_backtrace :line => @lexer.line, :filename => @options[:filename] + raise e + end + # Parses a SassScript expression. # # @overload parse(str, line, offset, filename = nil) # @return [Script::Node] The root node of the parse tree # @see Parser#initialize @@ -281,13 +299,19 @@ args, keywords = fn_arglist || [[], {}] assert_tok(:rparen) node(Script::Funcall.new(tok.value, args, keywords)) end - def defn_arglist!(must_have_default) - return [] unless try_tok(:lparen) + def defn_arglist!(must_have_parens) + if must_have_parens + assert_tok(:lparen) + else + return [] unless try_tok(:lparen) + end return [] if try_tok(:rparen) + res = [] + must_have_default = false loop do line = @lexer.line offset = @lexer.offset + 1 c = assert_tok(:const) var = Script::Variable.new(c.value)