src/Tools/Code/code_scala.ML
changeset 48003 1d11af40b106
parent 47609 b3dab1892cda
child 48072 ace701efe203
equal deleted inserted replaced
48002:6de952f4069f 48003:1d11af40b106
   203     val print_method = str o Library.enclose "`" "`" o deresolve_full;
   203     val print_method = str o Library.enclose "`" "`" o deresolve_full;
   204     fun print_stmt (name, Code_Thingol.Fun (_, (((vs, ty), raw_eqs), _))) =
   204     fun print_stmt (name, Code_Thingol.Fun (_, (((vs, ty), raw_eqs), _))) =
   205           print_def name (vs, ty) (filter (snd o snd) raw_eqs)
   205           print_def name (vs, ty) (filter (snd o snd) raw_eqs)
   206       | print_stmt (name, Code_Thingol.Datatype (_, (vs, cos))) =
   206       | print_stmt (name, Code_Thingol.Datatype (_, (vs, cos))) =
   207           let
   207           let
   208             val tyvars = intro_tyvars vs reserved;
   208             val tyvars = intro_tyvars (map (rpair []) vs) reserved;
   209             fun print_co ((co, _), []) =
   209             fun print_co ((co, _), []) =
   210                   concat [str "final", str "case", str "object", (str o deresolve) co,
   210                   concat [str "final", str "case", str "object", (str o deresolve) co,
   211                     str "extends", applify "[" "]" I NOBR ((str o deresolve) name)
   211                     str "extends", applify "[" "]" I NOBR ((str o deresolve) name)
   212                       (replicate (length vs) (str "Nothing"))]
   212                       (replicate (length vs) (str "Nothing"))]
   213               | print_co ((co, vs_args), tys) =
   213               | print_co ((co, vs_args), tys) =
   215                     (fn (v, arg) => constraint (str v) (print_typ tyvars NOBR arg)) NOBR
   215                     (fn (v, arg) => constraint (str v) (print_typ tyvars NOBR arg)) NOBR
   216                     (applify "[" "]" (str o lookup_tyvar tyvars) NOBR ((concat o map str)
   216                     (applify "[" "]" (str o lookup_tyvar tyvars) NOBR ((concat o map str)
   217                       ["final", "case", "class", deresolve co]) vs_args)
   217                       ["final", "case", "class", deresolve co]) vs_args)
   218                     (Name.invent_names (snd reserved) "a" tys),
   218                     (Name.invent_names (snd reserved) "a" tys),
   219                     str "extends",
   219                     str "extends",
   220                     applify "[" "]" (str o lookup_tyvar tyvars o fst) NOBR
   220                     applify "[" "]" (str o lookup_tyvar tyvars) NOBR
   221                       ((str o deresolve) name) vs
   221                       ((str o deresolve) name) vs
   222                   ];
   222                   ];
   223           in
   223           in
   224             Pretty.chunks (applify "[" "]" (str o prefix "+" o lookup_tyvar tyvars o fst)
   224             Pretty.chunks (applify "[" "]" (str o prefix "+" o lookup_tyvar tyvars)
   225               NOBR ((concat o map str) ["abstract", "sealed", "class", deresolve name]) vs
   225               NOBR ((concat o map str) ["abstract", "sealed", "class", deresolve name]) vs
   226                 :: map print_co cos)
   226                 :: map print_co cos)
   227           end
   227           end
   228       | print_stmt (name, Code_Thingol.Class (_, (v, (super_classes, classparams)))) =
   228       | print_stmt (name, Code_Thingol.Class (_, (v, (super_classes, classparams)))) =
   229           let
   229           let