[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

AltStyle によって変換されたページ (->オリジナル) /