tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

PatternBuilders.js (9960B)


      1 // |reftest| skip
      2 
      3 loadRelativeToScript('Match.js');
      4 
      5 var { Pattern, MatchError } = Match;
      6 
      7 function program(elts) {
      8    return Pattern({ type: "Program", body: elts });
      9 }
     10 function exprStmt(expr) {
     11    return Pattern({ type: "ExpressionStatement", expression: expr });
     12 }
     13 function throwStmt(expr) {
     14    return Pattern({ type: "ThrowStatement", argument: expr });
     15 }
     16 function returnStmt(expr) {
     17    return Pattern({ type: "ReturnStatement", argument: expr });
     18 }
     19 function yieldExpr(expr) {
     20    return Pattern({ type: "YieldExpression", argument: expr });
     21 }
     22 function lit(val) {
     23    return Pattern({ type: "Literal", value: val });
     24 }
     25 function comp(name) {
     26    return Pattern({ type: "ComputedName", name: name });
     27 }
     28 function spread(val) {
     29    return Pattern({ type: "SpreadExpression", expression: val});
     30 }
     31 function optExpr(val) {
     32    return Pattern({ type: "OptionalExpression", expression: val});
     33 }
     34 function delOptExpr(val) {
     35    return Pattern({ type: "DeleteOptionalExpression", expression: val});
     36 }
     37 var thisExpr = Pattern({ type: "ThisExpression" });
     38 function funDecl(id, params, body, defaults=[], rest=null) {
     39    return Pattern({ type: "FunctionDeclaration",
     40                     id: id,
     41                     params: params,
     42                     defaults: defaults,
     43                     body: body,
     44                     rest: rest,
     45                     generator: false });
     46 }
     47 function genFunDecl(style, id, params, body) {
     48    return Pattern({ type: "FunctionDeclaration",
     49                     id: id,
     50                     params: params,
     51                     defaults: [],
     52                     body: body,
     53                     generator: true,
     54                     style: style });
     55 }
     56 function asyncFunDecl(id, params, body) {
     57    return Pattern({ type: "FunctionDeclaration",
     58                     id: id,
     59                     params: params,
     60                     defaults: [],
     61                     body: body,
     62                     generator: false,
     63                     async: true });
     64 }
     65 function varDecl(decls) {
     66    return Pattern({ type: "VariableDeclaration", declarations: decls, kind: "var" });
     67 }
     68 function letDecl(decls) {
     69    return Pattern({ type: "VariableDeclaration", declarations: decls, kind: "let" });
     70 }
     71 function constDecl(decls) {
     72    return Pattern({ type: "VariableDeclaration", declarations: decls, kind: "const" });
     73 }
     74 function ident(name) {
     75    return Pattern({ type: "Identifier", name: name });
     76 }
     77 function dotExpr(obj, id) {
     78    return Pattern({ type: "MemberExpression", computed: false, object: obj, property: id });
     79 }
     80 function memExpr(obj, id) {
     81    return Pattern({ type: "MemberExpression", computed: true, object: obj, property: id });
     82 }
     83 function optDotExpr(obj, id) {
     84    return Pattern({ type: "OptionalMemberExpression", computed: false, object: obj, property: id });
     85 }
     86 function optMemExpr(obj, id) {
     87    return Pattern({ type: "OptionalMemberExpression", computed: true, object: obj, property: id });
     88 }
     89 function forStmt(init, test, update, body) {
     90    return Pattern({ type: "ForStatement", init: init, test: test, update: update, body: body });
     91 }
     92 function forOfStmt(lhs, rhs, body) {
     93    return Pattern({ type: "ForOfStatement", left: lhs, right: rhs, body: body });
     94 }
     95 function forInStmt(lhs, rhs, body) {
     96    return Pattern({ type: "ForInStatement", left: lhs, right: rhs, body: body });
     97 }
     98 function breakStmt(lab) {
     99    return Pattern({ type: "BreakStatement", label: lab });
    100 }
    101 function continueStmt(lab) {
    102    return Pattern({ type: "ContinueStatement", label: lab });
    103 }
    104 function blockStmt(body) {
    105    return Pattern({ type: "BlockStatement", body: body });
    106 }
    107 function literal(val) {
    108    return Pattern({ type: "Literal",  value: val });
    109 }
    110 var emptyStmt = Pattern({ type: "EmptyStatement" });
    111 function ifStmt(test, cons, alt) {
    112    return Pattern({ type: "IfStatement", test: test, alternate: alt, consequent: cons });
    113 }
    114 function labStmt(lab, stmt) {
    115    return Pattern({ type: "LabeledStatement", label: lab, body: stmt });
    116 }
    117 function withStmt(obj, stmt) {
    118    return Pattern({ type: "WithStatement", object: obj, body: stmt });
    119 }
    120 function whileStmt(test, stmt) {
    121    return Pattern({ type: "WhileStatement", test: test, body: stmt });
    122 }
    123 function doStmt(stmt, test) {
    124    return Pattern({ type: "DoWhileStatement", test: test, body: stmt });
    125 }
    126 function switchStmt(disc, cases) {
    127    return Pattern({ type: "SwitchStatement", discriminant: disc, cases: cases });
    128 }
    129 function caseClause(test, stmts) {
    130    return Pattern({ type: "SwitchCase", test: test, consequent: stmts });
    131 }
    132 function defaultClause(stmts) {
    133    return Pattern({ type: "SwitchCase", test: null, consequent: stmts });
    134 }
    135 function catchClause(id, body) {
    136    return Pattern({ type: "CatchClause", param: id, body: body });
    137 }
    138 function tryStmt(body, handler, fin) {
    139    return Pattern({ type: "TryStatement", block: body, handler: handler, finalizer: fin });
    140 }
    141 
    142 function superProp(id) {
    143    return dotExpr(Pattern({ type: "Super" }), id);
    144 }
    145 function superElem(id) {
    146    return memExpr(Pattern({ type: "Super" }), id);
    147 }
    148 
    149 function classStmt(id, heritage, body) {
    150    return Pattern({ type: "ClassStatement",
    151                     id: id,
    152                     superClass: heritage,
    153                     body: body});
    154 }
    155 function classExpr(id, heritage, body) {
    156    return Pattern({ type: "ClassExpression",
    157                     id: id,
    158                     superClass: heritage,
    159                     body: body});
    160 }
    161 function classMethod(id, body, kind, static) {
    162    return Pattern({ type: "ClassMethod",
    163                     name: id,
    164                     body: body,
    165                     kind: kind,
    166                     static: static });
    167 }
    168 function classField(id, init) {
    169    return Pattern({ type: "ClassField",
    170                     name: id,
    171                     init: init });
    172 }
    173 function staticClassBlock(body) {
    174    return Pattern({ type: "StaticClassBlock", body: body });
    175 }
    176 
    177 function funExpr(id, args, body, gen) {
    178    return Pattern({ type: "FunctionExpression",
    179                     id: id,
    180                     params: args,
    181                     body: body,
    182                     generator: false });
    183 }
    184 function genFunExpr(style, id, args, body) {
    185    return Pattern({ type: "FunctionExpression",
    186                     id: id,
    187                     params: args,
    188                     body: body,
    189                     generator: true,
    190                     style: style });
    191 }
    192 function asyncFunExpr(id, args, body) {
    193    return Pattern({ type: "FunctionExpression",
    194                     id: id,
    195                     params: args,
    196                     body: body,
    197                     generator: false,
    198                     async: true });
    199 }
    200 function arrowExpr(args, body) {
    201    return Pattern({ type: "ArrowFunctionExpression",
    202                     params: args,
    203                     body: body });
    204 }
    205 function asyncArrowExpr(isExpression, args, body) {
    206    return Pattern({ type: "ArrowFunctionExpression",
    207                     params: args,
    208                     body: body,
    209                     generator: false,
    210                     async: true,
    211                     expression: isExpression });
    212 }
    213 
    214 function metaProperty(meta, property) {
    215    return Pattern({ type: "MetaProperty",
    216                     meta: meta,
    217                     property: property });
    218 }
    219 function newTarget() {
    220    return metaProperty(ident("new"), ident("target"));
    221 }
    222 
    223 function unExpr(op, arg) {
    224    return Pattern({ type: "UnaryExpression", operator: op, argument: arg });
    225 }
    226 function binExpr(op, left, right) {
    227    return Pattern({ type: "BinaryExpression", operator: op, left: left, right: right });
    228 }
    229 function aExpr(op, left, right) {
    230    return Pattern({ type: "AssignmentExpression", operator: op, left: left, right: right });
    231 }
    232 function updExpr(op, arg, prefix) {
    233    return Pattern({ type: "UpdateExpression", operator: op, argument: arg, prefix: prefix });
    234 }
    235 function logExpr(op, left, right) {
    236    return Pattern({ type: "LogicalExpression", operator: op, left: left, right: right });
    237 }
    238 
    239 function condExpr(test, cons, alt) {
    240    return Pattern({ type: "ConditionalExpression", test: test, consequent: cons, alternate: alt });
    241 }
    242 function seqExpr(exprs) {
    243    return Pattern({ type: "SequenceExpression", expressions: exprs });
    244 }
    245 function newExpr(callee, args) {
    246    return Pattern({ type: "NewExpression", callee: callee, arguments: args });
    247 }
    248 function callExpr(callee, args) {
    249    return Pattern({ type: "CallExpression", callee: callee, arguments: args });
    250 }
    251 function optCallExpr(callee, args) {
    252    return Pattern({ type: "OptionalCallExpression", callee: callee, arguments: args });
    253 }
    254 function superCallExpr(args) {
    255    return callExpr({ type: "Super" }, args);
    256 }
    257 function arrExpr(elts) {
    258    return Pattern({ type: "ArrayExpression", elements: elts });
    259 }
    260 function objExpr(elts) {
    261    return Pattern({ type: "ObjectExpression", properties: elts });
    262 }
    263 function computedName(elts) {
    264    return Pattern({ type: "ComputedName", name: elts });
    265 }
    266 function templateLit(elts) {
    267    return Pattern({ type: "TemplateLiteral", elements: elts });
    268 }
    269 function taggedTemplate(tagPart, templatePart) {
    270    return Pattern({ type: "TaggedTemplate", callee: tagPart, arguments : templatePart });
    271 }
    272 function template(raw, cooked, ...args) {
    273    return Pattern([{ type: "CallSiteObject", raw: raw, cooked: cooked}, ...args]);
    274 }
    275 
    276 function arrPatt(elts) {
    277    return Pattern({ type: "ArrayPattern", elements: elts });
    278 }
    279 function objPatt(elts) {
    280    return Pattern({ type: "ObjectPattern", properties: elts });
    281 }
    282 
    283 function assignElem(target, defaultExpr = null, targetIdent = typeof target == 'string' ? ident(target) : target) {
    284    return defaultExpr ? aExpr('=', targetIdent, defaultExpr) : targetIdent;
    285 }
    286 function assignProp(property, target, defaultExpr = null, shorthand = !target, targetProp = target || ident(property)) {
    287    return Pattern({
    288        type: "Property", key: ident(property), shorthand,
    289        value: defaultExpr ? aExpr('=', targetProp, defaultExpr) : targetProp });
    290 }