Permalink
Browse files

Fix references to undefined variables in unpickle.

Should fix the Travis build.

Also:

- Shell functions to inspect pickle bytecodes
  • Loading branch information...
Andy Chu
Andy Chu committed Aug 19, 2018
1 parent 03e6001 commit b87cb5e325b84a650ce1d59d3eae85c4862e9b7a
Showing with 33 additions and 47 deletions.
  1. +0 −5 asdl/run.sh
  2. +18 −42 asdl/unpickle.py
  3. +15 −0 scripts/count.sh
View
@@ -61,11 +61,6 @@ py-cpp() {
asdl-cpp $schema _tmp/$(basename $schema).h
}
inspect-pickle() {
# python2 doesn't have this?
python3 -m pickletools asdl/arith.asdl.pickle
}
gen-python() {
local schema=${1:-asdl/arith.asdl}
asdl/gen_python.py $schema
View
@@ -15,6 +15,19 @@
mloads = marshal.loads
# Copied from types.py
class _C:
def _m(self): pass
ClassType = type(_C)
# NOTE: I think INST and OBJ aren't used? We want NEWOBJ.
class _EmptyClass:
pass
# Pickle opcodes. See pickletools.py for extensive docs. The listing
# here is in kind-of alphabetical order of 1-character pickle code.
# pickletools groups them by purpose.
@@ -201,26 +214,17 @@ def load_long(self):
self.append(long(self.readline()[:-1], 0))
dispatch[LONG] = load_long
def load_long1(self):
n = ord(self.read(1))
bytes = self.read(n)
self.append(decode_long(bytes))
dispatch[LONG1] = load_long1
# Commented out because decode_long() depends on _binascii.
#def load_long1(self):
def load_long4(self):
n = mloads('i' + self.read(4))
bytes = self.read(n)
self.append(decode_long(bytes))
dispatch[LONG4] = load_long4
#def load_long4(self):
def load_float(self):
self.append(float(self.readline()[:-1]))
dispatch[FLOAT] = load_float
if 0:
def load_binfloat(self, unpack=struct.unpack):
self.append(unpack('>d', self.read(8))[0])
dispatch[BINFLOAT] = load_binfloat
# Commented out because of struct.unpack.
#def load_binfloat(self):
def load_string(self):
rep = self.readline()[:-1]
@@ -355,34 +359,6 @@ def load_global(self):
self.append(klass)
dispatch[GLOBAL] = load_global
def load_ext1(self):
code = ord(self.read(1))
self.get_extension(code)
dispatch[EXT1] = load_ext1
def load_ext2(self):
code = mloads('i' + self.read(2) + '\000\000')
self.get_extension(code)
dispatch[EXT2] = load_ext2
def load_ext4(self):
code = mloads('i' + self.read(4))
self.get_extension(code)
dispatch[EXT4] = load_ext4
def get_extension(self, code):
nil = []
obj = _extension_cache.get(code, nil)
if obj is not nil:
self.append(obj)
return
key = _inverted_registry.get(code)
if not key:
raise ValueError("unregistered extension code %d" % code)
obj = self.find_class(*key)
_extension_cache[code] = obj
self.append(obj)
def find_class(self, module, name):
# Subclasses may override this
__import__(module)
View
@@ -230,4 +230,19 @@ old-style-classes() {
oil-python-symbols | grep -v '<'
}
show-pickle() {
# python2 doesn't have this?
python3 -m pickletools "$@"
}
# Looks like 18 bytecodes, but PROTO and STOP are trivial.
pickle-bytecodes() {
# NOTE:
# - This regex is very fragile. It might be better to really parse the
# pickle stream.
# - -a is useful for showing what a bytecode does.
show-pickle _devbuild/*_asdl.pickle | egrep -o '[[:space:]][A-Z_]{2,}' | hist
#show-pickle _devbuild/*_asdl.pickle
}
"$@"

0 comments on commit b87cb5e

Please sign in to comment.