Source code

Revision control

Copy as Markdown

Other Tools

// |reftest| skip
loadRelativeToScript('PatternBuilders.js');
function localSrc(src) {
return "(function(){ " + src + " })";
}
function localPatt(patt) {
return program([exprStmt(funExpr(null, [], blockStmt([patt])))]);
}
function blockSrc(src) {
return "(function(){ { " + src + " } })";
}
function blockPatt(patt) {
return program([exprStmt(funExpr(null, [], blockStmt([blockStmt([patt])])))]);
}
function assertBlockStmt(src, patt) {
blockPatt(patt).assert(Reflect.parse(blockSrc(src)));
}
function assertBlockExpr(src, patt) {
assertBlockStmt(src, exprStmt(patt));
}
function assertBlockDecl(src, patt, builder) {
blockPatt(patt).assert(Reflect.parse(blockSrc(src), {builder: builder}));
}
function assertLocalStmt(src, patt) {
localPatt(patt).assert(Reflect.parse(localSrc(src)));
}
function assertLocalExpr(src, patt) {
assertLocalStmt(src, exprStmt(patt));
}
function assertLocalDecl(src, patt) {
localPatt(patt).assert(Reflect.parse(localSrc(src)));
}
function assertGlobalStmt(src, patt, builder) {
program([patt]).assert(Reflect.parse(src, {builder: builder}));
}
function assertStringExpr(src, patt) {
program([exprStmt(patt)]).assert(Reflect.parse(src));
}
function assertGlobalExpr(src, patt, builder) {
program([exprStmt(patt)]).assert(Reflect.parse(src, {builder: builder}));
//assertStmt(src, exprStmt(patt));
}
function assertGlobalDecl(src, patt) {
program([patt]).assert(Reflect.parse(src));
}
function assertProg(src, patt) {
program(patt).assert(Reflect.parse(src));
}
function assertStmt(src, patt) {
assertLocalStmt(src, patt);
assertGlobalStmt(src, patt);
assertBlockStmt(src, patt);
}
function assertInFunctionExpr(src, patt) {
assertLocalExpr(src, patt);
assertBlockExpr(src, patt);
}
function assertExpr(src, patt) {
assertLocalExpr(src, patt);
assertGlobalExpr(src, patt);
assertBlockExpr(src, patt);
}
function assertDecl(src, patt) {
assertLocalDecl(src, patt);
assertGlobalDecl(src, patt);
assertBlockDecl(src, patt);
}
function assertError(src, errorType) {
try {
Reflect.parse(src);
} catch (expected) {
if (!(expected instanceof errorType))
throw expected;
return;
}
throw new Error("expected " + errorType.name + " for " + JSON.stringify(src));
}