[Pkg-javascript-commits] [node-acorn-jsx] 340/484: Loose: ES6 import, export.

Bastien Roucariès rouca at moszumanska.debian.org
Sat Aug 19 14:20:53 UTC 2017


This is an automated email from the git hooks/post-receive script.

rouca pushed a commit to branch master
in repository node-acorn-jsx.

commit d4565fed53c387854f51dc18ce3fec7b7150e8ee
Author: Ingvar Stepanyan <me at rreverser.com>
Date:   Tue Oct 28 16:55:30 2014 +0200

    Loose: ES6 import, export.
    
    Removed "kind" from tests for ES6 import/export as it's
    left only for backward compatibility.
---
 acorn_loose.js        | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++
 test/tests-harmony.js | 10 ++----
 2 files changed, 98 insertions(+), 8 deletions(-)

diff --git a/acorn_loose.js b/acorn_loose.js
index 7585b83..dd1ea90 100644
--- a/acorn_loose.js
+++ b/acorn_loose.js
@@ -449,6 +449,12 @@
     case tt._class:
       return parseObj(true, true);
 
+    case tt._import:
+      return parseImport();
+
+    case tt._export:
+      return parseExport();
+
     default:
       var expr = parseExpression();
       if (isDummy(expr)) {
@@ -963,6 +969,96 @@
     return finishNode(node, "ArrowFunctionExpression");
   }
 
+  function parseExport() {
+    var node = startNode();
+    next();
+    node['default'] = eat(tt._default);
+    node.specifiers = node.source = null;
+    if (node['default']) {
+      node.declaration = parseExpression();
+      semicolon();
+    } else if (token.type.keyword) {
+      node.declaration = parseStatement();
+    } else {
+      node.declaration = null;
+      parseSpecifierList(node, "Export");
+    }
+    return finishNode(node, "ExportDeclaration");
+  }
+
+  function parseImport() {
+    var node = startNode();
+    next();
+    if (token.type === tt.string) {
+      node.specifiers = [];
+      node.source = parseExprAtom();
+      node.kind = '';
+    } else {
+      if (token.type === tt.name && token.value !== "from") {
+        var elt = startNode();
+        elt.id = parseIdent();
+        elt.name = null;
+        elt['default'] = true;
+        finishNode(elt, "ImportSpecifier");
+        eat(tt.comma);
+      }
+      parseSpecifierList(node, "Import");
+      var specs = node.specifiers;
+      for (var i = 0; i < specs.length; i++) specs[i]['default'] = false;
+      if (elt) node.specifiers.unshift(elt);
+    }
+    return finishNode(node, "ImportDeclaration");
+  }
+
+  function parseSpecifierList(node, prefix) {
+    var elts = node.specifiers = [];
+    if (token.type === tt.star) {
+      var elt = startNode();
+      next();
+      if (token.type === tt.name && token.value === "as") {
+        next();
+        elt.name = parseIdent();
+      }
+      elts.push(finishNode(elt, prefix + "BatchSpecifier"));
+    } else {
+      var indent = curIndent, line = curLineStart, continuedLine = nextLineStart;
+      pushCx();
+      eat(tt.braceL);
+      if (curLineStart > continuedLine) continuedLine = curLineStart;
+      while (!closes(tt.braceR, indent + (curLineStart <= continuedLine ? 1 : 0), line)) {
+        var elt = startNode();
+        if (token.type === tt.star) {
+          next();
+          if (token.type === tt.name && token.value === "as") {
+            next();
+            elt.name = parseIdent();
+          }
+          finishNode(elt, prefix + "BatchSpecifier");
+        } else {
+          if (token.type === tt.name && token.value === "from") break;
+          elt.id = parseIdent();
+          if (token.type === tt.name && token.value === "as") {
+            next();
+            elt.name = parseIdent();
+          } else {
+            elt.name = null;
+          }
+          finishNode(elt, prefix + "Specifier");
+        }
+        elts.push(elt);
+        eat(tt.comma);
+      }
+      eat(tt.braceR);
+      popCx();
+    }
+    if (token.type === tt.name && token.value === "from") {
+      next();
+      node.source = parseExprAtom();
+    } else {
+      node.source = null;
+    }
+  }
+
   function parseExprList(close, allowEmpty) {
     var indent = curIndent, line = curLineStart, elts = [], continuedLine = nextLineStart;
     next(); // Opening bracket
diff --git a/test/tests-harmony.js b/test/tests-harmony.js
index 84cf2be..00149c1 100644
--- a/test/tests-harmony.js
+++ b/test/tests-harmony.js
@@ -5113,7 +5113,6 @@ test("import $ from \"jquery\"", {
         end: {line: 1, column: 8}
       }
     }],
-    kind: "default",
     source: {
       type: "Literal",
       value: "jquery",
@@ -5176,7 +5175,6 @@ test("import { encrypt, decrypt } from \"crypto\"", {
         }
       }
     ],
-    kind: "named",
     source: {
       type: "Literal",
       value: "crypto",
@@ -5228,7 +5226,6 @@ test("import { encrypt as enc } from \"crypto\"", {
         end: {line: 1, column: 23}
       }
     }],
-    kind: "named",
     source: {
       type: "Literal",
       value: "crypto",
@@ -5333,8 +5330,7 @@ test("import crypto, { decrypt, encrypt as enc } from \"crypto\"", {
       },
       value: "crypto",
       raw: "\"crypto\""
-    },
-    kind: "default"
+    }
   }]
 }, {
   ecmaVersion: 6,
@@ -5371,7 +5367,6 @@ test("import { null as nil } from \"bar\"", {
         end: {line: 1, column: 20}
       }
     }],
-    kind: "named",
     source: {
       type: "Literal",
       value: "bar",
@@ -5431,8 +5426,7 @@ test("import * as crypto from \"crypto\"", {
       },
       value: "crypto",
       raw: "\"crypto\""
-    },
-    kind: "named"
+    }
   }]
 }, {
   ecmaVersion: 6,

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/node-acorn-jsx.git



More information about the Pkg-javascript-commits mailing list