gsdlab / clafer

Clafer is a lightweight modeling language
http://clafer.org
MIT License
45 stars 13 forks source link

add the synthetic "root" #57

Closed mantkiew closed 8 years ago

mantkiew commented 10 years ago

Semantically, all top-level concrete clafers in the model are children of a synthetic root clafer. The identifier root is reserved in the same way as this or parent.

The root clafer is mostly needed for referring to top-level clafers when names are ambiguous. For example, in the following model:

test/failing/gi57.cfr

a 
    b ?
b ?
[ some a.b ]
[ some root.b ]   // error 

one can only say a.b to disambiguate. Currently (0.3.7) it is not possible to say root.b to refer to the top-level clafer. The error is

Compile error at line 7 column 13...
Name resolver: 'b' not found within paths:
in context of '"none"'