| (module | |
| (rec | |
| (type (descriptor 1) (struct)) | |
| (type (describes 0) (struct)) | |
| ) | |
| ) | |
| (assert_invalid | |
| (module | |
| (rec | |
| (type (descriptor 1) (struct)) | |
| (type (struct)) | |
| ) | |
| ) | |
| "descriptor with no matching describes" | |
| ) | |
| (assert_invalid | |
| (module | |
| (rec | |
| (type (struct)) | |
| (type (describes 0) (struct)) | |
| ) | |
| ) | |
| "describes with no matching descriptor" | |
| ) | |
| (assert_invalid | |
| (module | |
| (rec | |
| (type (describes 1) (struct)) | |
| (type (descriptor 0) (struct)) | |
| ) | |
| ) | |
| "forward describes reference" | |
| ) | |
| (assert_invalid | |
| (module | |
| (rec | |
| (type (descriptor 1) (array i8)) | |
| (type (describes 0) (struct)) | |
| ) | |
| ) | |
| "descriptor clause on non-struct type" | |
| ) | |
| (assert_invalid | |
| (module | |
| (rec | |
| (type (descriptor 1) (struct)) | |
| (type (describes 0) (array i8)) | |
| ) | |
| ) | |
| "describes clause on non-struct type" | |
| ) | |
| (module | |
| (rec | |
| (type (shared (descriptor 1) (struct))) | |
| (type (shared (describes 0) (struct))) | |
| ) | |
| ) | |
| (assert_invalid | |
| (module | |
| (rec | |
| (type (shared (descriptor 1) (struct))) | |
| (type (describes 0) (struct)) | |
| ) | |
| ) | |
| "unshared descriptor type" | |
| ) | |
| ;; TODO: allow this? | |
| (assert_invalid | |
| (module | |
| (rec | |
| (type (descriptor 1) (struct)) | |
| (type (shared (describes 0) (struct))) | |
| ) | |
| ) | |
| "unshared described types" | |
| ) | |
| (module | |
| (rec | |
| (type $super (sub (descriptor $super-desc) (struct))) | |
| (type $super-desc (sub (describes $super) (struct))) | |
| ) | |
| (rec | |
| (type $sub (sub $super (descriptor $sub-desc) (struct))) | |
| (type $sub-desc (sub $super-desc (describes $sub) (struct))) | |
| ) | |
| ) | |
| (assert_invalid | |
| (module | |
| (type $super (sub (struct))) | |
| (rec | |
| (type $other (sub (descriptor $super-desc) (struct))) | |
| (type $super-desc (sub (describes $other) (struct))) | |
| ) | |
| (rec | |
| (type $sub (sub $super (descriptor $sub-desc) (struct))) | |
| (type $sub-desc (sub $super-desc (describes $sub) (struct))) | |
| ) | |
| ) | |
| "supertype of descriptor type must describe supertype of described type" | |
| ) | |
| (assert_invalid | |
| (module | |
| (type $super (sub (struct))) | |
| (type $super-desc (sub (struct))) | |
| (rec | |
| (type $sub (sub $super (descriptor $sub-desc) (struct))) | |
| (type $sub-desc (sub $super-desc (describes $sub) (struct))) | |
| ) | |
| ) | |
| "supertype of descriptor must be a descriptor" | |
| ) | |
| (assert_invalid | |
| (module | |
| (rec | |
| (type $other (sub (descriptor $super-desc) (struct))) | |
| (type $super-desc (sub (describes $other) (struct))) | |
| (type $super (sub (descriptor $other-desc) (struct))) | |
| (type $other-desc (sub (describes $super) (struct))) | |
| ) | |
| (rec | |
| (type $sub (sub $super (descriptor $sub-desc) (struct))) | |
| (type $sub-desc (sub $super-desc (describes $sub) (struct))) | |
| ) | |
| ) | |
| "supertype of described type must be described by supertype of descriptor" | |
| ) | |
| (assert_invalid | |
| (module | |
| (rec | |
| (type $super (sub (descriptor $super-desc) (struct))) | |
| (type $super-desc (sub (describes $super) (struct))) | |
| ) | |
| (type $sub (sub $super (struct))) | |
| ) | |
| "supertype of type without descriptor cannot have descriptor" | |
| ) | |
| (assert_invalid | |
| (module | |
| (rec | |
| (type $super (sub (descriptor $super-desc) (struct))) | |
| (type $super-desc (sub (describes $super) (struct))) | |
| ) | |
| (type $sub (sub $super-desc (struct))) | |
| ) | |
| "supertype of non-descriptor type cannot be a descriptor" | |
| ) |