svgui/pyjs/pyjs.py
changeset 1743 c3c3d1318130
parent 1742 92932cd370a4
child 1744 69dfdb26f600
equal deleted inserted replaced
1742:92932cd370a4 1743:c3c3d1318130
   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