[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