Skip to content

Commit 298182a

Browse files
committed
Unparser changes.
Added more options to for mode unparsing. Added support for NameConstants. Added support for Byte strings (and also chars as single byte strings).
1 parent b7fc2c7 commit 298182a

1 file changed

Lines changed: 35 additions & 7 deletions

File tree

transpyle/cpp/unparser.py

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ def for_header_to_tuple(target, target_type, iter_) -> t.Tuple[
6565
init = typed_ast3.Assign(targets=[target], value=begin, type_comment=None)
6666
else:
6767
init = typed_ast3.AnnAssign(target=target, annotation=target_type, value=begin, simple=True)
68-
condition = typed_ast3.Compare(left=target, ops=[typed_ast3.Lt()], comparators=[end])
68+
condition = typed_ast3.Expr(typed_ast3.Compare(left=target, ops=[typed_ast3.Lt()], comparators=[end]))
6969
increment = typed_ast3.AugAssign(target=target, op=typed_ast3.Add(), value=step)
7070
return init, condition, increment
7171

@@ -205,12 +205,16 @@ def _AsyncFunctionDef(self, t):
205205

206206
def _For(self, t):
207207
self.fill('for (')
208-
init, cond, increment = for_header_to_tuple(t.target, t.resolved_type_comment, t.iter)
209-
self.dispatch(init)
210-
self.write(', ')
211-
self.dispatch(cond)
212-
self.write(', ')
213-
self.dispatch(increment)
208+
init, cond, increment = for_header_to_tuple(t.target, t.type_comment, t.iter)
209+
#self.dispatch(init)
210+
#self.dispatch(cond)
211+
#self.dispatch(increment)
212+
unparser = Cpp14Unparser()
213+
self.write(unparser.unparse(init).strip('\n\r;)('))
214+
self.write('; ')
215+
self.write(unparser.unparse(cond).strip('\n\r;)('))
216+
self.write('; ')
217+
self.write(unparser.unparse(increment).strip('\n\r;)('))
214218
# self.dispatch(t.iter)
215219
self.write(')')
216220
self.enter()
@@ -308,6 +312,30 @@ def _Comment(self, node):
308312
self.fill('//')
309313
self.write(node.value.s)
310314

315+
def _NameConstant(self, node):
316+
if node.value == 'False':
317+
self.write("false")
318+
elif node.value == 'True':
319+
self.write("true")
320+
elif node.value == 'None':
321+
self.write("null")
322+
else:
323+
self.write(node.value)
324+
325+
def _Str(self, node):
326+
self.write('"')
327+
self.write(node.s.replace('"', '\\"').replace("\0", "\\0").replace("\n", "\\n").replace("\t", "\\t").replace("\r", "\\r"))
328+
self.write('"')
329+
330+
def _Bytes(self, node):
331+
# Char
332+
if len(node.s) == 1:
333+
self.write("'")
334+
self.write(node.s.replace("'", "\\'").replace("\0", "\\0").replace("\n", "\\n").replace("\t", "\\t").replace("\r", "\\r"))
335+
self.write("'")
336+
else:
337+
self._Str(node)
338+
311339
def _unsupported_syntax(self, tree, comment: str = ''):
312340
raise SyntaxError('unparsing {}{} to C++ is not supported'.format(type(tree), comment))
313341

0 commit comments

Comments
 (0)