anchor.diff:  
     // Field accessors for the parser.
     static Object universe(Object? parser) => JS('', '#.u', parser);
  -  static Rti environment(Object? parser) => JS('Rti', '#.e', parser);
  +  static Rti? environment(Object? parser) => JS('Rti|Null', '#.e', parser);
     static String recipe(Object? parser) => JS('String', '#.r', parser);
     static Object stack(Object? parser) => JS('', '#.s', parser);
     static int position(Object? parser) => JS('int', '#.p', parser);
  
positive.code: 
    /// Coerce a stack item into an Rti object. Strings are converted to interface
    /// types, integers are looked up in the type environment.
    static Rti toType(Object? universe, Rti environment, Object? item) {
      if (_Utils.isString(item)) {
        String name = _Utils.asString(item);
        return _Universe._lookupInterfaceRti(
            universe, name, _Universe.sharedEmptyArray(universe));
      } else if (_Utils.isNum(item)) {
        return _Parser.indexToType(universe, environment, _Utils.asInt(item));
      } else {
        return _Utils.asRti(item);
      }
    }
  
    static void toTypes(Object? universe, Rti environment, Object? items) {
      int length = _Utils.arrayLength(items);
      for (int i = 0; i < length; i++) {
        var item = _Utils.arrayAt(items, i);
  
negative.code:       push(
            stack,
            _Universe.evalTypeVariable(
                universe(parser), environment(parser)!, string));
      } else {
        push(stack, string);
      }
  