public static Cons extractRequiredArgumentValues(StandardObject classtype, PropertyList slotsandvalues) {
    { boolean arraytypeP = StandardObject.arrayTypeSpecifierP(classtype);
      List requiredvalues = List.newList();
      boolean foundP = false;

      if (arraytypeP) {
        ParametricTypeSpecifier.preprocessArrayArguments(((ParametricTypeSpecifier)(classtype)), slotsandvalues);
      }
      { Symbol requiredslotname = null;
        Cons iter000 = StandardObject.typeSpecToClass(classtype).classRequiredSlotNames().theConsList;

        for (;!(iter000 == Stella.NIL); iter000 = iter000.rest) {
          requiredslotname = ((Symbol)(iter000.value));
          foundP = false;
          { Slot slot = null;
            Stella_Object valueref = null;
            Cons iter001 = slotsandvalues.thePlist;

            loop001 : for (;!(iter001 == Stella.NIL); iter001 = iter001.rest.rest) {
              slot = ((Slot)(iter001.value));
              valueref = iter001.rest.value;
              if (slot.slotName == requiredslotname) {
                foundP = true;
                if (arraytypeP) {
                  ParametricTypeSpecifier.evaluateArrayArgumentValue(((ParametricTypeSpecifier)(classtype)), requiredvalues, slot, valueref);
                }
                else {
                  requiredvalues.insertLast(Stella_Object.walkExpressionTree(valueref, slot.computeReturnTypeSpec(classtype), Stella.SYM_STELLA_NEW, false, new Object[1]));
                }
                slotsandvalues.removeAt(slot);
                break loop001;
              }
            }
          }
          if (!(foundP)) {
            { Object old$PrintreadablyP$000 = Stella.$PRINTREADABLYp$.get();

              try {
                Native.setBooleanSpecial(Stella.$PRINTREADABLYp$, true);
                Stella.signalTranslationError();
                if (!(Stella.suppressWarningsP())) {
                  Stella.printErrorContext(">> ERROR: ", Stella.STANDARD_ERROR);
                  {
                    Stella.STANDARD_ERROR.nativeStream.println();
                    Stella.STANDARD_ERROR.nativeStream.println(" Missing required NEW argument: `" + Stella_Object.deUglifyParseTree(requiredslotname) + "'.");
                  }
;
                }

              } finally {
                Stella.$PRINTREADABLYp$.set(old$PrintreadablyP$000);
              }
            }
          }
        }
      }
      return (requiredvalues.theConsList);
    }
  }