[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