[pypy-commit] pypy pep526: Implement the variable annotation bytecodes.
alcarithemad
pypy.commits at gmail.com
Thu Mar 1 05:08:08 EST 2018
Author: Colin Valliant <alcarithemad at gmail.com>
Branch: pep526
Changeset: r93923:52cd5d8635c2
Date: 2018-02-14 22:13 -0800
http://bitbucket.org/pypy/pypy/changeset/52cd5d8635c2/
Log: Implement the variable annotation bytecodes.
diff --git a/pypy/interpreter/pyopcode.py b/pypy/interpreter/pyopcode.py
--- a/pypy/interpreter/pyopcode.py
+++ b/pypy/interpreter/pyopcode.py
@@ -292,6 +292,10 @@
self.DELETE_DEREF(oparg, next_instr)
elif opcode == opcodedesc.DELETE_FAST.index:
self.DELETE_FAST(oparg, next_instr)
+ elif opcode == opcodedesc.SETUP_ANNOTATIONS.index:
+ self.SETUP_ANNOTATIONS(oparg, next_instr)
+ elif opcode == opcodedesc.STORE_ANNOTATION.index:
+ self.STORE_ANNOTATION(oparg, next_instr)
elif opcode == opcodedesc.DELETE_GLOBAL.index:
self.DELETE_GLOBAL(oparg, next_instr)
elif opcode == opcodedesc.DELETE_NAME.index:
@@ -947,6 +951,18 @@
varname)
self.locals_cells_stack_w[varindex] = None
+ def SETUP_ANNOTATIONS(self, oparg, next_instr):
+ w_locals = self.getorcreatedebug().w_locals
+ if not self.space.finditem_str(w_locals, '__annotations__'):
+ w_annotations = self.space.newdict()
+ self.space.setitem_str(w_locals, '__annotations__', w_annotations)
+
+ def STORE_ANNOTATION(self, varindex, next_instr):
+ varname = self.getname_u(varindex)
+ w_newvalue = self.popvalue()
+ self.space.setitem_str(self.getorcreatedebug().w_locals.getitem_str('__annotations__'), varname,
+ w_newvalue)
+
def BUILD_TUPLE(self, itemcount, next_instr):
items = self.popvalues(itemcount)
w_tuple = self.space.newtuple(items)
More information about the pypy-commit
mailing list