Changeset 391 for python/trunk/Parser/asdl_c.py
- Timestamp:
- Mar 19, 2014, 11:31:01 PM (11 years ago)
- Location:
- python/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
python/trunk
-
Property svn:mergeinfo
set to
/python/vendor/Python-2.7.6 merged eligible /python/vendor/current merged eligible
-
Property svn:mergeinfo
set to
-
python/trunk/Parser/asdl_c.py
r2 r391 87 87 super(EmitVisitor, self).__init__() 88 88 89 def emit(self, s, depth, reflow= 1):89 def emit(self, s, depth, reflow=True): 90 90 # XXX reflow long lines? 91 91 if reflow: … … 256 256 self.emit_function(cons.name, ctype, args, attrs) 257 257 258 def emit_function(self, name, ctype, args, attrs, union= 1):258 def emit_function(self, name, ctype, args, attrs, union=True): 259 259 args = args + attrs 260 260 if args: … … 268 268 margs += ", a%d" % i 269 269 self.emit("#define %s(%s) _Py_%s(%s)" % (name, margs, name, margs), 0, 270 reflow = 0)271 self.emit("%s _Py_%s(%s);" % (ctype, name, argstr), 0)270 reflow=False) 271 self.emit("%s _Py_%s(%s);" % (ctype, name, argstr), False) 272 272 273 273 def visitProduct(self, prod, name): 274 274 self.emit_function(name, get_c_type(name), 275 self.get_args(prod.fields), [], union= 0)275 self.get_args(prod.fields), [], union=False) 276 276 277 277 … … 279 279 """Visitor to generate constructor functions for AST.""" 280 280 281 def emit_function(self, name, ctype, args, attrs, union= 1):282 def emit(s, depth=0, reflow= 1):281 def emit_function(self, name, ctype, args, attrs, union=True): 282 def emit(s, depth=0, reflow=True): 283 283 self.emit(s, depth, reflow) 284 284 argstr = ", ".join(["%s %s" % (atype, aname) … … 299 299 msg = "field %s is required for %s" % (argname, name) 300 300 emit(' "%s");' % msg, 301 2, reflow= 0)301 2, reflow=False) 302 302 emit('return NULL;', 2) 303 303 emit('}', 1) … … 315 315 316 316 def emit_body_union(self, name, args, attrs): 317 def emit(s, depth=0, reflow= 1):317 def emit(s, depth=0, reflow=True): 318 318 self.emit(s, depth, reflow) 319 319 emit("p->kind = %s_kind;" % name, 1) … … 324 324 325 325 def emit_body_struct(self, name, args, attrs): 326 def emit(s, depth=0, reflow= 1):326 def emit(s, depth=0, reflow=True): 327 327 self.emit(s, depth, reflow) 328 328 for argtype, argname, opt in args: … … 734 734 int i, result; 735 735 PyObject *s, *l = PyTuple_New(num_fields); 736 if (!l) return 0; 737 for(i = 0; i < num_fields; i++) { 736 if (!l) 737 return 0; 738 for (i = 0; i < num_fields; i++) { 738 739 s = PyString_FromString(attrs[i]); 739 740 if (!s) { … … 800 801 } 801 802 802 #define obj2ast_identifier obj2ast_object 803 #define obj2ast_string obj2ast_object 803 static int obj2ast_identifier(PyObject* obj, PyObject** out, PyArena* arena) 804 { 805 if (!PyString_CheckExact(obj) && obj != Py_None) { 806 PyErr_Format(PyExc_TypeError, 807 "AST identifier must be of type str"); 808 return 1; 809 } 810 return obj2ast_object(obj, out, arena); 811 } 812 813 static int obj2ast_string(PyObject* obj, PyObject** out, PyArena* arena) 814 { 815 if (!PyString_CheckExact(obj) && !PyUnicode_CheckExact(obj)) { 816 PyErr_SetString(PyExc_TypeError, 817 "AST string must be of type str or unicode"); 818 return 1; 819 } 820 return obj2ast_object(obj, out, arena); 821 } 804 822 805 823 static int obj2ast_int(PyObject* obj, int* out, PyArena* arena) … … 902 920 self.emit("if (!%s_singleton) return 0;" % cons.name, 1) 903 921 904 905 def parse_version(mod):906 return mod.version.value[12:-3]907 922 908 923 class ASTModuleVisitor(PickleVisitor): … … 920 935 self.emit('if (PyModule_AddIntConstant(m, "PyCF_ONLY_AST", PyCF_ONLY_AST) < 0)', 1) 921 936 self.emit("return;", 2) 922 # Value of version: "$Revision : 76775$"937 # Value of version: "$Revision$" 923 938 self.emit('if (PyModule_AddStringConstant(m, "__version__", "%s") < 0)' 924 % parse_version(mod), 1)939 % mod.version, 1) 925 940 self.emit("return;", 2) 926 941 for dfn in mod.dfns: … … 963 978 964 979 class StaticVisitor(PickleVisitor): 965 CODE = '''Very simple, always emit this static code. Over ide CODE'''980 CODE = '''Very simple, always emit this static code. Override CODE''' 966 981 967 982 def visit(self, object): … … 1019 1034 self.emit("Py_INCREF(%s_singleton);" % t.name, 3) 1020 1035 self.emit("return %s_singleton;" % t.name, 3) 1021 self.emit("default:" % name, 2)1036 self.emit("default:", 2) 1022 1037 self.emit('/* should never happen, but just in case ... */', 3) 1023 1038 code = "PyErr_Format(PyExc_SystemError, \"unknown %s found\");" % name … … 1103 1118 { 1104 1119 mod_ty res; 1105 PyObject *req_type[] = {(PyObject*)Module_type, (PyObject*)Expression_type, 1106 (PyObject*)Interactive_type}; 1107 char *req_name[] = {"Module", "Expression", "Interactive"}; 1120 PyObject *req_type[3]; 1121 char *req_name[3]; 1108 1122 int isinstance; 1123 1124 req_type[0] = (PyObject*)Module_type; 1125 req_type[1] = (PyObject*)Expression_type; 1126 req_type[2] = (PyObject*)Interactive_type; 1127 1128 req_name[0] = "Module"; 1129 req_name[1] = "Expression"; 1130 req_name[2] = "Interactive"; 1131 1109 1132 assert(0 <= mode && mode <= 2); 1110 1133 … … 1160 1183 auto_gen_msg = common_msg % argv0 1161 1184 mod = asdl.parse(srcfile) 1185 mod.version = "82160" 1162 1186 if not asdl.check(mod): 1163 1187 sys.exit(1) … … 1181 1205 f = open(p, "wb") 1182 1206 f.write(auto_gen_msg) 1183 f.write(c_file_msg % parse_version(mod))1207 f.write(c_file_msg % mod.version) 1184 1208 f.write('#include "Python.h"\n') 1185 1209 f.write('#include "%s-ast.h"\n' % mod.name)
Note:
See TracChangeset
for help on using the changeset viewer.