anchor.diff:              "Plain CSS functions don't support keyword arguments.", span);
         }
   
  -      var argumentValues = arguments.positional
  -          .map((expression) => expression.accept(this))
  -          .toList();
  -      // TODO: if rest is an arglist that has keywords, error out.
  +      var buffer = new StringBuffer("${callable.name}(");
  +      var first = true;
  +      for (var argument in arguments.positional) {
  +        if (first) {
  +          first = false;
  +        } else {
  +          buffer.write(", ");
  +        }
  +
  +        buffer.write(_evaluateToCss(argument));
  +      }
  +
         var rest = arguments.rest?.accept(this);
  -      if (rest != null) argumentValues.add(rest);
  -      return new SassString("${callable.name}(" +
  -          argumentValues.map((argument) => argument.toCssString()).join(', ') +
  -          ")");
  +      if (rest != null) {
  +        if (!first) buffer.write(", ");
  +        buffer.write(_toCss(rest, arguments.rest.span));
  +      }
  +      buffer.writeCharCode($rparen);
  +
  +      return new SassString(buffer.toString());
       } else {
         return null;
       }
  
positive.code: 
  import 'dart:math' as math;
  
  import 'package:path/path.dart' as p;
  import 'package:source_span/source_span.dart';
  import 'package:stack_trace/stack_trace.dart';
  
negative.code:     return new SassString(
          node.text.contents.map((value) {
            if (value is String) return value;
            var expression = value as Expression;
            var result = expression.accept(this);
            return result is SassString
                ? result.text
                : _toCss(result, expression.span, quote: false);
          }).join(),
          quotes: node.hasQuotes);
    }
  