call method

dynamic call (
  1. List<Node> args
)

Implementation

dynamic call(List<Node> args) {
  // This code is terrible and should be replaced as per this issue...
  // https://github.com/less/less.js/issues/2477

  var _args = args;

  if (_args?.isNotEmpty ?? false) {
    _args.retainWhere((Node item) => item is! Comment);
    _args = _args.map((Node item) {
      if (item is Expression) {
        final subNodes = item.value
          ..retainWhere((Node item) => item is! Comment);

        return subNodes.length == 1 ? subNodes[0] : Expression(subNodes);
      }
      return item;
    }).toList();
  }

  found.init(context, index, currentFileInfo);
  return found.call(_args);

//2.4.0+2
//  functionCaller.prototype.call = function(args) {
//
//      // This code is terrible and should be replaced as per this issue...
//      // https://github.com/less/less.js/issues/2477
//      if (Array.isArray(args)) {
//          args = args.filter(function (item) {
//              if (item.type === "Comment") {
//                  return false;
//              }
//              return true;
//          })
//          .map(function(item) {
//              if (item.type === "Expression") {
//                  var subNodes = item.value.filter(function (item) {
//                      if (item.type === "Comment") {
//                          return false;
//                      }
//                      return true;
//                  });
//                  if (subNodes.length === 1) {
//                      return subNodes[0];
//                  } else {
//                      return new Expression(subNodes);
//                  }
//              }
//              return item;
//          });
//      }
//
//      return this.func.apply(this, args);
//  };
}