tor-browser

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

import-meta-expression.js (2234B)


      1 load(libdir + "match.js");
      2 load(libdir + "asserts.js");
      3 
      4 var { Pattern, MatchError } = Match;
      5 
      6 program = (elts) => Pattern({
      7    type: "Program",
      8    body: elts
      9 });
     10 expressionStatement = (expression) => Pattern({
     11    type: "ExpressionStatement",
     12    expression: expression
     13 });
     14 assignmentExpression = (left, operator, right) => Pattern({
     15    type: "AssignmentExpression",
     16    operator: operator,
     17    left: left,
     18    right: right
     19 });
     20 ident = (name) => Pattern({
     21    type: "Identifier",
     22    name: name
     23 });
     24 metaProperty = (meta, property) => Pattern({
     25    type: "MetaProperty",
     26    meta: meta,
     27    property: property
     28 });
     29 memberExpression = (object, property) => Pattern({
     30    type: "MemberExpression",
     31    object: object,
     32    property: property
     33 });
     34 
     35 function parseAsModule(source)
     36 {
     37    return Reflect.parse(source, {target: "module"});
     38 }
     39 
     40 program([
     41    expressionStatement(
     42        metaProperty(
     43            ident("import"),
     44            ident("meta")
     45        )
     46    )
     47 ]).assert(parseAsModule("import.meta;"));
     48 
     49 program([
     50    expressionStatement(
     51        assignmentExpression(
     52            ident("x"),
     53            "=",
     54            metaProperty(
     55                ident("import"),
     56                ident("meta")
     57            )
     58        )
     59    )
     60 ]).assert(parseAsModule("x = import.meta;"));
     61 
     62 program([
     63    expressionStatement(
     64        assignmentExpression(
     65            memberExpression(
     66                metaProperty(
     67                    ident("import"),
     68                    ident("meta")
     69                ),
     70                ident("foo")
     71            ),
     72            "=",
     73            ident("x"),
     74        )
     75    )
     76 ]).assert(parseAsModule("import.meta.foo = x;"));
     77 
     78 function assertModuleParseThrowsSyntaxError(source)
     79 {
     80    assertThrowsInstanceOf(() => parseAsModule(source), SyntaxError);
     81 }
     82 
     83 assertModuleParseThrowsSyntaxError("import");
     84 assertModuleParseThrowsSyntaxError("import.");
     85 assertModuleParseThrowsSyntaxError("import.met");
     86 assertModuleParseThrowsSyntaxError("import.metaa");
     87 assertModuleParseThrowsSyntaxError("x = import");
     88 assertModuleParseThrowsSyntaxError("x = import.");
     89 assertModuleParseThrowsSyntaxError("x = import.met");
     90 assertModuleParseThrowsSyntaxError("x = import.metaa");
     91 assertModuleParseThrowsSyntaxError("import.meta = x");