third_party/polymer3/bower_components/polymer/lib/mixins/property-effects.js
function marshalArgs(data, args, path, props) {
  let values = [];
  for (let i=0, l=args.length; i<l; i++) {
    let arg = args[i];
    let name = arg.name;
    let v;
    if (arg.literal) {
      v = arg.value;
    } else {
      if (arg.structured) {
        v = get$0(data, name);
        // when data is not stored e.g. `splices`
        if (v === undefined) {
          v = props[name];
        }
      } else {
        v = data[name];
      }
    }
    if (arg.wildcard) {
      // Only send the actual path changed info if the change that
      // caused the observer to run matched the wildcard
      let baseChanged = (name.indexOf(path + '.') === 0);
      let matches = (path.indexOf(name) === 0 && !baseChanged);
      values[i] = {
        path: matches ? path : name,
        value: matches ? props[path] : v,
        base: v
      };
    } else {
      values[i] = v;
    }
  }
  return values;
}
function marshalArgs(data, args, path, props) {
  let values = [];
  for (let i=0, l=args.length; i<l; i++) {
    let arg = args[i];
    let name = arg.name;
    let v;
    if (arg.literal) {
      v = arg.value;
    } else {
      if (arg.structured) {
        v = get$0(data, name);
        // when data is not stored e.g. `splices`
        if (v === undefined) {
          v = props[name];
        }
      } else {
        v = data[name];
      }
    }
    if (arg.wildcard) {
      // Only send the actual path changed info if the change that
      // caused the observer to run matched the wildcard
      let baseChanged = (name.indexOf(path + '.') === 0);
      let matches = (path.indexOf(name) === 0 && !baseChanged);
      values[i] = {
        path: matches ? path : name,
        value: matches ? props[path] : v,
        base: v
      };
    } else {
      values[i] = v;
    }
  }
  return values;
}
function marshalArgs ( data , args , path , props ) { let values = [ ] ; for ( let i = 0 , l = args . length ; i < l ; i ++ ) { let arg = args [ i ] ; let name = arg . name ; let v ; if ( arg . literal ) { v = arg . value ; } else { if ( arg . structured ) { v = get$0 ( data , name ) ; // when data is not stored e.g. `splices` if ( v === undefined ) { v = props [ name ] ; } } else { v = data [ name ] ; } } if ( arg . wildcard ) { // Only send the actual path changed info if the change that // caused the observer to run matched the wildcard let baseChanged = ( name . indexOf ( path + '.' ) === 0 ) ; let matches = ( path . indexOf ( name ) === 0 && ! baseChanged ) ; values [ i ] = { path : matches ? path : name , value : matches ? props [ path ] : v , base : v } ; } else { values [ i ] = v ; } } return values ; }
Gather the argument values for a method specified in the provided array
of argument metadata.

The `path` and `value` arguments are used to fill in wildcard descriptor
when the method is being called as a result of a path notification.

@param {Object} data Instance data storage object to read properties from
@param {!Array<!MethodArg>} args Array of argument metadata
@param {string} path Property/path name that triggered the method effect
@param {Object} props Bag of current property changes
@return {Array<*>} Array of argument values
@private
Gather the argument values for a method specified in the provided array of argument metadata .