public static boolean sideEffectFreeExpressionP(Stella_Object tree) {
    if (Stella_Object.safePrimaryType(tree) == Stella.SGT_STELLA_CONS) {
      { Cons tree000 = ((Cons)(tree));

        { GeneralizedSymbol testValue000 = ((GeneralizedSymbol)(tree000.value));

          if ((testValue000 == Stella.SYM_STELLA_TYPED_SYS) ||
              ((testValue000 == Stella.SYM_STELLA_CAST) ||
               (testValue000 == Stella.SYM_STELLA_SAFE_CAST))) {
            return (Stella_Object.sideEffectFreeExpressionP(tree000.rest.value));
          }
          else if ((testValue000 == Stella.SYM_STELLA_AND) ||
              ((testValue000 == Stella.SYM_STELLA_OR) ||
               ((testValue000 == Stella.SYM_STELLA_NOT) ||
                ((testValue000 == Stella.SYM_STELLA_EQp) ||
                 ((testValue000 == Stella.SYM_STELLA_EQLp) ||
                  ((testValue000 == Stella.SYM_STELLA_e) ||
                   ((testValue000 == Stella.SYM_STELLA_i) ||
                    ((testValue000 == Stella.SYM_STELLA__) ||
                     ((testValue000 == Stella.SYM_STELLA_$) ||
                      ((testValue000 == Stella.SYM_STELLA_s) ||
                       ((testValue000 == Stella.SYM_STELLA_g) ||
                        ((testValue000 == Stella.SYM_STELLA_ge) ||
                         ((testValue000 == Stella.SYM_STELLA_l) ||
                          ((testValue000 == Stella.SYM_STELLA_le) ||
                           ((testValue000 == Stella.SYM_STELLA_THE_CODE) ||
                            ((testValue000 == Stella.SYM_STELLA_SYS_SLOT_VALUE) ||
                             (testValue000 == Stella.SYM_STELLA_SYS_SLOT_VALUE_SETTER))))))))))))))))) {
            { boolean alwaysP000 = true;

              { Stella_Object arg = null;
                Cons iter000 = tree000.rest;

                loop000 : for (;!(iter000 == Stella.NIL); iter000 = iter000.rest) {
                  arg = iter000.value;
                  if (!Stella_Object.sideEffectFreeExpressionP(arg)) {
                    alwaysP000 = false;
                    break loop000;
                  }
                }
              }
              { boolean value000 = alwaysP000;

                return (value000);
              }
            }
          }
          else {
          }
        }
      }
    }
    else {
      return (true);
    }
    return (false);
  }