mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	satisfy the tabnanny (thanks to MH for noticing the problem)
This commit is contained in:
		
							parent
							
								
									0dd7507e51
								
							
						
					
					
						commit
						772dd417f7
					
				
					 4 changed files with 196 additions and 196 deletions
				
			
		|  | @ -11,25 +11,25 @@ def flatten(tup): | ||||||
| 
 | 
 | ||||||
| class Set: | class Set: | ||||||
|     def __init__(self): |     def __init__(self): | ||||||
| 	self.elts = {} |         self.elts = {} | ||||||
|     def __len__(self): |     def __len__(self): | ||||||
|         return len(self.elts) |         return len(self.elts) | ||||||
|     def add(self, elt): |     def add(self, elt): | ||||||
| 	self.elts[elt] = elt |         self.elts[elt] = elt | ||||||
|     def items(self): |     def items(self): | ||||||
| 	return self.elts.keys() |         return self.elts.keys() | ||||||
|     def has_elt(self, elt): |     def has_elt(self, elt): | ||||||
| 	return self.elts.has_key(elt) |         return self.elts.has_key(elt) | ||||||
|     def remove(self, elt): |     def remove(self, elt): | ||||||
|         del self.elts[elt] |         del self.elts[elt] | ||||||
| 
 | 
 | ||||||
| class Stack: | class Stack: | ||||||
|     def __init__(self): |     def __init__(self): | ||||||
| 	self.stack = [] |         self.stack = [] | ||||||
| 	self.pop = self.stack.pop |         self.pop = self.stack.pop | ||||||
|     def __len__(self): |     def __len__(self): | ||||||
|         return len(self.stack) |         return len(self.stack) | ||||||
|     def push(self, elt): |     def push(self, elt): | ||||||
| 	self.stack.append(elt) |         self.stack.append(elt) | ||||||
|     def top(self): |     def top(self): | ||||||
| 	return self.stack[-1] |         return self.stack[-1] | ||||||
|  |  | ||||||
|  | @ -60,7 +60,7 @@ class PyAssembler: | ||||||
|     def __init__(self, args=(), name='?', filename='<?>', |     def __init__(self, args=(), name='?', filename='<?>', | ||||||
|                  docstring=None): |                  docstring=None): | ||||||
|         # XXX why is the default value for flags 3? |         # XXX why is the default value for flags 3? | ||||||
| 	self.insts = [] |         self.insts = [] | ||||||
|         # used by makeCodeObject |         # used by makeCodeObject | ||||||
|         self._getArgCount(args) |         self._getArgCount(args) | ||||||
|         self.code = '' |         self.code = '' | ||||||
|  | @ -107,10 +107,10 @@ def setKWArgs(self): | ||||||
|         self.flags = self.flags | CO_VARKEYWORDS |         self.flags = self.flags | CO_VARKEYWORDS | ||||||
| 
 | 
 | ||||||
|     def getCurInst(self): |     def getCurInst(self): | ||||||
| 	return len(self.insts) |         return len(self.insts) | ||||||
| 
 | 
 | ||||||
|     def getNextInst(self): |     def getNextInst(self): | ||||||
| 	return len(self.insts) + 1 |         return len(self.insts) + 1 | ||||||
| 
 | 
 | ||||||
|     def dump(self, io=sys.stdout): |     def dump(self, io=sys.stdout): | ||||||
|         i = 0 |         i = 0 | ||||||
|  | @ -162,7 +162,7 @@ def makeCodeObject(self): | ||||||
|         # XXX danger! can't pass through here twice |         # XXX danger! can't pass through here twice | ||||||
|         if self.flags & CO_VARKEYWORDS: |         if self.flags & CO_VARKEYWORDS: | ||||||
|             self.argcount = self.argcount - 1 |             self.argcount = self.argcount - 1 | ||||||
| 	stacksize = findDepth(self.insts) |         stacksize = findDepth(self.insts) | ||||||
|         try: |         try: | ||||||
|             co = new.code(self.argcount, nlocals, stacksize, |             co = new.code(self.argcount, nlocals, stacksize, | ||||||
|                           self.flags, lnotab.getCode(), self._getConsts(), |                           self.flags, lnotab.getCode(), self._getConsts(), | ||||||
|  | @ -193,9 +193,9 @@ def _getConsts(self): | ||||||
|         """ |         """ | ||||||
|         l = [] |         l = [] | ||||||
|         for elt in self.consts: |         for elt in self.consts: | ||||||
| 	    # XXX might be clearer to just as isinstance(CodeGen) |             # XXX might be clearer to just as isinstance(CodeGen) | ||||||
| 	    if hasattr(elt, 'asConst'): |             if hasattr(elt, 'asConst'): | ||||||
| 		l.append(elt.asConst()) |                 l.append(elt.asConst()) | ||||||
|             else: |             else: | ||||||
|                 l.append(elt) |                 l.append(elt) | ||||||
|         return tuple(l) |         return tuple(l) | ||||||
|  | @ -286,14 +286,14 @@ def _lookupName(self, name, list): | ||||||
|      |      | ||||||
|     opnum = {} |     opnum = {} | ||||||
|     for num in range(len(dis.opname)): |     for num in range(len(dis.opname)): | ||||||
| 	opnum[dis.opname[num]] = num |         opnum[dis.opname[num]] = num | ||||||
| 
 | 
 | ||||||
|     # this version of emit + arbitrary hooks might work, but it's damn |     # this version of emit + arbitrary hooks might work, but it's damn | ||||||
|     # messy. |     # messy. | ||||||
| 
 | 
 | ||||||
|     def emit(self, *args): |     def emit(self, *args): | ||||||
|         self._emitDispatch(args[0], args[1:]) |         self._emitDispatch(args[0], args[1:]) | ||||||
| 	self.insts.append(args) |         self.insts.append(args) | ||||||
| 
 | 
 | ||||||
|     def _emitDispatch(self, type, args): |     def _emitDispatch(self, type, args): | ||||||
|         for func in self._emit_hooks.get(type, []): |         for func in self._emit_hooks.get(type, []): | ||||||
|  | @ -363,115 +363,115 @@ class StackRef: | ||||||
|     count = 0 |     count = 0 | ||||||
| 
 | 
 | ||||||
|     def __init__(self, id=None, val=None): |     def __init__(self, id=None, val=None): | ||||||
| 	if id is None: |         if id is None: | ||||||
| 	    id = StackRef.count |             id = StackRef.count | ||||||
| 	    StackRef.count = StackRef.count + 1 |             StackRef.count = StackRef.count + 1 | ||||||
| 	self.id = id |         self.id = id | ||||||
| 	self.val = val |         self.val = val | ||||||
| 
 | 
 | ||||||
|     def __repr__(self): |     def __repr__(self): | ||||||
| 	if self.val: |         if self.val: | ||||||
| 	    return "StackRef(val=%d)" % self.val |             return "StackRef(val=%d)" % self.val | ||||||
| 	else: |         else: | ||||||
| 	    return "StackRef(id=%d)" % self.id |             return "StackRef(id=%d)" % self.id | ||||||
| 
 | 
 | ||||||
|     def bind(self, inst): |     def bind(self, inst): | ||||||
| 	self.val = inst |         self.val = inst | ||||||
| 
 | 
 | ||||||
|     def resolve(self): |     def resolve(self): | ||||||
|         if self.val is None: |         if self.val is None: | ||||||
|             print "UNRESOLVE REF", self |             print "UNRESOLVE REF", self | ||||||
|             return 0 |             return 0 | ||||||
| 	return self.val |         return self.val | ||||||
| 
 | 
 | ||||||
| class StackDepthTracker: | class StackDepthTracker: | ||||||
|     # XXX need to keep track of stack depth on jumps |     # XXX need to keep track of stack depth on jumps | ||||||
| 
 | 
 | ||||||
|     def findDepth(self, insts): |     def findDepth(self, insts): | ||||||
| 	depth = 0 |         depth = 0 | ||||||
| 	maxDepth = 0 |         maxDepth = 0 | ||||||
| 	for i in insts: |         for i in insts: | ||||||
| 	    opname = i[0] |             opname = i[0] | ||||||
| 	    delta = self.effect.get(opname, 0) |             delta = self.effect.get(opname, 0) | ||||||
| 	    if delta > 1: |             if delta > 1: | ||||||
| 		depth = depth + delta |                 depth = depth + delta | ||||||
| 	    elif delta < 0: |             elif delta < 0: | ||||||
| 		if depth > maxDepth: |                 if depth > maxDepth: | ||||||
| 		    maxDepth = depth |                     maxDepth = depth | ||||||
| 		depth = depth + delta |                 depth = depth + delta | ||||||
| 	    else: |             else: | ||||||
| 		if depth > maxDepth: |                 if depth > maxDepth: | ||||||
| 		    maxDepth = depth |                     maxDepth = depth | ||||||
| 		# now check patterns |                 # now check patterns | ||||||
| 		for pat, delta in self.patterns: |                 for pat, delta in self.patterns: | ||||||
| 		    if opname[:len(pat)] == pat: |                     if opname[:len(pat)] == pat: | ||||||
| 			depth = depth + delta |                         depth = depth + delta | ||||||
| 			break |                         break | ||||||
| 		# if we still haven't found a match |                 # if we still haven't found a match | ||||||
| 		if delta == 0: |                 if delta == 0: | ||||||
| 		    meth = getattr(self, opname) |                     meth = getattr(self, opname) | ||||||
| 		    depth = depth + meth(i[1]) |                     depth = depth + meth(i[1]) | ||||||
| 	    if depth < 0: |             if depth < 0: | ||||||
| 		depth = 0 |                 depth = 0 | ||||||
| 	return maxDepth |         return maxDepth | ||||||
| 
 | 
 | ||||||
|     effect = { |     effect = { | ||||||
| 	'POP_TOP': -1, |         'POP_TOP': -1, | ||||||
| 	'DUP_TOP': 1, |         'DUP_TOP': 1, | ||||||
| 	'SLICE+1': -1, |         'SLICE+1': -1, | ||||||
| 	'SLICE+2': -1, |         'SLICE+2': -1, | ||||||
| 	'SLICE+3': -2, |         'SLICE+3': -2, | ||||||
| 	'STORE_SLICE+0': -1, |         'STORE_SLICE+0': -1, | ||||||
| 	'STORE_SLICE+1': -2, |         'STORE_SLICE+1': -2, | ||||||
| 	'STORE_SLICE+2': -2, |         'STORE_SLICE+2': -2, | ||||||
| 	'STORE_SLICE+3': -3, |         'STORE_SLICE+3': -3, | ||||||
| 	'DELETE_SLICE+0': -1, |         'DELETE_SLICE+0': -1, | ||||||
| 	'DELETE_SLICE+1': -2, |         'DELETE_SLICE+1': -2, | ||||||
| 	'DELETE_SLICE+2': -2, |         'DELETE_SLICE+2': -2, | ||||||
| 	'DELETE_SLICE+3': -3, |         'DELETE_SLICE+3': -3, | ||||||
| 	'STORE_SUBSCR': -3, |         'STORE_SUBSCR': -3, | ||||||
| 	'DELETE_SUBSCR': -2, |         'DELETE_SUBSCR': -2, | ||||||
| 	# PRINT_EXPR? |         # PRINT_EXPR? | ||||||
| 	'PRINT_ITEM': -1, |         'PRINT_ITEM': -1, | ||||||
| 	'LOAD_LOCALS': 1, |         'LOAD_LOCALS': 1, | ||||||
| 	'RETURN_VALUE': -1, |         'RETURN_VALUE': -1, | ||||||
| 	'EXEC_STMT': -2, |         'EXEC_STMT': -2, | ||||||
| 	'BUILD_CLASS': -2, |         'BUILD_CLASS': -2, | ||||||
| 	'STORE_NAME': -1, |         'STORE_NAME': -1, | ||||||
| 	'STORE_ATTR': -2, |         'STORE_ATTR': -2, | ||||||
| 	'DELETE_ATTR': -1, |         'DELETE_ATTR': -1, | ||||||
| 	'STORE_GLOBAL': -1, |         'STORE_GLOBAL': -1, | ||||||
| 	'BUILD_MAP': 1, |         'BUILD_MAP': 1, | ||||||
| 	'COMPARE_OP': -1, |         'COMPARE_OP': -1, | ||||||
| 	'STORE_FAST': -1, |         'STORE_FAST': -1, | ||||||
| 	} |         } | ||||||
|     # use pattern match |     # use pattern match | ||||||
|     patterns = [ |     patterns = [ | ||||||
| 	('BINARY_', -1), |         ('BINARY_', -1), | ||||||
| 	('LOAD_', 1), |         ('LOAD_', 1), | ||||||
| 	('IMPORT_', 1), |         ('IMPORT_', 1), | ||||||
| 	] |         ] | ||||||
|     # special cases |     # special cases | ||||||
| 
 | 
 | ||||||
|     #: UNPACK_TUPLE, UNPACK_LIST, BUILD_TUPLE, |     #: UNPACK_TUPLE, UNPACK_LIST, BUILD_TUPLE, | ||||||
|     # BUILD_LIST, CALL_FUNCTION, MAKE_FUNCTION, BUILD_SLICE |     # BUILD_LIST, CALL_FUNCTION, MAKE_FUNCTION, BUILD_SLICE | ||||||
|     def UNPACK_TUPLE(self, count): |     def UNPACK_TUPLE(self, count): | ||||||
| 	return count |         return count | ||||||
|     def UNPACK_LIST(self, count): |     def UNPACK_LIST(self, count): | ||||||
| 	return count |         return count | ||||||
|     def BUILD_TUPLE(self, count): |     def BUILD_TUPLE(self, count): | ||||||
| 	return -count |         return -count | ||||||
|     def BUILD_LIST(self, count): |     def BUILD_LIST(self, count): | ||||||
| 	return -count |         return -count | ||||||
|     def CALL_FUNCTION(self, argc): |     def CALL_FUNCTION(self, argc): | ||||||
| 	hi, lo = divmod(argc, 256) |         hi, lo = divmod(argc, 256) | ||||||
| 	return lo + hi * 2 |         return lo + hi * 2 | ||||||
|     def MAKE_FUNCTION(self, argc): |     def MAKE_FUNCTION(self, argc): | ||||||
| 	return -argc |         return -argc | ||||||
|     def BUILD_SLICE(self, argc): |     def BUILD_SLICE(self, argc): | ||||||
| 	if argc == 2: |         if argc == 2: | ||||||
| 	    return -1 |             return -1 | ||||||
| 	elif argc == 3: |         elif argc == 3: | ||||||
| 	    return -2 |             return -2 | ||||||
|      |      | ||||||
| findDepth = StackDepthTracker().findDepth | findDepth = StackDepthTracker().findDepth | ||||||
|  |  | ||||||
|  | @ -11,25 +11,25 @@ def flatten(tup): | ||||||
| 
 | 
 | ||||||
| class Set: | class Set: | ||||||
|     def __init__(self): |     def __init__(self): | ||||||
| 	self.elts = {} |         self.elts = {} | ||||||
|     def __len__(self): |     def __len__(self): | ||||||
|         return len(self.elts) |         return len(self.elts) | ||||||
|     def add(self, elt): |     def add(self, elt): | ||||||
| 	self.elts[elt] = elt |         self.elts[elt] = elt | ||||||
|     def items(self): |     def items(self): | ||||||
| 	return self.elts.keys() |         return self.elts.keys() | ||||||
|     def has_elt(self, elt): |     def has_elt(self, elt): | ||||||
| 	return self.elts.has_key(elt) |         return self.elts.has_key(elt) | ||||||
|     def remove(self, elt): |     def remove(self, elt): | ||||||
|         del self.elts[elt] |         del self.elts[elt] | ||||||
| 
 | 
 | ||||||
| class Stack: | class Stack: | ||||||
|     def __init__(self): |     def __init__(self): | ||||||
| 	self.stack = [] |         self.stack = [] | ||||||
| 	self.pop = self.stack.pop |         self.pop = self.stack.pop | ||||||
|     def __len__(self): |     def __len__(self): | ||||||
|         return len(self.stack) |         return len(self.stack) | ||||||
|     def push(self, elt): |     def push(self, elt): | ||||||
| 	self.stack.append(elt) |         self.stack.append(elt) | ||||||
|     def top(self): |     def top(self): | ||||||
| 	return self.stack[-1] |         return self.stack[-1] | ||||||
|  |  | ||||||
|  | @ -60,7 +60,7 @@ class PyAssembler: | ||||||
|     def __init__(self, args=(), name='?', filename='<?>', |     def __init__(self, args=(), name='?', filename='<?>', | ||||||
|                  docstring=None): |                  docstring=None): | ||||||
|         # XXX why is the default value for flags 3? |         # XXX why is the default value for flags 3? | ||||||
| 	self.insts = [] |         self.insts = [] | ||||||
|         # used by makeCodeObject |         # used by makeCodeObject | ||||||
|         self._getArgCount(args) |         self._getArgCount(args) | ||||||
|         self.code = '' |         self.code = '' | ||||||
|  | @ -107,10 +107,10 @@ def setKWArgs(self): | ||||||
|         self.flags = self.flags | CO_VARKEYWORDS |         self.flags = self.flags | CO_VARKEYWORDS | ||||||
| 
 | 
 | ||||||
|     def getCurInst(self): |     def getCurInst(self): | ||||||
| 	return len(self.insts) |         return len(self.insts) | ||||||
| 
 | 
 | ||||||
|     def getNextInst(self): |     def getNextInst(self): | ||||||
| 	return len(self.insts) + 1 |         return len(self.insts) + 1 | ||||||
| 
 | 
 | ||||||
|     def dump(self, io=sys.stdout): |     def dump(self, io=sys.stdout): | ||||||
|         i = 0 |         i = 0 | ||||||
|  | @ -162,7 +162,7 @@ def makeCodeObject(self): | ||||||
|         # XXX danger! can't pass through here twice |         # XXX danger! can't pass through here twice | ||||||
|         if self.flags & CO_VARKEYWORDS: |         if self.flags & CO_VARKEYWORDS: | ||||||
|             self.argcount = self.argcount - 1 |             self.argcount = self.argcount - 1 | ||||||
| 	stacksize = findDepth(self.insts) |         stacksize = findDepth(self.insts) | ||||||
|         try: |         try: | ||||||
|             co = new.code(self.argcount, nlocals, stacksize, |             co = new.code(self.argcount, nlocals, stacksize, | ||||||
|                           self.flags, lnotab.getCode(), self._getConsts(), |                           self.flags, lnotab.getCode(), self._getConsts(), | ||||||
|  | @ -193,9 +193,9 @@ def _getConsts(self): | ||||||
|         """ |         """ | ||||||
|         l = [] |         l = [] | ||||||
|         for elt in self.consts: |         for elt in self.consts: | ||||||
| 	    # XXX might be clearer to just as isinstance(CodeGen) |             # XXX might be clearer to just as isinstance(CodeGen) | ||||||
| 	    if hasattr(elt, 'asConst'): |             if hasattr(elt, 'asConst'): | ||||||
| 		l.append(elt.asConst()) |                 l.append(elt.asConst()) | ||||||
|             else: |             else: | ||||||
|                 l.append(elt) |                 l.append(elt) | ||||||
|         return tuple(l) |         return tuple(l) | ||||||
|  | @ -286,14 +286,14 @@ def _lookupName(self, name, list): | ||||||
|      |      | ||||||
|     opnum = {} |     opnum = {} | ||||||
|     for num in range(len(dis.opname)): |     for num in range(len(dis.opname)): | ||||||
| 	opnum[dis.opname[num]] = num |         opnum[dis.opname[num]] = num | ||||||
| 
 | 
 | ||||||
|     # this version of emit + arbitrary hooks might work, but it's damn |     # this version of emit + arbitrary hooks might work, but it's damn | ||||||
|     # messy. |     # messy. | ||||||
| 
 | 
 | ||||||
|     def emit(self, *args): |     def emit(self, *args): | ||||||
|         self._emitDispatch(args[0], args[1:]) |         self._emitDispatch(args[0], args[1:]) | ||||||
| 	self.insts.append(args) |         self.insts.append(args) | ||||||
| 
 | 
 | ||||||
|     def _emitDispatch(self, type, args): |     def _emitDispatch(self, type, args): | ||||||
|         for func in self._emit_hooks.get(type, []): |         for func in self._emit_hooks.get(type, []): | ||||||
|  | @ -363,115 +363,115 @@ class StackRef: | ||||||
|     count = 0 |     count = 0 | ||||||
| 
 | 
 | ||||||
|     def __init__(self, id=None, val=None): |     def __init__(self, id=None, val=None): | ||||||
| 	if id is None: |         if id is None: | ||||||
| 	    id = StackRef.count |             id = StackRef.count | ||||||
| 	    StackRef.count = StackRef.count + 1 |             StackRef.count = StackRef.count + 1 | ||||||
| 	self.id = id |         self.id = id | ||||||
| 	self.val = val |         self.val = val | ||||||
| 
 | 
 | ||||||
|     def __repr__(self): |     def __repr__(self): | ||||||
| 	if self.val: |         if self.val: | ||||||
| 	    return "StackRef(val=%d)" % self.val |             return "StackRef(val=%d)" % self.val | ||||||
| 	else: |         else: | ||||||
| 	    return "StackRef(id=%d)" % self.id |             return "StackRef(id=%d)" % self.id | ||||||
| 
 | 
 | ||||||
|     def bind(self, inst): |     def bind(self, inst): | ||||||
| 	self.val = inst |         self.val = inst | ||||||
| 
 | 
 | ||||||
|     def resolve(self): |     def resolve(self): | ||||||
|         if self.val is None: |         if self.val is None: | ||||||
|             print "UNRESOLVE REF", self |             print "UNRESOLVE REF", self | ||||||
|             return 0 |             return 0 | ||||||
| 	return self.val |         return self.val | ||||||
| 
 | 
 | ||||||
| class StackDepthTracker: | class StackDepthTracker: | ||||||
|     # XXX need to keep track of stack depth on jumps |     # XXX need to keep track of stack depth on jumps | ||||||
| 
 | 
 | ||||||
|     def findDepth(self, insts): |     def findDepth(self, insts): | ||||||
| 	depth = 0 |         depth = 0 | ||||||
| 	maxDepth = 0 |         maxDepth = 0 | ||||||
| 	for i in insts: |         for i in insts: | ||||||
| 	    opname = i[0] |             opname = i[0] | ||||||
| 	    delta = self.effect.get(opname, 0) |             delta = self.effect.get(opname, 0) | ||||||
| 	    if delta > 1: |             if delta > 1: | ||||||
| 		depth = depth + delta |                 depth = depth + delta | ||||||
| 	    elif delta < 0: |             elif delta < 0: | ||||||
| 		if depth > maxDepth: |                 if depth > maxDepth: | ||||||
| 		    maxDepth = depth |                     maxDepth = depth | ||||||
| 		depth = depth + delta |                 depth = depth + delta | ||||||
| 	    else: |             else: | ||||||
| 		if depth > maxDepth: |                 if depth > maxDepth: | ||||||
| 		    maxDepth = depth |                     maxDepth = depth | ||||||
| 		# now check patterns |                 # now check patterns | ||||||
| 		for pat, delta in self.patterns: |                 for pat, delta in self.patterns: | ||||||
| 		    if opname[:len(pat)] == pat: |                     if opname[:len(pat)] == pat: | ||||||
| 			depth = depth + delta |                         depth = depth + delta | ||||||
| 			break |                         break | ||||||
| 		# if we still haven't found a match |                 # if we still haven't found a match | ||||||
| 		if delta == 0: |                 if delta == 0: | ||||||
| 		    meth = getattr(self, opname) |                     meth = getattr(self, opname) | ||||||
| 		    depth = depth + meth(i[1]) |                     depth = depth + meth(i[1]) | ||||||
| 	    if depth < 0: |             if depth < 0: | ||||||
| 		depth = 0 |                 depth = 0 | ||||||
| 	return maxDepth |         return maxDepth | ||||||
| 
 | 
 | ||||||
|     effect = { |     effect = { | ||||||
| 	'POP_TOP': -1, |         'POP_TOP': -1, | ||||||
| 	'DUP_TOP': 1, |         'DUP_TOP': 1, | ||||||
| 	'SLICE+1': -1, |         'SLICE+1': -1, | ||||||
| 	'SLICE+2': -1, |         'SLICE+2': -1, | ||||||
| 	'SLICE+3': -2, |         'SLICE+3': -2, | ||||||
| 	'STORE_SLICE+0': -1, |         'STORE_SLICE+0': -1, | ||||||
| 	'STORE_SLICE+1': -2, |         'STORE_SLICE+1': -2, | ||||||
| 	'STORE_SLICE+2': -2, |         'STORE_SLICE+2': -2, | ||||||
| 	'STORE_SLICE+3': -3, |         'STORE_SLICE+3': -3, | ||||||
| 	'DELETE_SLICE+0': -1, |         'DELETE_SLICE+0': -1, | ||||||
| 	'DELETE_SLICE+1': -2, |         'DELETE_SLICE+1': -2, | ||||||
| 	'DELETE_SLICE+2': -2, |         'DELETE_SLICE+2': -2, | ||||||
| 	'DELETE_SLICE+3': -3, |         'DELETE_SLICE+3': -3, | ||||||
| 	'STORE_SUBSCR': -3, |         'STORE_SUBSCR': -3, | ||||||
| 	'DELETE_SUBSCR': -2, |         'DELETE_SUBSCR': -2, | ||||||
| 	# PRINT_EXPR? |         # PRINT_EXPR? | ||||||
| 	'PRINT_ITEM': -1, |         'PRINT_ITEM': -1, | ||||||
| 	'LOAD_LOCALS': 1, |         'LOAD_LOCALS': 1, | ||||||
| 	'RETURN_VALUE': -1, |         'RETURN_VALUE': -1, | ||||||
| 	'EXEC_STMT': -2, |         'EXEC_STMT': -2, | ||||||
| 	'BUILD_CLASS': -2, |         'BUILD_CLASS': -2, | ||||||
| 	'STORE_NAME': -1, |         'STORE_NAME': -1, | ||||||
| 	'STORE_ATTR': -2, |         'STORE_ATTR': -2, | ||||||
| 	'DELETE_ATTR': -1, |         'DELETE_ATTR': -1, | ||||||
| 	'STORE_GLOBAL': -1, |         'STORE_GLOBAL': -1, | ||||||
| 	'BUILD_MAP': 1, |         'BUILD_MAP': 1, | ||||||
| 	'COMPARE_OP': -1, |         'COMPARE_OP': -1, | ||||||
| 	'STORE_FAST': -1, |         'STORE_FAST': -1, | ||||||
| 	} |         } | ||||||
|     # use pattern match |     # use pattern match | ||||||
|     patterns = [ |     patterns = [ | ||||||
| 	('BINARY_', -1), |         ('BINARY_', -1), | ||||||
| 	('LOAD_', 1), |         ('LOAD_', 1), | ||||||
| 	('IMPORT_', 1), |         ('IMPORT_', 1), | ||||||
| 	] |         ] | ||||||
|     # special cases |     # special cases | ||||||
| 
 | 
 | ||||||
|     #: UNPACK_TUPLE, UNPACK_LIST, BUILD_TUPLE, |     #: UNPACK_TUPLE, UNPACK_LIST, BUILD_TUPLE, | ||||||
|     # BUILD_LIST, CALL_FUNCTION, MAKE_FUNCTION, BUILD_SLICE |     # BUILD_LIST, CALL_FUNCTION, MAKE_FUNCTION, BUILD_SLICE | ||||||
|     def UNPACK_TUPLE(self, count): |     def UNPACK_TUPLE(self, count): | ||||||
| 	return count |         return count | ||||||
|     def UNPACK_LIST(self, count): |     def UNPACK_LIST(self, count): | ||||||
| 	return count |         return count | ||||||
|     def BUILD_TUPLE(self, count): |     def BUILD_TUPLE(self, count): | ||||||
| 	return -count |         return -count | ||||||
|     def BUILD_LIST(self, count): |     def BUILD_LIST(self, count): | ||||||
| 	return -count |         return -count | ||||||
|     def CALL_FUNCTION(self, argc): |     def CALL_FUNCTION(self, argc): | ||||||
| 	hi, lo = divmod(argc, 256) |         hi, lo = divmod(argc, 256) | ||||||
| 	return lo + hi * 2 |         return lo + hi * 2 | ||||||
|     def MAKE_FUNCTION(self, argc): |     def MAKE_FUNCTION(self, argc): | ||||||
| 	return -argc |         return -argc | ||||||
|     def BUILD_SLICE(self, argc): |     def BUILD_SLICE(self, argc): | ||||||
| 	if argc == 2: |         if argc == 2: | ||||||
| 	    return -1 |             return -1 | ||||||
| 	elif argc == 3: |         elif argc == 3: | ||||||
| 	    return -2 |             return -2 | ||||||
|      |      | ||||||
| findDepth = StackDepthTracker().findDepth | findDepth = StackDepthTracker().findDepth | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Jeremy Hylton
						Jeremy Hylton