public static PropertyList parseMemoizeOptions(Cons options) {
    { PropertyList self000 = PropertyList.newPropertyList();

      self000.thePlist = options;
      { PropertyList givenoptions = self000;
        PropertyList parsedoptions = PropertyList.newPropertyList();

        { Stella_Object key = null;
          Stella_Object value = null;
          Cons iter000 = givenoptions.thePlist;

          for (;!(iter000 == Stella.NIL); iter000 = iter000.rest.rest) {
            key = iter000.value;
            value = iter000.rest.value;
            { GeneralizedSymbol testValue000 = ((GeneralizedSymbol)(key));

              if (testValue000 == Stella.KWD_TIMESTAMPS) {
                if (!Stella_Object.consP(value)) {
                  value = Cons.cons(value, Stella.NIL);
                }
                { boolean testValue001 = false;

                  { boolean alwaysP000 = true;

                    { Stella_Object ts = null;
                      Cons iter001 = ((Cons)(value));

                      loop001 : for (;!(iter001 == Stella.NIL); iter001 = iter001.rest) {
                        ts = iter001.value;
                        if (!Stella_Object.keywordP(ts)) {
                          alwaysP000 = false;
                          break loop001;
                        }
                      }
                    }
                    testValue001 = alwaysP000;
                  }
                  testValue001 = !testValue001;
                  if (testValue001) {
                    { 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(" Illegal :timestamp value in memoize: `" + Stella_Object.deUglifyParseTree(value) + "'.");
                          }
;
                        }

                      } finally {
                        Stella.$PRINTREADABLYp$.set(old$PrintreadablyP$000);
                      }
                    }
                  }
                  else {
                    parsedoptions.insertAt(key, value);
                  }
                }
              }
              else if (testValue000 == Stella.KWD_NAME) {
                if (!Stella_Object.isaP(value, Stella.SGT_STELLA_GENERALIZED_SYMBOL)) {
                  { Object old$PrintreadablyP$001 = 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(" Illegal :name value in memoize: `" + Stella_Object.deUglifyParseTree(value) + "'.");
                        }
;
                      }

                    } finally {
                      Stella.$PRINTREADABLYp$.set(old$PrintreadablyP$001);
                    }
                  }
                }
                else {
                  parsedoptions.insertAt(key, Symbol.makeMemoizationTableSurrogate(Symbol.internDerivedSymbol(((GeneralizedSymbol)(value)), ((GeneralizedSymbol)(value)).symbolName)));
                }
              }
              else if (testValue000 == Stella.KWD_MAX_VALUES) {
                if (!Stella_Object.integerP(value)) {
                  { Object old$PrintreadablyP$002 = 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(" Illegal :max-values value in memoize: `" + Stella_Object.deUglifyParseTree(value) + "'.");
                        }
;
                      }

                    } finally {
                      Stella.$PRINTREADABLYp$.set(old$PrintreadablyP$002);
                    }
                  }
                }
                else {
                  parsedoptions.insertAt(key, value);
                }
              }
              else {
                { Object old$PrintreadablyP$003 = 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(" Illegal memoize option: `" + Stella_Object.deUglifyParseTree(key) + "'.");
                      }
;
                    }

                  } finally {
                    Stella.$PRINTREADABLYp$.set(old$PrintreadablyP$003);
                  }
                }
              }
            }
          }
        }
        return (parsedoptions);
      }
    }
  }