Commit ae6b16bd authored by Larry Hastings's avatar Larry Hastings

Issue #19358: "make clinic" now runs the Argument Clinic preprocessor

over all CPython source files.
parent 21acfe3a
...@@ -526,6 +526,12 @@ coverage-report: ...@@ -526,6 +526,12 @@ coverage-report:
: # build lcov report : # build lcov report
$(MAKE) coverage-lcov $(MAKE) coverage-lcov
# Run "Argument Clinic" over all source files
# (depends on python having already been built)
.PHONY=clinic
clinic: $(BUILDPYTHON)
$(RUNSHARED) $(PYTHON_FOR_BUILD) ./Tools/clinic/clinic.py --make
# Build the interpreter # Build the interpreter
$(BUILDPYTHON): Modules/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY) $(BUILDPYTHON): Modules/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY)
$(LINKCC) $(PY_LDFLAGS) $(LINKFORSHARED) -o $@ Modules/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST) $(LINKCC) $(PY_LDFLAGS) $(LINKFORSHARED) -o $@ Modules/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST)
......
...@@ -9,6 +9,7 @@ Projected release date: 2013-11-24 ...@@ -9,6 +9,7 @@ Projected release date: 2013-11-24
Core and Builtins Core and Builtins
----------------- -----------------
- Use the repr of a module name in more places in import, especially - Use the repr of a module name in more places in import, especially
exceptions. exceptions.
...@@ -66,6 +67,7 @@ Core and Builtins ...@@ -66,6 +67,7 @@ Core and Builtins
Library Library
------- -------
- Issue #19722: Added opcode.stack_effect(), which - Issue #19722: Added opcode.stack_effect(), which
computes the stack effect of bytecode instructions. computes the stack effect of bytecode instructions.
...@@ -403,6 +405,9 @@ Documentation ...@@ -403,6 +405,9 @@ Documentation
Build Build
----- -----
- Issue #19358: "make clinic" now runs the Argument Clinic preprocessor
over all CPython source files.
- Update SQLite to 3.8.1, xz to 5.0.5, and Tcl/Tk to 8.6.1 on Windows. - Update SQLite to 3.8.1, xz to 5.0.5, and Tcl/Tk to 8.6.1 on Windows.
- Issue #16632: Enable DEP and ASLR on Windows. - Issue #16632: Enable DEP and ASLR on Windows.
...@@ -449,6 +454,7 @@ Build ...@@ -449,6 +454,7 @@ Build
Tools/Demos Tools/Demos
----------- -----------
- Issue #19730: Argument Clinic now supports all the existing PyArg - Issue #19730: Argument Clinic now supports all the existing PyArg
"format units" as legacy converters, as well as two new features: "format units" as legacy converters, as well as two new features:
"self converters" and the "version" directive. "self converters" and the "version" directive.
......
...@@ -988,7 +988,6 @@ class BlockPrinter: ...@@ -988,7 +988,6 @@ class BlockPrinter:
dsl_name = block.dsl_name dsl_name = block.dsl_name
write = self.f.write write = self.f.write
assert (not input) or (input.endswith('\n'))
assert not ((dsl_name == None) ^ (output == None)), "you must specify dsl_name and output together, dsl_name " + repr(dsl_name) assert not ((dsl_name == None) ^ (output == None)), "you must specify dsl_name and output together, dsl_name " + repr(dsl_name)
if not dsl_name: if not dsl_name:
...@@ -1122,12 +1121,16 @@ def parse_file(filename, *, verify=True, output=None, encoding='utf-8'): ...@@ -1122,12 +1121,16 @@ def parse_file(filename, *, verify=True, output=None, encoding='utf-8'):
clinic = Clinic(language, verify=verify, filename=filename) clinic = Clinic(language, verify=verify, filename=filename)
with open(filename, 'r', encoding=encoding) as f: with open(filename, 'r', encoding=encoding) as f:
text = clinic.parse(f.read()) raw = f.read()
cooked = clinic.parse(raw)
if cooked == raw:
return
directory = os.path.dirname(filename) or '.' directory = os.path.dirname(filename) or '.'
with tempfile.TemporaryDirectory(prefix="clinic", dir=directory) as tmpdir: with tempfile.TemporaryDirectory(prefix="clinic", dir=directory) as tmpdir:
bytes = text.encode(encoding) bytes = cooked.encode(encoding)
tmpfilename = os.path.join(tmpdir, os.path.basename(filename)) tmpfilename = os.path.join(tmpdir, os.path.basename(filename))
with open(tmpfilename, "wb") as f: with open(tmpfilename, "wb") as f:
f.write(bytes) f.write(bytes)
...@@ -2619,6 +2622,7 @@ def main(argv): ...@@ -2619,6 +2622,7 @@ def main(argv):
cmdline.add_argument("-f", "--force", action='store_true') cmdline.add_argument("-f", "--force", action='store_true')
cmdline.add_argument("-o", "--output", type=str) cmdline.add_argument("-o", "--output", type=str)
cmdline.add_argument("--converters", action='store_true') cmdline.add_argument("--converters", action='store_true')
cmdline.add_argument("--make", action='store_true')
cmdline.add_argument("filename", type=str, nargs="*") cmdline.add_argument("filename", type=str, nargs="*")
ns = cmdline.parse_args(argv) ns = cmdline.parse_args(argv)
...@@ -2697,6 +2701,23 @@ def main(argv): ...@@ -2697,6 +2701,23 @@ def main(argv):
print("All return converters also accept (doc_default=None).") print("All return converters also accept (doc_default=None).")
sys.exit(0) sys.exit(0)
if ns.make:
if ns.output or ns.filename:
print("Usage error: can't use -o or filenames with --make.")
print()
cmdline.print_usage()
sys.exit(-1)
for root, dirs, files in os.walk('.'):
for rcs_dir in ('.svn', '.git', '.hg'):
if rcs_dir in dirs:
dirs.remove(rcs_dir)
for filename in files:
if not filename.endswith('.c'):
continue
path = os.path.join(root, filename)
parse_file(path, verify=not ns.force)
return
if not ns.filename: if not ns.filename:
cmdline.print_usage() cmdline.print_usage()
sys.exit(-1) sys.exit(-1)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment