def run(self, args): """Current line number in source file""" # info line identifier if not self.proc.curframe: self.errmsg("No line number information available.") return if len(args) == 3: # lineinfo returns (item, file, lineno) or (None,) answer = self.lineinfo(args[2]) if answer[0]: item, filename, lineno = answer if not os.path.isfile(filename): filename = Mclifns.search_file(filename, self.core.search_path, self.main_dirname) self.msg('Line %s of "%s" <%s>' % (lineno, filename, item)) return filename = self.core.canonic_filename(self.proc.curframe) if not os.path.isfile(filename): filename = Mclifns.search_file(filename, self.core.search_path, self.main_dirname) pass filename = self.core.canonic_filename(self.proc.curframe) msg1 = 'Line %d of \"%s\"' % (inspect.getlineno( self.proc.curframe), self.core.filename(filename)) msg2 = ('at instruction %d' % self.proc.curframe.f_lasti) if self.proc.event: msg2 += ', %s event' % self.proc.event pass self.msg(Mmisc.wrapped_lines(msg1, msg2, self.settings['width'])) return False
def run(self, args): """Current line number in source file""" # info line identifier if not self.proc.curframe: self.errmsg("No line number information available.") return if len(args) == 3: # lineinfo returns (item, file, lineno) or (None,) answer = self.lineinfo(args[2]) if answer[0]: item, filename, lineno = answer if not os.path.isfile(filename): filename = Mclifns.search_file(filename, self.core.search_path, self.main_dirname) self.msg('Line %s of "%s" <%s>' % (lineno, filename, item)) return filename=self.core.canonic_filename(self.proc.curframe) if not os.path.isfile(filename): filename = Mclifns.search_file(filename, self.core.search_path, self.main_dirname) pass filename = self.core.canonic_filename(self.proc.curframe) msg1 = 'Line %d of \"%s\"' % (inspect.getlineno(self.proc.curframe), self.core.filename(filename)) msg2 = ('at instruction %d' % self.proc.curframe.f_lasti) if self.proc.event: msg2 += ', %s event' % self.proc.event pass self.msg(Mmisc.wrapped_lines(msg1, msg2, self.settings['width'])) return False
def run(self, args): """Current line number in source file""" if not self.proc.curframe: self.errmsg("No line number information available.") return # info line <loc> if len(args) == 0: # No line number. Use current frame line number line_number = inspect.getlineno(self.proc.curframe) filename = self.core.canonic_filename(self.proc.curframe) elif len(args) == 1: # lineinfo returns (item, file, lineno) or (None,) line_number, filename = self.lineinfo(args[2:]) if not filename: self.errmsg("Can't parse '%s'" % args[2]) pass filename = self.core.canonic(filename) else: self.errmsg("Wrong number of arguments.") return if not osp.isfile(filename): filename = search_file(filename, self.core.search_path, self.main_dirname) pass line_info = code_line_info(filename, line_number) msg1 = 'Line %d of "%s"' % ( line_number, self.core.filename(filename), ) if line_info: msg2 = "starts at offset %d of %s and contains %d instructions" % ( line_info[0].offsets[0], line_info[0].name, len(line_info[0].offsets), ) self.msg(wrapped_lines(msg1, msg2, self.settings["width"])) else: self.errmsg("No line information for line %d of %s" % (line_number, self.core.filename(filename))) if line_info and len(line_info) > 1: self.msg( wrapped_lines( "There are multiple line offsets for line number.", "Other line offsets: %s" % ", ".join([ "%s of %s" % (li.offsets[0], li.name) for li in line_info[1:] ]), self.settings["width"], )) return False
def canonic(self, filename): """ Turns `filename' into its canonic representation and returns this string. This allows a user to refer to a given file in one of several equivalent ways. Relative filenames need to be fully resolved, since the current working directory might change over the course of execution. If filename is enclosed in < ... >, then we assume it is one of the bogus internal Python names like <string> which is seen for example when executing "exec cmd". """ if filename == "<" + filename[1:-1] + ">": return filename canonic = self.filename_cache.get(filename) if not canonic: lead_dir = filename.split(os.sep)[0] if lead_dir == os.curdir or lead_dir == os.pardir: # We may have invoked the program from a directory # other than where the program resides. filename is # relative to where the program resides. So make sure # to use that. canonic = os.path.abspath(os.path.join(self.main_dirname, filename)) else: canonic = os.path.abspath(filename) pass if not os.path.isfile(canonic): canonic = Mclifns.search_file(filename, self.search_path, self.main_dirname) # FIXME: is this is right for utter failure? if not canonic: self.filename_cache[filename] = filename return filename pass canonic = os.path.realpath(os.path.normcase(canonic)) self.filename_cache[filename] = canonic canonic = pyficache.unmap_file(canonic) return canonic
def canonic(self, filename): """ Turns `filename' into its canonic representation and returns this string. This allows a user to refer to a given file in one of several equivalent ways. Relative filenames need to be fully resolved, since the current working directory might change over the course of execution. If filename is enclosed in < ... >, then we assume it is one of the bogus internal Python names like <string> which is seen for example when executing "exec cmd". """ if filename == "<" + filename[1:-1] + ">": return filename canonic = self.filename_cache.get(filename) if not canonic: lead_dir = filename.split(os.sep)[0] if lead_dir == os.curdir or lead_dir == os.pardir: # We may have invoked the program from a directory # other than where the program resides. filename is # relative to where the program resides. So make sure # to use that. canonic = os.path.abspath(os.path.join(self.main_dirname, filename)) else: canonic = os.path.abspath(filename) pass if not os.path.isfile(canonic): canonic = Mclifns.search_file(filename, self.search_path, self.main_dirname) # FIXME: is this is right for utter failure? if not canonic: self.filename_cache[filename] = filename return filename pass canonic = os.path.realpath(os.path.normcase(canonic)) self.filename_cache[filename] = canonic return canonic