[Python-checkins] r42635 - python/trunk/Parser/Python.asdl python/trunk/Parser/asdl.py python/trunk/Parser/asdl_c.py

martin.v.loewis python-checkins at python.org
Tue Feb 28 01:12:49 CET 2006


Author: martin.v.loewis
Date: Tue Feb 28 01:12:47 2006
New Revision: 42635

Modified:
   python/trunk/Parser/Python.asdl
   python/trunk/Parser/asdl.py
   python/trunk/Parser/asdl_c.py
Log:
Add support for version field on Modules


Modified: python/trunk/Parser/Python.asdl
==============================================================================
--- python/trunk/Parser/Python.asdl	(original)
+++ python/trunk/Parser/Python.asdl	Tue Feb 28 01:12:47 2006
@@ -1,6 +1,6 @@
 -- ASDL's five builtin types are identifier, int, string, object, bool
 
-module Python
+module Python version "$Revision$"
 {
 	mod = Module(stmt* body)
 	    | Interactive(stmt* body)

Modified: python/trunk/Parser/asdl.py
==============================================================================
--- python/trunk/Parser/asdl.py	(original)
+++ python/trunk/Parser/asdl.py	Tue Feb 28 01:12:47 2006
@@ -6,6 +6,8 @@
 Only supports top level module decl, not view.  I'm guessing that view
 is intended to support the browser and I'm not interested in the
 browser.
+
+Changes for Python: Add support for module versions
 """
 
 #__metaclass__ = type
@@ -36,6 +38,12 @@
 
     def __str__(self):
         return self.value
+        
+class String(Token):
+    def __init__(self, value, lineno):
+        self.type = 'String'
+        self.value = value
+        self.lineno = lineno
 
 class ASDLSyntaxError:
 
@@ -63,6 +71,10 @@
         # XXX doesn't distinguish upper vs. lower, which is
         # significant for ASDL.
         self.rv.append(Id(s, self.lineno))
+        
+    def t_string(self, s):
+        r'"[^"]*"'
+        self.rv.append(String(s, self.lineno))
 
     def t_xxx(self, s): # not sure what this production means
         r"<="
@@ -98,19 +110,26 @@
     def error(self, tok):
         raise ASDLSyntaxError(tok.lineno, tok)
 
-    def p_module_0(self, (module, name, _0, _1)):
-        " module ::= Id Id { } "
+    def p_module_0(self, (module, name, version, _0, _1)):
+        " module ::= Id Id version { } "
         if module.value != "module":
             raise ASDLSyntaxError(module.lineno,
                                   msg="expected 'module', found %s" % module)
-        return Module(name, None)
+        return Module(name, None, version)
 
-    def p_module(self, (module, name, _0, definitions, _1)):
-        " module ::= Id Id { definitions } "
+    def p_module(self, (module, name, version, _0, definitions, _1)):
+        " module ::= Id Id version { definitions } "
         if module.value != "module":
             raise ASDLSyntaxError(module.lineno,
                                   msg="expected 'module', found %s" % module)
-        return Module(name, definitions)
+        return Module(name, definitions, version)
+        
+    def p_version(self, (version, V)):
+        "version ::= Id String"
+        if version.value != "version":
+            raise ASDLSyntaxError(version.lineno,
+                                msg="expected 'version', found %" % version)
+        return V
 
     def p_definition_0(self, (definition,)):
         " definitions ::= definition "
@@ -209,9 +228,10 @@
     pass # a marker class
 
 class Module(AST):
-    def __init__(self, name, dfns):
+    def __init__(self, name, dfns, version):
         self.name = name
         self.dfns = dfns
+        self.version = version
         self.types = {} # maps type name to value (from dfns)
         for type in dfns:
             self.types[type.name.value] = type.value

Modified: python/trunk/Parser/asdl_c.py
==============================================================================
--- python/trunk/Parser/asdl_c.py	(original)
+++ python/trunk/Parser/asdl_c.py	Tue Feb 28 01:12:47 2006
@@ -524,6 +524,7 @@
         self.emit('if (PyDict_SetItemString(d, "AST", (PyObject*)AST_type) < 0) return;', 1)
         self.emit('if (PyModule_AddIntConstant(m, "PyCF_ONLY_AST", PyCF_ONLY_AST) < 0)', 1)
         self.emit("return;", 2)
+        self.emit("/* %s */" % mod.version.value, 1)
         for dfn in mod.dfns:
             self.visit(dfn)
         self.emit("}", 0)


More information about the Python-checkins mailing list