20from .server
import request, capability
21from .startup
import in_gdb_thread
36def make_source(fullname, filename):
37 """Return the Source for a given file name.
39 FULLNAME is the full name. This is used as the key.
40 FILENAME is the base name.
43 if fullname
in _source_map:
44 result = _source_map[fullname]
51 if not os.path.exists(fullname):
53 result[
"sourceReference"] = _next_source
56 _id_map[_next_source] = result
59 _source_map[fullname] = result
64def decode_source(source):
65 """Decode a Source object.
67 Finds and returns the filename of a given Source object."""
70 if "sourceReference" not in source:
71 raise Exception(
"either 'path' or 'sourceReference' must appear in Source")
72 ref = source[
"sourceReference"]
74 if ref
not in _id_map:
75 raise Exception(
"no sourceReference " + str(ref))
76 return _id_map[ref][
"path"]
79@request("loadedSources")
80@capability("supportsLoadedSourcesRequest")
81def loaded_sources(**extra):
83 for elt
in gdb.execute_mi(
"-file-list-exec-source-files")[
"files"]:
84 result.append(make_source(elt[
"fullname"], elt[
"file"]))
91def source(*, source=None, sourceReference: int, **extra):
96 source = {
"sourceReference": sourceReference}
97 filename = decode_source(source)
98 with open(filename)
as f: