MCPcopy Index your code
hub / github.com/RustPython/RustPython / save_global

Method save_global

Lib/pickle.py:1154–1207  ·  view source on GitHub ↗
(self, obj, name=None)

Source from the content-addressed store, hash-verified

1152 dispatch[frozenset] = save_frozenset
1153
1154 def save_global(self, obj, name=None):
1155 write = self.write
1156 memo = self.memo
1157
1158 if name is None:
1159 name = getattr(obj, '__qualname__', None)
1160 if name is None:
1161 name = obj.__name__
1162
1163 module_name = whichmodule(obj, name)
1164 if self.proto >= 2:
1165 code = _extension_registry.get((module_name, name), _NoValue)
1166 if code is not _NoValue:
1167 if code <= 0xff:
1168 data = pack("<B", code)
1169 if data == b'\0':
1170 # Should never happen in normal circumstances,
1171 # since the type and the value of the code are
1172 # checked in copyreg.add_extension().
1173 raise RuntimeError("extension code 0 is out of range")
1174 write(EXT1 + data)
1175 elif code <= 0xffff:
1176 write(EXT2 + pack("<H", code))
1177 else:
1178 write(EXT4 + pack("<i", code))
1179 return
1180
1181 if self.proto >= 4:
1182 self.save(module_name)
1183 self.save(name)
1184 write(STACK_GLOBAL)
1185 elif '.' in name:
1186 # In protocol < 4, objects with multi-part __qualname__
1187 # are represented as
1188 # getattr(getattr(..., attrname1), attrname2).
1189 dotted_path = name.split('.')
1190 name = dotted_path.pop(0)
1191 save = self.save
1192 for attrname in dotted_path:
1193 save(getattr)
1194 if self.proto < 2:
1195 write(MARK)
1196 self._save_toplevel_by_name(module_name, name)
1197 for attrname in dotted_path:
1198 save(attrname)
1199 if self.proto < 2:
1200 write(TUPLE)
1201 else:
1202 write(TUPLE2)
1203 write(REDUCE)
1204 else:
1205 self._save_toplevel_by_name(module_name, name)
1206
1207 self.memoize(obj)
1208
1209 def _save_toplevel_by_name(self, module_name, name):
1210 if self.proto >= 3:

Callers 2

saveMethod · 0.95
save_typeMethod · 0.95

Calls 10

saveMethod · 0.95
memoizeMethod · 0.95
packFunction · 0.90
getattrFunction · 0.85
whichmoduleFunction · 0.85
writeFunction · 0.70
getMethod · 0.45
splitMethod · 0.45
popMethod · 0.45

Tested by

no test coverage detected