From d75615d79724816b67100f6dcb08208582745c51 Mon Sep 17 00:00:00 2001 From: KOLANICH Date: Tue, 28 Feb 2023 19:39:40 +0300 Subject: [PATCH 1/2] Fix generation of `for` loops with multiple init statements --- jscodegen/__init__.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/jscodegen/__init__.py b/jscodegen/__init__.py index 8b321f2..4a5b16e 100644 --- a/jscodegen/__init__.py +++ b/jscodegen/__init__.py @@ -77,7 +77,10 @@ def expressionstatement(self, stmt): def forstatement(self, stmt): result = "for (" if stmt['init']: - result += self.generate_expression(stmt['init'], Precedence.Sequence) + if stmt['init']['type'] == "VariableDeclaration": + result += stmt['init']['kind'] + " " + ", ".join(self.generate_statement(d) for d in stmt['init']['declarations']) + else: + result += self.generate_expression(stmt['init'], Precedence.Sequence) result += ";" if stmt['test']: From 21417b8b431be0891f924324839a6578cd2c838d Mon Sep 17 00:00:00 2001 From: KOLANICH Date: Tue, 28 Feb 2023 19:40:27 +0300 Subject: [PATCH 2/2] Add a check to enforce non-losing information in supposedly nonvalid `for each` loops. --- jscodegen/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/jscodegen/__init__.py b/jscodegen/__init__.py index 4a5b16e..ec14c38 100644 --- a/jscodegen/__init__.py +++ b/jscodegen/__init__.py @@ -96,6 +96,8 @@ def forstatement(self, stmt): def forinstatement(self, stmt): if stmt['left']['type'] == "VariableDeclaration": + if len(stmt['left']['declarations']) != 1: + raise Exception("len(stmt['left']['declarations']) must be 1, " + repr(len(stmt['left']['declarations'])) + " given") left = stmt['left']['kind'] + " " + self.generate_statement(stmt['left']['declarations'][0]) else: left = self.generate_expression(stmt['left'], Precedence.Call)