[Ur] -root option is broken?
Adam Chlipala
adamc at csail.mit.edu
Thu Sep 26 16:29:24 EDT 2013
Your example is close to working properly. There are two "bugs" in your
code, plus a few in the Ur/Web compiler that I've fixed in a patch
pushed to the public Mercurial repo.
First, the bugs in your code:
The semantics of '-root' are such that your example here is compiled as
though it were written in a single file like:
structure Top = struct
structure A = (* ... *)
structure Main = (* ... *)
end
The reference in Main.ur to [Top.A] would be dropped in literally, at
the appropriate point above, making it an attempt to reference module
[Top] recursively in its own definition. Ur/Web doesn't support
recursive module definitions, so this is a variable reference error.
Instead of [Top.A], you'd just write [A].
The other bug in your code is that [Top] is already a module from the
standard library that is included and [open]ed in every project
implicitly, so you wind up with some quite confusing name shadowing!
I've patched the compiler to complain about such cases.
No one had used this '-root' business in quite a while, so I had to make
two more small changes. One was to prevent an overzealous error message
from a check that hadn't been tested with '-root'. The other change was
to make '-root' support relative filesystem paths (as in your example),
rather than just absolute.
On 09/23/2013 05:18 AM, Sergey Mironov wrote:
> Hi. Looks like I can't trigger 'Alternate module naming convention' as
> stated in the Manual. Here is my simple project:
> .
> ├── App.urp
> ├── Makefile
> └── src
> ├── A.ur
> ├── A.urs
> ├── Main.ur
> ├── Main.urs
>
> Main.ur's content is just
>
> fun main {} =
> t<- Top.A.amazingText {};
> return<xml>
> <head>
> <title>The page</title>
> </head>
> <body>
> {t}
> </body>
> </xml>
>
> A.ur contains amazingText function returning some plain xbody. When I
> invoke urweb as follows:
>
> $ urweb -root Top src -dbms sqlite App
>
> it errors with
>
> /home/grwlf/proj/urdesign/src/Main.ur:3:7: (to 3:24) Unbound structure A
>
> but
>
> $ urweb -root Top src -dbms sqlite App -moduleOf src/A
> Top.A
>
> Did I found a bug?
>
More information about the Ur
mailing list