593 for stmt in node.handlers[0][2]: |
593 for stmt in node.handlers[0][2]: |
594 self._stmt(stmt, current_klass) |
594 self._stmt(stmt, current_klass) |
595 if expr: |
595 if expr: |
596 #print >> self.output, "} else { throw(%s); } " % errName |
596 #print >> self.output, "} else { throw(%s); } " % errName |
597 print >> self.output, "}" |
597 print >> self.output, "}" |
598 if node.else_ != None: |
598 if node.else_ is not None: |
599 print >>self.output, " } finally {" |
599 print >>self.output, " } finally {" |
600 for stmt in node.else_: |
600 for stmt in node.else_: |
601 self._stmt(stmt, current_klass) |
601 self._stmt(stmt, current_klass) |
602 print >>self.output, " }" |
602 print >>self.output, " }" |
603 |
603 |
605 # but incurring a 100% performance penalty. oops. |
605 # but incurring a 100% performance penalty. oops. |
606 def _getattr(self, v, current_klass, use_getattr=False): |
606 def _getattr(self, v, current_klass, use_getattr=False): |
607 attr_name = v.attrname |
607 attr_name = v.attrname |
608 if isinstance(v.expr, ast.Name): |
608 if isinstance(v.expr, ast.Name): |
609 obj = self._name(v.expr, current_klass, return_none_for_module=True) |
609 obj = self._name(v.expr, current_klass, return_none_for_module=True) |
610 if obj == None and v.expr.name in self.module_imports(): |
610 if obj is None and v.expr.name in self.module_imports(): |
611 # XXX TODO: distinguish between module import classes |
611 # XXX TODO: distinguish between module import classes |
612 # and variables. right now, this is a hack to get |
612 # and variables. right now, this is a hack to get |
613 # the sys module working. |
613 # the sys module working. |
614 #if v.expr.name == 'sys': |
614 #if v.expr.name == 'sys': |
615 return v.expr.name+'.'+attr_name |
615 return v.expr.name+'.'+attr_name |
1025 |
1025 |
1026 def get_line_trace(self, node): |
1026 def get_line_trace(self, node): |
1027 lineNum = "Unknown" |
1027 lineNum = "Unknown" |
1028 srcLine = "" |
1028 srcLine = "" |
1029 if hasattr(node, "lineno"): |
1029 if hasattr(node, "lineno"): |
1030 if node.lineno != None: |
1030 if node.lineno is not None: |
1031 lineNum = node.lineno |
1031 lineNum = node.lineno |
1032 srcLine = self.src[min(lineNum, len(self.src))-1] |
1032 srcLine = self.src[min(lineNum, len(self.src))-1] |
1033 srcLine = srcLine.replace('\\', '\\\\') |
1033 srcLine = srcLine.replace('\\', '\\\\') |
1034 srcLine = srcLine.replace('"', '\\"') |
1034 srcLine = srcLine.replace('"', '\\"') |
1035 srcLine = srcLine.replace("'", "\\'") |
1035 srcLine = srcLine.replace("'", "\\'") |
1443 |
1443 |
1444 def _slice(self, node, current_klass): |
1444 def _slice(self, node, current_klass): |
1445 if node.flags == "OP_APPLY": |
1445 if node.flags == "OP_APPLY": |
1446 lower = "null" |
1446 lower = "null" |
1447 upper = "null" |
1447 upper = "null" |
1448 if node.lower != None: |
1448 if node.lower is not None: |
1449 lower = self.expr(node.lower, current_klass) |
1449 lower = self.expr(node.lower, current_klass) |
1450 if node.upper != None: |
1450 if node.upper is not None: |
1451 upper = self.expr(node.upper, current_klass) |
1451 upper = self.expr(node.upper, current_klass) |
1452 return "pyjslib.slice(" + self.expr(node.expr, current_klass) + ", " + lower + ", " + upper + ")" |
1452 return "pyjslib.slice(" + self.expr(node.expr, current_klass) + ", " + lower + ", " + upper + ")" |
1453 else: |
1453 else: |
1454 raise TranslationError("unsupported flag (in _slice)", node) |
1454 raise TranslationError("unsupported flag (in _slice)", node) |
1455 |
1455 |