module examples::modfun::Checker
rascal-0.40.16
typepal-0.14.8
Usage
import examples::modfun::Checker;
Source code
http://github.com/usethesource/typepal/src/examples/modfun/Checker.rsc
Dependencies
import examples::modfun::Syntax;
extend examples::fun::Checker;
data AType
data AType
= moduleType(str name)
;
function prettyAType
str prettyAType(moduleType(str name)) = "module(<name>)";
data IdRole
data IdRole
= moduleId()
;
data PathRole
data PathRole
= importPath()
;
function collect
void collect(current: (ModuleDecl) `module <ModId mid> { <Decl* decls> }`, Collector c) {
c.define("<mid>", moduleId(), mid, defType(moduleType("<mid>")));
//c.enterScope(current);
collect(decls, c);
//c.leaveScope(current);
}
void collect(current: (ImportDecl) `import <ModId mid> ;`, Collector c){
c.addPathToDef(mid, {moduleId()}, importPath());
}
void collect(current: (VarDecl) `def <Id id> : <Type tp> = <Expression expression> ;`, Collector c) {
c.define("<id>", variableId(), id, defType(tp));
c.requireEqual(tp, expression, error(current, "Expected initializing expression of type %t, found %t", expression, tp));
collect(tp, expression, c);
}