Skip to content

Commit 665c82c

Browse files
author
hartsantler
committed
coffee backend now passes all regression tests.
1 parent 535ebec commit 665c82c

3 files changed

Lines changed: 23 additions & 7 deletions

File tree

pythonjs/python_to_pythonjs.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -766,8 +766,8 @@ def visit_ClassDef(self, node):
766766
self._catch_attributes = set()
767767
self._instance_attributes[ name ] = self._catch_attributes
768768

769-
770-
writer.write('var(%s, __%s_attrs, __%s_parents)' % (name, name, name))
769+
if not self._with_coffee:
770+
writer.write('var(%s, __%s_attrs, __%s_parents)' % (name, name, name))
771771
writer.write('__%s_attrs = JSObject()' % name)
772772
writer.write('__%s_parents = JSArray()' % name)
773773
writer.write('__%s_properties = JSObject()' % name)
@@ -2322,7 +2322,8 @@ def visit_For(self, node):
23222322
self._instances[ target.id ] = list( self._global_typed_lists[ iter.id ] )[0]
23232323

23242324
vars.append('__iterator__') ## TODO - test nested for loops - this should be __iterator__N
2325-
writer.write('var(%s)' % ','.join(vars))
2325+
if not self._with_coffee:
2326+
writer.write('var(%s)' % ','.join(vars))
23262327

23272328

23282329
is_range = False
@@ -2344,7 +2345,8 @@ def visit_For(self, node):
23442345

23452346
if is_generator:
23462347
iter_name = self.visit(target)
2347-
writer.write('var(%s, __generator__)' %iter_name)
2348+
if not self._with_coffee:
2349+
writer.write('var(%s, __generator__)' %iter_name)
23482350
writer.write('__generator__ = %s' %self.visit(iter))
23492351
writer.write('while __generator__.__done__ != 1:')
23502352
writer.push()
@@ -2355,7 +2357,8 @@ def visit_For(self, node):
23552357

23562358
elif is_range:
23572359
iter_name = target.id
2358-
writer.write('var(%s)' %iter_name)
2360+
if not self._with_coffee:
2361+
writer.write('var(%s)' %iter_name)
23592362
writer.write('%s = %s' %(iter_name, iter_start))
23602363
writer.write('while %s < %s:' %(iter_name, iter_end))
23612364
writer.push()
@@ -2367,7 +2370,8 @@ def visit_For(self, node):
23672370

23682371
writer.pull()
23692372
else:
2370-
writer.write('var(__next__)')
2373+
if not self._with_coffee:
2374+
writer.write('var(__next__)')
23712375
writer.write('__next__ = __get__(__iterator__, "next_fast")')
23722376
writer.write('while __iterator__.index < __iterator__.length:')
23732377

pythonjs/pythonjs_to_coffee.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,14 @@ def _inline_code_helper(self, s):
4646
s = s.replace(' and ', ' && ')
4747
return '`' + s + '`' ## enclose with backticks to inline javascript in coffeescript
4848

49+
def visit_While(self, node):
50+
body = [ 'while %s' %self.visit(node.test)]
51+
self.push()
52+
for line in list( map(self.visit, node.body) ):
53+
body.append( self.indent()+line )
54+
self.pull()
55+
return '\n'.join( body )
56+
4957
def _visit_subscript_ellipsis(self, node):
5058
name = self.visit(node.value)
5159
return '%s.$wrapped' %name
@@ -368,6 +376,9 @@ def _visit_function(self, node):
368376
else:
369377
body.append( self.indent() + self.visit(child) )
370378

379+
if not isinstance(node.body[-1], ast.Return):
380+
body.append( self.indent() + '0' )
381+
371382
buffer += '\n'.join(body)
372383
self.pull()
373384
return buffer

regtests/run.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,8 @@ def translate_js(filename, javascript=False, dart=False, coffee=False):
228228
if serr:
229229
return ''
230230
elif sout:
231-
open('/tmp/coffee-output.js', 'wb').write( sout.encode('utf-8') )
231+
builtins = read(os.path.join("..", "pythonjs.js"))
232+
open('/tmp/coffee-output.js', 'wb').write( (builtins+'\n'+sout).encode('utf-8') )
232233
return sout
233234
else:
234235
return ''

0 commit comments

Comments
 (0)