docs: static void loadFromIterable(Context cx, Scriptable scope, ScriptableObject set, Object arg1)
      {
          if ((arg1 == null) || Undefined.instance.equals(arg1)) {
              return;
          }
  
          // Call the "[Symbol.iterator]" property as a function.
          Object ito = ScriptRuntime.callIterator(arg1, cx, scope);
          if (Undefined.instance.equals(ito)) {
              // Per spec, ignore if the iterator returns undefined
              return;
          }
  
          // Find the "add" function of our own prototype, since it might have
          // been replaced. Since we're not fully constructed yet, create a dummy instance
          // so that we can get our own prototype.
          ScriptableObject dummy = ensureScriptableObject(cx.newObject(scope, set.getClassName()));
          final Callable add =
              ScriptRuntime.getPropFunctionAndThis(dummy.getPrototype(), "add", cx, scope);
          // Clean up the value left around by the previous function
          ScriptRuntime.lastStoredScriptable(cx);
  
          // Finally, run through all the iterated values and add them!
          try (IteratorLikeIterable it = new IteratorLikeIterable(cx, scope, ito)) {
              for (Object val : it) {
                  final Object finalVal = val == Scriptable.NOT_FOUND ? Undefined.instance : val;
                  add.call(cx, scope, set, new Object[]{finalVal});
              }
          }
      }