anchor.diff:    static void addTypeParameterVariances(Object? universe, Object? variances) =>
         _Utils.objectAssign(typeParameterVariances(universe), variances);
   
  -  static JSArray sharedEmptyArray(Object? universe) =>
  -      JS('JSArray', '#.#', universe, RtiUniverseFieldNames.sharedEmptyArray);
  +  static JSArray sharedEmptyArray(Object? universe) => JS('JSUnmodifiableArray',
  +      '#.#', universe, RtiUniverseFieldNames.sharedEmptyArray);
   
     /// Evaluates [recipe] in the global environment.
     static Rti eval(Object? universe, String recipe, bool normalize) {
  
positive.code:     } else if (_Utils.isNum(probe)) {
        int length = _Utils.asInt(probe);
        Rti erased = _lookupErasedRti(universe);
        Object? arguments = JS('', '[]');
        for (int i = 0; i < length; i++) {
          _Utils.arrayPush(arguments, erased);
        }
        Rti interface = _lookupInterfaceRti(universe, cls, arguments);
        JS('', '#.# = #', metadata, cls, interface);
  
negative.code:     var recipes = TypeRule.lookupSupertype(rule, tName);
      if (recipes == null) return false;
      int length = _Utils.arrayLength(recipes);
      Object? supertypeArgs = _Utils.newArrayOrEmpty(length);
      for (int i = 0; i < length; i++) {
        String recipe = _Utils.asString(_Utils.arrayAt(recipes, i));
        Rti supertypeArg = _Universe.evalInEnvironment(universe, s, recipe);
  