From f446a070a0aa29a153b0cf78b33ef22da84cb023 Mon Sep 17 00:00:00 2001 From: danakj Date: Sat, 27 Sep 2014 14:55:48 -0700 Subject: cc: Remove use of PassAs() and constructor-casting with scoped_ptr. Say you have class A and subclass B. Previously it was required to PassAs() a scoped_ptr into a scoped_ptr. This is no longer needed, so just use Pass(). For newly created scoped_ptrs, you can just use make_scoped_ptr always now. And when you want to return or assign an empty scoped_ptr(), you can now use nullptr directly. Also adds PRESUBMIT checks for: - return scoped(foo). This should be return make_scoped_ptr(foo). - bar = scoped(foo). This should be return bar = make_scoped_ptr(foo). - return scoped(). This should be return nullptr. - bar = scoped(). This should be return bar = nullptr. This also replaces p.reset() with p = nullptr; But it does not add a PRESUBMIT check for that because there are things other than scoped_ptr with a reset() function. R=enne@chromium.org Committed: https://crrev.com/7bb3dbede19d87f0338797756ffd738adc6bca08 Cr-Commit-Position: refs/heads/master@{#297096} Review URL: https://codereview.chromium.org/609663003 Cr-Commit-Position: refs/heads/master@{#297121} --- cc/PRESUBMIT.py | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'cc/PRESUBMIT.py') diff --git a/cc/PRESUBMIT.py b/cc/PRESUBMIT.py index 6c08441..f381684 100644 --- a/cc/PRESUBMIT.py +++ b/cc/PRESUBMIT.py @@ -146,6 +146,40 @@ def CheckTodos(input_api, output_api): items=errors)] return [] +def CheckScopedPtr(input_api, output_api, + white_list=CC_SOURCE_FILES, black_list=None): + black_list = tuple(black_list or input_api.DEFAULT_BLACK_LIST) + source_file_filter = lambda x: input_api.FilterSourceFile(x, + white_list, + black_list) + errors = [] + for f in input_api.AffectedSourceFiles(source_file_filter): + for line_number, line in f.ChangedContents(): + # Disallow: + # return scoped_ptr(foo); + # bar = scoped_ptr(foo); + # But allow: + # return scoped_ptr(foo); + # bar = scoped_ptr(foo); + if re.search(r'(=|\breturn)\s*scoped_ptr<.*?(?\([^)]+\)', line): + errors.append(output_api.PresubmitError( + ('%s:%d uses explicit scoped_ptr constructor. ' + + 'Use make_scoped_ptr() instead.') % (f.LocalPath(), line_number))) + # Disallow: + # return scoped_ptr(); + # bar = scoped_ptr(); + if re.search(r'(=|\breturn)\s*scoped_ptr<.*?>\(\)', line): + errors.append(output_api.PresubmitError( + '%s:%d uses scoped_ptr(). Use nullptr instead.' % + (f.LocalPath(), line_number))) + # Disallow: + # foo.PassAs(); + if re.search(r'\bPassAs<.*?>\(\)', line): + errors.append(output_api.PresubmitError( + '%s:%d uses PassAs(). Use Pass() instead.' % + (f.LocalPath(), line_number))) + return errors + def FindUnquotedQuote(contents, pos): match = re.search(r"(?\")", contents[pos:]) return -1 if not match else match.start("quote") + pos @@ -286,6 +320,7 @@ def CheckChangeOnUpload(input_api, output_api): results += CheckPassByValue(input_api, output_api) results += CheckChangeLintsClean(input_api, output_api) results += CheckTodos(input_api, output_api) + results += CheckScopedPtr(input_api, output_api) results += CheckNamespace(input_api, output_api) results += CheckForUseOfWrongClock(input_api, output_api) results += FindUselessIfdefs(input_api, output_api) -- cgit v1.1