git » jacl.git » commit 7af4197

\. (= ...) assignment syntax

author Alan Dipert
2020-02-24 03:16:19 UTC
committer Alan Dipert
2020-02-24 03:16:19 UTC
parent 5bf893d00970ade7db186764edd96fd9eca2446f

\. (= ...) assignment syntax

jacl.js +20 -8

diff --git a/jacl.js b/jacl.js
index 06860f8..b6add60 100644
--- a/jacl.js
+++ b/jacl.js
@@ -2010,15 +2010,27 @@ JACLPKG.intern('.')
         );
       } else if (List.isProperList(op)) {
         const [meth, ...args] = op
-        return Cons.listOf(
-          JACLPKG.intern("%CALL"),
-          Cons.listOf(
+        if (meth.name === '=') {
+          if (args.length !== 1) {
+            throw new Error(`Assignment syntax accepts only one value`);
+          }
+          return Cons.listOf(
             JACLPKG.intern("%JS"),
-            `((~{}).${meth.name})`,
-            form
-          ),
-          ...args
-        )
+            env.context === 'stmt' ? `~{}=~{};\n` : `(~{}=~{})`,
+            form,
+            args[0]
+          );
+        } else {
+          return Cons.listOf(
+            JACLPKG.intern("%CALL"),
+            Cons.listOf(
+              JACLPKG.intern("%JS"),
+              `((~{}).${meth.name})`,
+              form
+            ),
+            ...args
+          );
+        }
       } else {
         throw new Error(`Unknown op: ${op}`);
       }