43 lines
1.4 KiB
Perl
43 lines
1.4 KiB
Perl
This test checks that an extension point or attribute that expands to another extension
|
|
point or attribute will continue to be expanded recursively until it cannot be
|
|
expanded anymore.
|
|
|
|
It uses the extension and attribute defined in driver.ml which expands:
|
|
- [%ext x ;; ["%ext", "@attr", ...]] into [%ext xx ;; ["@attr", ...]]
|
|
- [%ext x ;; ["@attr", "%ext", ...]] into xx [@attr ["%ext", ...]]
|
|
- [%ext x ;; []] into xx
|
|
- x [@attr ["%ext", "@attr", ...]] into [%ext xx ;; ["@attr", ...]]
|
|
- x [@attr ["@attr", "%ext", ...]] into xx [@attr ["%ext", ...]]
|
|
- x [@attr []] into xx
|
|
|
|
It adds an "x" to the ident to make it clear how many times the attribute has been applied.
|
|
|
|
First check that an extension point is expanded recursively:
|
|
$ cat > test.ml << EOF
|
|
> let () = [%ext a ;; ["%ext"]];;
|
|
> EOF
|
|
$ ./driver.exe test.ml
|
|
let () = axx
|
|
|
|
An attribute is also expanded recursively:
|
|
$ cat > test.ml << EOF
|
|
> let () = b [@attr ["@attr"]];;
|
|
> EOF
|
|
$ ./driver.exe test.ml
|
|
let () = bxx
|
|
|
|
An extension that expands into an attribute and vice versa work:
|
|
$ cat > test.ml << EOF
|
|
> let () = [%ext c ;; ["@attr"]];;
|
|
> let () = d [@attr ["%ext"]];;
|
|
> EOF
|
|
$ ./driver.exe test.ml
|
|
let () = cxx
|
|
let () = dxx
|
|
|
|
Something a bit silly to validate it carries on until it's done:
|
|
$ cat > test.ml << EOF
|
|
> let () = e [@attr ["%ext"; "@attr"; "@attr"; "%ext"; "%ext"]];;
|
|
> EOF
|
|
$ ./driver.exe test.ml
|
|
let () = exxxxxx
|