libv8 6.7.288.46.1 → 7.3.492.27.0beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +3 -0
- data/CHANGELOG.md +4 -0
- data/README.md +2 -0
- data/ext/libv8/builder.rb +6 -2
- data/lib/libv8/version.rb +1 -1
- data/vendor/depot_tools/.gitattributes +1 -0
- data/vendor/depot_tools/.gitignore +7 -0
- data/vendor/depot_tools/CROS_OWNERS +5 -0
- data/vendor/depot_tools/OWNERS +12 -1
- data/vendor/depot_tools/PRESUBMIT.py +16 -9
- data/vendor/depot_tools/README.md +9 -2
- data/vendor/depot_tools/autoninja +14 -6
- data/vendor/depot_tools/autoninja.bat +11 -1
- data/vendor/depot_tools/autoninja.py +40 -18
- data/vendor/depot_tools/bb +12 -0
- data/vendor/depot_tools/bb.bat +7 -0
- data/vendor/depot_tools/bootstrap/win/manifest.txt +1 -1
- data/vendor/depot_tools/bootstrap/win/manifest_bleeding_edge.txt +1 -1
- data/vendor/depot_tools/bootstrap/win/win_tools.py +2 -1
- data/vendor/depot_tools/buildbucket.py +57 -4
- data/vendor/depot_tools/cipd +157 -44
- data/vendor/depot_tools/cipd.bat +51 -14
- data/vendor/depot_tools/cipd.ps1 +104 -42
- data/vendor/depot_tools/cipd_client_version +1 -1
- data/vendor/depot_tools/cipd_client_version.digests +21 -0
- data/vendor/depot_tools/cipd_manifest.txt +19 -6
- data/vendor/depot_tools/cipd_manifest.versions +318 -0
- data/vendor/depot_tools/clang_format.py +4 -4
- data/vendor/depot_tools/cpplint.py +44 -199
- data/vendor/depot_tools/dart_format.py +2 -2
- data/vendor/depot_tools/detect_host_arch.py +8 -3
- data/vendor/depot_tools/download_from_google_storage.py +47 -39
- data/vendor/depot_tools/fetch.py +30 -18
- data/vendor/depot_tools/fetch_configs/android_internal.py +34 -0
- data/vendor/depot_tools/fetch_configs/chromium.py +18 -1
- data/vendor/depot_tools/fetch_configs/config_util.py +4 -2
- data/vendor/depot_tools/fetch_configs/inspector_protocol.py +40 -0
- data/vendor/depot_tools/fetch_configs/node-ci.py +41 -0
- data/vendor/depot_tools/fix_encoding.py +3 -3
- data/vendor/depot_tools/gclient +1 -1
- data/vendor/depot_tools/gclient.py +415 -198
- data/vendor/depot_tools/gclient_eval.py +220 -171
- data/vendor/depot_tools/gclient_paths.py +142 -0
- data/vendor/depot_tools/gclient_scm.py +200 -51
- data/vendor/depot_tools/gclient_utils.py +88 -191
- data/vendor/depot_tools/gerrit_client.py +13 -0
- data/vendor/depot_tools/gerrit_util.py +158 -23
- data/vendor/depot_tools/git-nav-upstream +1 -1
- data/vendor/depot_tools/git_cache.py +77 -24
- data/vendor/depot_tools/git_cl.py +705 -1099
- data/vendor/depot_tools/git_common.py +9 -6
- data/vendor/depot_tools/git_map_branches.py +19 -2
- data/vendor/depot_tools/git_nav_downstream.py +3 -4
- data/vendor/depot_tools/git_rebase_update.py +14 -0
- data/vendor/depot_tools/git_reparent_branch.py +8 -2
- data/vendor/depot_tools/gn.py +38 -3
- data/vendor/depot_tools/gsutil.py +8 -3
- data/vendor/depot_tools/gsutil.py.bat +15 -0
- data/vendor/depot_tools/gsutil.vpython +16 -0
- data/vendor/depot_tools/infra/config/OWNERS +0 -1
- data/vendor/depot_tools/infra/config/recipes.cfg +3 -2
- data/vendor/depot_tools/lucicfg +12 -0
- data/vendor/depot_tools/lucicfg.bat +7 -0
- data/vendor/depot_tools/man/html/git-map-branches.html +34 -2
- data/vendor/depot_tools/man/html/git-new-branch.html +40 -32
- data/vendor/depot_tools/man/man1/git-map-branches.1 +24 -5
- data/vendor/depot_tools/man/man1/git-new-branch.1 +35 -27
- data/vendor/depot_tools/man/src/git-map-branches.demo.1.sh +1 -0
- data/vendor/depot_tools/man/src/git-map-branches.txt +10 -0
- data/vendor/depot_tools/man/src/git-new-branch.demo.1.sh +9 -4
- data/vendor/depot_tools/man/src/git-new-branch.txt +1 -1
- data/vendor/depot_tools/metrics.README.md +98 -0
- data/vendor/depot_tools/metrics.py +296 -0
- data/vendor/depot_tools/metrics_utils.py +303 -0
- data/vendor/depot_tools/my_activity.py +91 -29
- data/vendor/depot_tools/ninja +1 -1
- data/vendor/depot_tools/ninjalog.README.md +64 -0
- data/vendor/depot_tools/ninjalog_uploader.py +232 -0
- data/vendor/depot_tools/ninjalog_uploader_wrapper.py +116 -0
- data/vendor/depot_tools/owners.py +30 -13
- data/vendor/depot_tools/owners_finder.py +5 -2
- data/vendor/depot_tools/presubmit_canned_checks.py +188 -29
- data/vendor/depot_tools/presubmit_support.py +18 -41
- data/vendor/depot_tools/pylintrc +23 -19
- data/vendor/depot_tools/recipes/OWNERS +2 -0
- data/vendor/depot_tools/recipes/README.recipes.md +344 -151
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/OWNERS +2 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/__init__.py +2 -16
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/api.py +141 -99
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic.json +5 -8
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic_luci.json +5 -8
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic_with_branch_heads.json +6 -98
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/clobber.json +4 -9
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/deprecated_got_revision_mapping.json +45 -5
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/gerrit_no_rebase_patch_ref.json +4 -9
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/gerrit_no_reset.json +4 -9
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/{tryjob.json → input_commit_with_id_without_repo.json} +6 -11
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/{tryjob_empty_revision.json → multiple_patch_refs.json} +8 -9
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_apply_patch_on_gclient.json +19 -29
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/{trychange.json → refs.json} +4 -9
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/reset_root_solution_revision.json +4 -9
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail.json +51 -6
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail_patch.json +50 -6
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail_patch_download.json +51 -6
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_angle.json +17 -25
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_branch_heads.json +17 -25
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_feature_branch.json +18 -26
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_v8_feature_branch.json +18 -26
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_webrtc.json +26 -28
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_v8.json +45 -5
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_v8_head_by_default.json +17 -25
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/unrecognized_commit_repo.json +13 -0
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/with_manifest_name.json +13 -152
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/with_tags.json +4 -9
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.py +185 -202
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/resources/bot_update.py +52 -157
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/test_api.py +5 -14
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/tests/ensure_checkout.py +34 -0
- data/vendor/depot_tools/recipes/recipe_modules/cipd/api.py +14 -2
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/basic.json +4 -5
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/basic_pkg.json +4 -5
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/describe-failed.json +7 -5
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/describe-many-instances.json +4 -5
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/mac64.json +4 -5
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_file.json +9 -3
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_mode.json +9 -3
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_verfile.json +9 -3
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/win64.json +4 -5
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/junk arch.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/junk bits.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_arm_32.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_arm_64.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_intel_32.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_intel_64.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_mips_64.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/mac_intel_64.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/win_intel_32.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/win_intel_64.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/depot_tools/api.py +13 -8
- data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/basic.json +18 -12
- data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/basic_luci.json +18 -12
- data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/win.json +18 -12
- data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.py +3 -0
- data/vendor/depot_tools/recipes/recipe_modules/gclient/__init__.py +1 -0
- data/vendor/depot_tools/recipes/recipe_modules/gclient/api.py +58 -46
- data/vendor/depot_tools/recipes/recipe_modules/gclient/config.py +65 -22
- data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/basic.json +20 -21
- data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/buildbot.json +20 -21
- data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/revision.json +20 -21
- data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/tryserver.json +20 -21
- data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.py +5 -2
- data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/patch_project.py +62 -14
- data/vendor/depot_tools/recipes/recipe_modules/gerrit/api.py +24 -38
- data/vendor/depot_tools/recipes/recipe_modules/gerrit/examples/full.expected/basic.json +56 -50
- data/vendor/depot_tools/recipes/recipe_modules/gerrit/examples/full.py +15 -9
- data/vendor/depot_tools/recipes/recipe_modules/git/__init__.py +4 -1
- data/vendor/depot_tools/recipes/recipe_modules/git/api.py +34 -22
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_branch.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_file_name.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_hash.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_luci.json +222 -0
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_ref.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_submodule_update_force.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_tags.json +224 -0
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/can_fail_build.json +10 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/cannot_fail_build.json +5 -7
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/cat-file_test.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_delta.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_failed.json +5 -7
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_with_bad_output.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_with_bad_output_fails_build.json +10 -5
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/curl_trace_file.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/git-cache-checkout.json +8 -9
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/platform_win.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/rebase_failed.json +12 -8
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/remote_not_origin.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/set_got_revision.json +5 -6
- data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.py +27 -11
- data/vendor/depot_tools/recipes/recipe_modules/git_cl/api.py +1 -1
- data/vendor/depot_tools/recipes/recipe_modules/git_cl/examples/full.expected/basic.json +12 -13
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/__init__.py +5 -0
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/api.py +120 -5
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/examples/full.expected/basic.json +45 -3
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/examples/full.py +25 -0
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/resources/gerrit_client.py +56 -4
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/tests/parse_repo_url.expected/basic.json +6 -0
- data/vendor/depot_tools/recipes/recipe_modules/gitiles/tests/parse_repo_url.py +49 -0
- data/vendor/depot_tools/recipes/recipe_modules/gsutil/api.py +24 -13
- data/vendor/depot_tools/recipes/recipe_modules/gsutil/examples/full.expected/basic.json +13 -14
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/basic.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_linux.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_mac.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_win.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_linux.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_mac.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_win.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_linux.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_mac.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_win.json +2 -3
- data/vendor/depot_tools/recipes/recipe_modules/infra_paths/path_config.py +1 -2
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/__init__.py +35 -0
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/api.py +116 -0
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/linux.json +22 -0
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/mac.json +82 -0
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/win.json +22 -0
- data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.py +23 -0
- data/vendor/depot_tools/recipes/recipe_modules/presubmit/__init__.py +1 -0
- data/vendor/depot_tools/recipes/recipe_modules/presubmit/api.py +2 -7
- data/vendor/depot_tools/recipes/recipe_modules/presubmit/examples/full.expected/basic.json +7 -6
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/__init__.py +1 -0
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/api.py +117 -8
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/basic_tags.json +4 -5
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/set_failure_hash_with_no_steps.json +7 -4
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_gerrit_patch.json +98 -7
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_gerrit_patch_and_target_ref.json +147 -0
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_git_patch.json +8 -5
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_git_patch_luci.json +8 -5
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_wrong_patch.json +9 -6
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_wrong_patch_new.json +9 -6
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.py +27 -2
- data/vendor/depot_tools/recipes/recipe_modules/tryserver/test_api.py +14 -0
- data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/__init__.py +25 -0
- data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/api.py +137 -0
- data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/linux.json +22 -0
- data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/mac.json +22 -0
- data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/win.json +107 -0
- data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.py +26 -0
- data/vendor/depot_tools/recipes/recipes.py +37 -27
- data/vendor/depot_tools/recipes/recipes/fetch_end_to_end_test.expected/basic.json +7 -10
- data/vendor/depot_tools/repo +34 -8
- data/vendor/depot_tools/roll_dep.py +52 -49
- data/vendor/depot_tools/scm.py +38 -23
- data/vendor/depot_tools/setup_color.py +4 -2
- data/vendor/depot_tools/split_cl.py +32 -4
- data/vendor/depot_tools/subprocess2.py +22 -4
- data/vendor/depot_tools/third_party/httplib2/README.chromium +2 -2
- data/vendor/depot_tools/third_party/httplib2/__init__.py +242 -158
- data/vendor/depot_tools/third_party/httplib2/cacerts.txt +57 -44
- data/vendor/depot_tools/third_party/httplib2/socks.py +15 -5
- data/vendor/depot_tools/third_party/logilab/README.chromium +2 -4
- data/vendor/depot_tools/third_party/logilab/astroid/README.chromium +2 -1
- data/vendor/depot_tools/third_party/logilab/astroid/__init__.py +10 -5
- data/vendor/depot_tools/third_party/logilab/astroid/__pkginfo__.py +5 -5
- data/vendor/depot_tools/third_party/logilab/astroid/arguments.py +233 -0
- data/vendor/depot_tools/third_party/logilab/astroid/as_string.py +82 -33
- data/vendor/depot_tools/third_party/logilab/astroid/bases.py +137 -153
- data/vendor/depot_tools/third_party/logilab/astroid/brain/{builtin_inference.py → brain_builtin_inference.py} +117 -26
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_dateutil.py +15 -0
- data/vendor/depot_tools/third_party/logilab/astroid/brain/{py2gi.py → brain_gi.py} +48 -8
- data/vendor/depot_tools/third_party/logilab/astroid/brain/{py2mechanize.py → brain_mechanize.py} +0 -0
- data/vendor/depot_tools/third_party/logilab/astroid/brain/{pynose.py → brain_nose.py} +4 -1
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_numpy.py +62 -0
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_pytest.py +76 -0
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_qt.py +44 -0
- data/vendor/depot_tools/third_party/logilab/astroid/brain/{pysix_moves.py → brain_six.py} +28 -1
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_ssl.py +65 -0
- data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_stdlib.py +473 -0
- data/vendor/depot_tools/third_party/logilab/astroid/builder.py +104 -81
- data/vendor/depot_tools/third_party/logilab/astroid/context.py +81 -0
- data/vendor/depot_tools/third_party/logilab/astroid/decorators.py +75 -0
- data/vendor/depot_tools/third_party/logilab/astroid/exceptions.py +20 -0
- data/vendor/depot_tools/third_party/logilab/astroid/inference.py +137 -183
- data/vendor/depot_tools/third_party/logilab/astroid/manager.py +45 -169
- data/vendor/depot_tools/third_party/logilab/astroid/mixins.py +37 -14
- data/vendor/depot_tools/third_party/logilab/astroid/modutils.py +112 -41
- data/vendor/depot_tools/third_party/logilab/astroid/node_classes.py +243 -156
- data/vendor/depot_tools/third_party/logilab/astroid/nodes.py +35 -22
- data/vendor/depot_tools/third_party/logilab/astroid/objects.py +186 -0
- data/vendor/depot_tools/third_party/logilab/astroid/protocols.py +157 -102
- data/vendor/depot_tools/third_party/logilab/astroid/raw_building.py +32 -8
- data/vendor/depot_tools/third_party/logilab/astroid/rebuilder.py +372 -309
- data/vendor/depot_tools/third_party/logilab/astroid/scoped_nodes.py +652 -420
- data/vendor/depot_tools/third_party/logilab/astroid/test_utils.py +4 -21
- data/vendor/depot_tools/third_party/logilab/astroid/transforms.py +96 -0
- data/vendor/depot_tools/third_party/logilab/astroid/util.py +89 -0
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/LICENSE +19 -0
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/README.chromium +11 -0
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/__init__.py +20 -0
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/cext.c +1421 -0
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/compat.py +9 -0
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/simple.py +246 -0
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/slots.py +414 -0
- data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/utils.py +13 -0
- data/vendor/depot_tools/third_party/logilab/wrapt/LICENSE +24 -0
- data/vendor/depot_tools/third_party/logilab/wrapt/README.chromium +11 -0
- data/vendor/depot_tools/third_party/logilab/wrapt/__init__.py +19 -0
- data/vendor/depot_tools/third_party/logilab/wrapt/_wrappers.c +2729 -0
- data/vendor/depot_tools/third_party/logilab/wrapt/arguments.py +96 -0
- data/vendor/depot_tools/third_party/logilab/wrapt/decorators.py +512 -0
- data/vendor/depot_tools/third_party/logilab/wrapt/importer.py +228 -0
- data/vendor/depot_tools/third_party/logilab/wrapt/wrappers.py +901 -0
- data/vendor/depot_tools/third_party/pylint/README.chromium +2 -25
- data/vendor/depot_tools/third_party/pylint/__pkginfo__.py +13 -3
- data/vendor/depot_tools/third_party/pylint/checkers/__init__.py +1 -2
- data/vendor/depot_tools/third_party/pylint/checkers/async.py +82 -0
- data/vendor/depot_tools/third_party/pylint/checkers/base.py +893 -119
- data/vendor/depot_tools/third_party/pylint/checkers/classes.py +342 -204
- data/vendor/depot_tools/third_party/pylint/checkers/design_analysis.py +51 -34
- data/vendor/depot_tools/third_party/pylint/checkers/exceptions.py +84 -47
- data/vendor/depot_tools/third_party/pylint/checkers/format.py +55 -30
- data/vendor/depot_tools/third_party/pylint/checkers/imports.py +314 -73
- data/vendor/depot_tools/third_party/pylint/checkers/logging.py +10 -8
- data/vendor/depot_tools/third_party/pylint/checkers/misc.py +2 -1
- data/vendor/depot_tools/third_party/pylint/checkers/newstyle.py +45 -48
- data/vendor/depot_tools/third_party/pylint/checkers/python3.py +31 -21
- data/vendor/depot_tools/third_party/pylint/checkers/raw_metrics.py +3 -3
- data/vendor/depot_tools/third_party/pylint/checkers/similar.py +4 -5
- data/vendor/depot_tools/third_party/pylint/checkers/spelling.py +24 -10
- data/vendor/depot_tools/third_party/pylint/checkers/stdlib.py +120 -56
- data/vendor/depot_tools/third_party/pylint/checkers/strings.py +38 -35
- data/vendor/depot_tools/third_party/pylint/checkers/typecheck.py +485 -138
- data/vendor/depot_tools/third_party/pylint/checkers/utils.py +319 -142
- data/vendor/depot_tools/third_party/pylint/checkers/variables.py +329 -207
- data/vendor/depot_tools/third_party/pylint/config.py +739 -76
- data/vendor/depot_tools/third_party/pylint/epylint.py +9 -5
- data/vendor/depot_tools/third_party/pylint/extensions/__init__.py +0 -0
- data/vendor/depot_tools/third_party/pylint/extensions/check_docs.py +311 -0
- data/vendor/depot_tools/third_party/pylint/extensions/check_elif.py +62 -0
- data/vendor/depot_tools/third_party/{logilab/common → pylint}/graph.py +30 -133
- data/vendor/depot_tools/third_party/pylint/gui.py +2 -2
- data/vendor/depot_tools/third_party/pylint/interfaces.py +21 -3
- data/vendor/depot_tools/third_party/pylint/lint.py +123 -140
- data/vendor/depot_tools/third_party/pylint/pyreverse/diadefslib.py +10 -13
- data/vendor/depot_tools/third_party/pylint/pyreverse/diagrams.py +15 -4
- data/vendor/depot_tools/third_party/pylint/pyreverse/inspector.py +372 -0
- data/vendor/depot_tools/third_party/pylint/pyreverse/main.py +30 -7
- data/vendor/depot_tools/third_party/pylint/pyreverse/utils.py +80 -2
- data/vendor/depot_tools/third_party/{logilab/common → pylint/pyreverse}/vcgutils.py +19 -37
- data/vendor/depot_tools/third_party/pylint/pyreverse/writer.py +3 -4
- data/vendor/depot_tools/third_party/pylint/reporters/__init__.py +34 -18
- data/vendor/depot_tools/third_party/pylint/reporters/guireporter.py +1 -1
- data/vendor/depot_tools/third_party/pylint/reporters/html.py +10 -3
- data/vendor/depot_tools/third_party/pylint/reporters/json.py +10 -4
- data/vendor/depot_tools/third_party/pylint/reporters/text.py +94 -3
- data/vendor/depot_tools/third_party/pylint/reporters/ureports/__init__.py +106 -0
- data/vendor/depot_tools/third_party/{logilab/common → pylint/reporters}/ureports/html_writer.py +17 -57
- data/vendor/depot_tools/third_party/{logilab/common → pylint/reporters}/ureports/nodes.py +52 -74
- data/vendor/depot_tools/third_party/{logilab/common → pylint/reporters}/ureports/text_writer.py +14 -60
- data/vendor/depot_tools/third_party/pylint/testutils.py +22 -20
- data/vendor/depot_tools/third_party/pylint/utils.py +268 -44
- data/vendor/depot_tools/third_party/repo/progress.py +42 -0
- data/vendor/depot_tools/update_depot_tools +1 -1
- data/vendor/depot_tools/upload_metrics.py +25 -0
- data/vendor/depot_tools/win_toolchain/get_toolchain_if_necessary.py +45 -15
- data/vendor/depot_tools/win_toolchain/package_from_installed.py +71 -24
- data/vendor/depot_tools/yapf +1 -1
- data/vendor/depot_tools/yapf.bat +1 -1
- metadata +92 -77
- data/vendor/depot_tools/git-crsync +0 -3
- data/vendor/depot_tools/infra/config/cq.cfg +0 -32
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/apply_gerrit_ref.json +0 -29
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/apply_gerrit_ref_custom.json +0 -29
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/buildbot.json +0 -105
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/shallow.json +0 -195
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_angle_deprecated.json +0 -248
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_v8.json +0 -248
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/with_manifest_name_no_patch.json +0 -105
- data/vendor/depot_tools/recipes/recipe_modules/bot_update/resources/apply_gerrit.py +0 -33
- data/vendor/depot_tools/third_party/logilab/astroid/brain/py2pytest.py +0 -31
- data/vendor/depot_tools/third_party/logilab/astroid/brain/py2qt4.py +0 -22
- data/vendor/depot_tools/third_party/logilab/astroid/brain/py2stdlib.py +0 -334
- data/vendor/depot_tools/third_party/logilab/astroid/inspector.py +0 -273
- data/vendor/depot_tools/third_party/logilab/astroid/utils.py +0 -239
- data/vendor/depot_tools/third_party/logilab/common/LICENSE.txt +0 -339
- data/vendor/depot_tools/third_party/logilab/common/README.chromium +0 -11
- data/vendor/depot_tools/third_party/logilab/common/__init__.py +0 -175
- data/vendor/depot_tools/third_party/logilab/common/__pkginfo__.py +0 -57
- data/vendor/depot_tools/third_party/logilab/common/cache.py +0 -114
- data/vendor/depot_tools/third_party/logilab/common/changelog.py +0 -238
- data/vendor/depot_tools/third_party/logilab/common/clcommands.py +0 -334
- data/vendor/depot_tools/third_party/logilab/common/cli.py +0 -211
- data/vendor/depot_tools/third_party/logilab/common/compat.py +0 -78
- data/vendor/depot_tools/third_party/logilab/common/configuration.py +0 -1105
- data/vendor/depot_tools/third_party/logilab/common/contexts.py +0 -5
- data/vendor/depot_tools/third_party/logilab/common/corbautils.py +0 -117
- data/vendor/depot_tools/third_party/logilab/common/daemon.py +0 -101
- data/vendor/depot_tools/third_party/logilab/common/date.py +0 -335
- data/vendor/depot_tools/third_party/logilab/common/dbf.py +0 -231
- data/vendor/depot_tools/third_party/logilab/common/debugger.py +0 -214
- data/vendor/depot_tools/third_party/logilab/common/decorators.py +0 -281
- data/vendor/depot_tools/third_party/logilab/common/deprecation.py +0 -189
- data/vendor/depot_tools/third_party/logilab/common/fileutils.py +0 -404
- data/vendor/depot_tools/third_party/logilab/common/interface.py +0 -71
- data/vendor/depot_tools/third_party/logilab/common/logging_ext.py +0 -195
- data/vendor/depot_tools/third_party/logilab/common/modutils.py +0 -702
- data/vendor/depot_tools/third_party/logilab/common/optik_ext.py +0 -392
- data/vendor/depot_tools/third_party/logilab/common/optparser.py +0 -92
- data/vendor/depot_tools/third_party/logilab/common/proc.py +0 -277
- data/vendor/depot_tools/third_party/logilab/common/pyro_ext.py +0 -180
- data/vendor/depot_tools/third_party/logilab/common/pytest.py +0 -1199
- data/vendor/depot_tools/third_party/logilab/common/registry.py +0 -1119
- data/vendor/depot_tools/third_party/logilab/common/shellutils.py +0 -462
- data/vendor/depot_tools/third_party/logilab/common/sphinx_ext.py +0 -87
- data/vendor/depot_tools/third_party/logilab/common/sphinxutils.py +0 -122
- data/vendor/depot_tools/third_party/logilab/common/table.py +0 -929
- data/vendor/depot_tools/third_party/logilab/common/tasksqueue.py +0 -101
- data/vendor/depot_tools/third_party/logilab/common/testlib.py +0 -1392
- data/vendor/depot_tools/third_party/logilab/common/textutils.py +0 -537
- data/vendor/depot_tools/third_party/logilab/common/tree.py +0 -369
- data/vendor/depot_tools/third_party/logilab/common/umessage.py +0 -194
- data/vendor/depot_tools/third_party/logilab/common/ureports/__init__.py +0 -172
- data/vendor/depot_tools/third_party/logilab/common/ureports/docbook_writer.py +0 -140
- data/vendor/depot_tools/third_party/logilab/common/urllib2ext.py +0 -89
- data/vendor/depot_tools/third_party/logilab/common/visitor.py +0 -109
- data/vendor/depot_tools/third_party/logilab/common/xmlrpcutils.py +0 -131
- data/vendor/depot_tools/third_party/logilab/common/xmlutils.py +0 -61
@@ -24,40 +24,54 @@ on all nodes :
|
|
24
24
|
.next_sibling(), returning next sibling statement node
|
25
25
|
.statement(), returning the first parent node marked as statement node
|
26
26
|
.frame(), returning the first node defining a new local scope (i.e.
|
27
|
-
Module,
|
27
|
+
Module, FunctionDef or ClassDef)
|
28
28
|
.set_local(name, node), define an identifier <name> on the first parent frame,
|
29
29
|
with the node defining it. This is used by the astroid builder and should not
|
30
30
|
be used from out there.
|
31
31
|
|
32
|
-
on
|
32
|
+
on ImportFrom and Import :
|
33
33
|
.real_name(name),
|
34
34
|
|
35
35
|
|
36
36
|
"""
|
37
|
-
# pylint: disable=unused-import
|
37
|
+
# pylint: disable=unused-import,redefined-builtin
|
38
|
+
|
39
|
+
from astroid.node_classes import (
|
40
|
+
Arguments, AssignAttr, Assert, Assign,
|
41
|
+
AssignName, AugAssign, Repr, BinOp, BoolOp, Break, Call, Compare,
|
42
|
+
Comprehension, Const, Continue, Decorators, DelAttr, DelName, Delete,
|
43
|
+
Dict, Expr, Ellipsis, EmptyNode, ExceptHandler, Exec, ExtSlice, For,
|
44
|
+
ImportFrom, Attribute, Global, If, IfExp, Import, Index, Keyword,
|
45
|
+
List, Name, Nonlocal, Pass, Print, Raise, Return, Set, Slice, Starred, Subscript,
|
46
|
+
TryExcept, TryFinally, Tuple, UnaryOp, While, With, Yield, YieldFrom,
|
47
|
+
const_factory,
|
48
|
+
AsyncFor, Await, AsyncWith,
|
49
|
+
# Backwards-compatibility aliases
|
50
|
+
Backquote, Discard, AssName, AssAttr, Getattr, CallFunc, From,
|
51
|
+
# Node not present in the builtin ast module.
|
52
|
+
DictUnpack,
|
53
|
+
)
|
54
|
+
from astroid.scoped_nodes import (
|
55
|
+
Module, GeneratorExp, Lambda, DictComp,
|
56
|
+
ListComp, SetComp, FunctionDef, ClassDef,
|
57
|
+
AsyncFunctionDef,
|
58
|
+
# Backwards-compatibility aliases
|
59
|
+
Class, Function, GenExpr,
|
60
|
+
)
|
38
61
|
|
39
|
-
__docformat__ = "restructuredtext en"
|
40
62
|
|
41
|
-
from astroid.node_classes import Arguments, AssAttr, Assert, Assign, \
|
42
|
-
AssName, AugAssign, Backquote, BinOp, BoolOp, Break, CallFunc, Compare, \
|
43
|
-
Comprehension, Const, Continue, Decorators, DelAttr, DelName, Delete, \
|
44
|
-
Dict, Discard, Ellipsis, EmptyNode, ExceptHandler, Exec, ExtSlice, For, \
|
45
|
-
From, Getattr, Global, If, IfExp, Import, Index, Keyword, \
|
46
|
-
List, Name, Nonlocal, Pass, Print, Raise, Return, Set, Slice, Starred, Subscript, \
|
47
|
-
TryExcept, TryFinally, Tuple, UnaryOp, While, With, Yield, YieldFrom, \
|
48
|
-
const_factory
|
49
|
-
from astroid.scoped_nodes import Module, GenExpr, Lambda, DictComp, \
|
50
|
-
ListComp, SetComp, Function, Class
|
51
63
|
|
52
64
|
ALL_NODE_CLASSES = (
|
53
|
-
|
54
|
-
|
55
|
-
|
65
|
+
AsyncFunctionDef, AsyncFor, AsyncWith, Await,
|
66
|
+
|
67
|
+
Arguments, AssignAttr, Assert, Assign, AssignName, AugAssign,
|
68
|
+
Repr, BinOp, BoolOp, Break,
|
69
|
+
Call, ClassDef, Compare, Comprehension, Const, Continue,
|
56
70
|
Decorators, DelAttr, DelName, Delete,
|
57
|
-
Dict, DictComp,
|
71
|
+
Dict, DictComp, DictUnpack, Expr,
|
58
72
|
Ellipsis, EmptyNode, ExceptHandler, Exec, ExtSlice,
|
59
|
-
For,
|
60
|
-
|
73
|
+
For, ImportFrom, FunctionDef,
|
74
|
+
Attribute, GeneratorExp, Global,
|
61
75
|
If, IfExp, Import, Index,
|
62
76
|
Keyword,
|
63
77
|
Lambda, List, ListComp,
|
@@ -69,6 +83,5 @@ ALL_NODE_CLASSES = (
|
|
69
83
|
TryExcept, TryFinally, Tuple,
|
70
84
|
UnaryOp,
|
71
85
|
While, With,
|
72
|
-
Yield, YieldFrom
|
86
|
+
Yield, YieldFrom,
|
73
87
|
)
|
74
|
-
|
@@ -0,0 +1,186 @@
|
|
1
|
+
# copyright 2003-2015 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
|
2
|
+
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
|
3
|
+
#
|
4
|
+
# This file is part of astroid.
|
5
|
+
#
|
6
|
+
# astroid is free software: you can redistribute it and/or modify it
|
7
|
+
# under the terms of the GNU Lesser General Public License as published by the
|
8
|
+
# Free Software Foundation, either version 2.1 of the License, or (at your
|
9
|
+
# option) any later version.
|
10
|
+
#
|
11
|
+
# astroid is distributed in the hope that it will be useful, but
|
12
|
+
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
13
|
+
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
14
|
+
# for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU Lesser General Public License along
|
17
|
+
# with astroid. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
|
19
|
+
"""
|
20
|
+
Inference objects are a way to represent composite AST nodes,
|
21
|
+
which are used only as inference results, so they can't be found in the
|
22
|
+
code tree. For instance, inferring the following frozenset use, leads to an
|
23
|
+
inferred FrozenSet:
|
24
|
+
|
25
|
+
CallFunc(func=Name('frozenset'), args=Tuple(...))
|
26
|
+
|
27
|
+
"""
|
28
|
+
|
29
|
+
import six
|
30
|
+
|
31
|
+
from astroid import MANAGER
|
32
|
+
from astroid.bases import (
|
33
|
+
BUILTINS, NodeNG, Instance, _infer_stmts,
|
34
|
+
BoundMethod, _is_property
|
35
|
+
)
|
36
|
+
from astroid.decorators import cachedproperty
|
37
|
+
from astroid.exceptions import (
|
38
|
+
SuperError, SuperArgumentTypeError,
|
39
|
+
NotFoundError, MroError
|
40
|
+
)
|
41
|
+
from astroid.node_classes import const_factory
|
42
|
+
from astroid.scoped_nodes import ClassDef, FunctionDef
|
43
|
+
from astroid.mixins import ParentAssignTypeMixin
|
44
|
+
|
45
|
+
|
46
|
+
class FrozenSet(NodeNG, Instance, ParentAssignTypeMixin):
|
47
|
+
"""class representing a FrozenSet composite node"""
|
48
|
+
|
49
|
+
def __init__(self, elts=None):
|
50
|
+
if elts is None:
|
51
|
+
self.elts = []
|
52
|
+
else:
|
53
|
+
self.elts = [const_factory(e) for e in elts]
|
54
|
+
|
55
|
+
def pytype(self):
|
56
|
+
return '%s.frozenset' % BUILTINS
|
57
|
+
|
58
|
+
def itered(self):
|
59
|
+
return self.elts
|
60
|
+
|
61
|
+
def _infer(self, context=None):
|
62
|
+
yield self
|
63
|
+
|
64
|
+
@cachedproperty
|
65
|
+
def _proxied(self):
|
66
|
+
builtins = MANAGER.astroid_cache[BUILTINS]
|
67
|
+
return builtins.getattr('frozenset')[0]
|
68
|
+
|
69
|
+
|
70
|
+
class Super(NodeNG):
|
71
|
+
"""Proxy class over a super call.
|
72
|
+
|
73
|
+
This class offers almost the same behaviour as Python's super,
|
74
|
+
which is MRO lookups for retrieving attributes from the parents.
|
75
|
+
|
76
|
+
The *mro_pointer* is the place in the MRO from where we should
|
77
|
+
start looking, not counting it. *mro_type* is the object which
|
78
|
+
provides the MRO, it can be both a type or an instance.
|
79
|
+
*self_class* is the class where the super call is, while
|
80
|
+
*scope* is the function where the super call is.
|
81
|
+
"""
|
82
|
+
|
83
|
+
def __init__(self, mro_pointer, mro_type, self_class, scope):
|
84
|
+
self.type = mro_type
|
85
|
+
self.mro_pointer = mro_pointer
|
86
|
+
self._class_based = False
|
87
|
+
self._self_class = self_class
|
88
|
+
self._scope = scope
|
89
|
+
self._model = {
|
90
|
+
'__thisclass__': self.mro_pointer,
|
91
|
+
'__self_class__': self._self_class,
|
92
|
+
'__self__': self.type,
|
93
|
+
'__class__': self._proxied,
|
94
|
+
}
|
95
|
+
|
96
|
+
def _infer(self, context=None):
|
97
|
+
yield self
|
98
|
+
|
99
|
+
def super_mro(self):
|
100
|
+
"""Get the MRO which will be used to lookup attributes in this super."""
|
101
|
+
if not isinstance(self.mro_pointer, ClassDef):
|
102
|
+
raise SuperArgumentTypeError("The first super argument must be type.")
|
103
|
+
|
104
|
+
if isinstance(self.type, ClassDef):
|
105
|
+
# `super(type, type)`, most likely in a class method.
|
106
|
+
self._class_based = True
|
107
|
+
mro_type = self.type
|
108
|
+
else:
|
109
|
+
mro_type = getattr(self.type, '_proxied', None)
|
110
|
+
if not isinstance(mro_type, (Instance, ClassDef)):
|
111
|
+
raise SuperArgumentTypeError("super(type, obj): obj must be an "
|
112
|
+
"instance or subtype of type")
|
113
|
+
|
114
|
+
if not mro_type.newstyle:
|
115
|
+
raise SuperError("Unable to call super on old-style classes.")
|
116
|
+
|
117
|
+
mro = mro_type.mro()
|
118
|
+
if self.mro_pointer not in mro:
|
119
|
+
raise SuperArgumentTypeError("super(type, obj): obj must be an "
|
120
|
+
"instance or subtype of type")
|
121
|
+
|
122
|
+
index = mro.index(self.mro_pointer)
|
123
|
+
return mro[index + 1:]
|
124
|
+
|
125
|
+
@cachedproperty
|
126
|
+
def _proxied(self):
|
127
|
+
builtins = MANAGER.astroid_cache[BUILTINS]
|
128
|
+
return builtins.getattr('super')[0]
|
129
|
+
|
130
|
+
def pytype(self):
|
131
|
+
return '%s.super' % BUILTINS
|
132
|
+
|
133
|
+
def display_type(self):
|
134
|
+
return 'Super of'
|
135
|
+
|
136
|
+
@property
|
137
|
+
def name(self):
|
138
|
+
"""Get the name of the MRO pointer."""
|
139
|
+
return self.mro_pointer.name
|
140
|
+
|
141
|
+
def igetattr(self, name, context=None):
|
142
|
+
"""Retrieve the inferred values of the given attribute name."""
|
143
|
+
|
144
|
+
local_name = self._model.get(name)
|
145
|
+
if local_name:
|
146
|
+
yield local_name
|
147
|
+
return
|
148
|
+
|
149
|
+
try:
|
150
|
+
mro = self.super_mro()
|
151
|
+
except (MroError, SuperError) as exc:
|
152
|
+
# Don't let invalid MROs or invalid super calls
|
153
|
+
# to leak out as is from this function.
|
154
|
+
six.raise_from(NotFoundError, exc)
|
155
|
+
|
156
|
+
found = False
|
157
|
+
for cls in mro:
|
158
|
+
if name not in cls._locals:
|
159
|
+
continue
|
160
|
+
|
161
|
+
found = True
|
162
|
+
for infered in _infer_stmts([cls[name]], context, frame=self):
|
163
|
+
if not isinstance(infered, FunctionDef):
|
164
|
+
yield infered
|
165
|
+
continue
|
166
|
+
|
167
|
+
# We can obtain different descriptors from a super depending
|
168
|
+
# on what we are accessing and where the super call is.
|
169
|
+
if infered.type == 'classmethod':
|
170
|
+
yield BoundMethod(infered, cls)
|
171
|
+
elif self._scope.type == 'classmethod' and infered.type == 'method':
|
172
|
+
yield infered
|
173
|
+
elif self._class_based or infered.type == 'staticmethod':
|
174
|
+
yield infered
|
175
|
+
elif _is_property(infered):
|
176
|
+
# TODO: support other descriptors as well.
|
177
|
+
for value in infered.infer_call_result(self, context):
|
178
|
+
yield value
|
179
|
+
else:
|
180
|
+
yield BoundMethod(infered, cls)
|
181
|
+
|
182
|
+
if not found:
|
183
|
+
raise NotFoundError(name)
|
184
|
+
|
185
|
+
def getattr(self, name, context=None):
|
186
|
+
return list(self.igetattr(name, context=context))
|
@@ -19,28 +19,31 @@
|
|
19
19
|
where it makes sense.
|
20
20
|
"""
|
21
21
|
|
22
|
-
__doctype__ = "restructuredtext en"
|
23
22
|
import collections
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
from astroid
|
28
|
-
|
29
|
-
from astroid
|
23
|
+
import operator
|
24
|
+
import sys
|
25
|
+
|
26
|
+
from astroid import arguments
|
27
|
+
from astroid import bases
|
28
|
+
from astroid import context as contextmod
|
29
|
+
from astroid import exceptions
|
30
|
+
from astroid import node_classes
|
30
31
|
from astroid import nodes
|
32
|
+
from astroid import util
|
31
33
|
|
32
34
|
BIN_OP_METHOD = {'+': '__add__',
|
33
35
|
'-': '__sub__',
|
34
36
|
'/': '__div__',
|
35
37
|
'//': '__floordiv__',
|
36
38
|
'*': '__mul__',
|
37
|
-
'**': '
|
39
|
+
'**': '__pow__',
|
38
40
|
'%': '__mod__',
|
39
41
|
'&': '__and__',
|
40
42
|
'|': '__or__',
|
41
43
|
'^': '__xor__',
|
42
44
|
'<<': '__lshift__',
|
43
45
|
'>>': '__rshift__',
|
46
|
+
'@': '__matmul__'
|
44
47
|
}
|
45
48
|
|
46
49
|
UNARY_OP_METHOD = {'+': '__pos__',
|
@@ -53,7 +56,7 @@ UNARY_OP_METHOD = {'+': '__pos__',
|
|
53
56
|
|
54
57
|
def tl_infer_unary_op(self, operator):
|
55
58
|
if operator == 'not':
|
56
|
-
return const_factory(not bool(self.elts))
|
59
|
+
return node_classes.const_factory(not bool(self.elts))
|
57
60
|
raise TypeError() # XXX log unsupported operation
|
58
61
|
nodes.Tuple.infer_unary_op = tl_infer_unary_op
|
59
62
|
nodes.List.infer_unary_op = tl_infer_unary_op
|
@@ -61,19 +64,19 @@ nodes.List.infer_unary_op = tl_infer_unary_op
|
|
61
64
|
|
62
65
|
def dict_infer_unary_op(self, operator):
|
63
66
|
if operator == 'not':
|
64
|
-
return const_factory(not bool(self.items))
|
67
|
+
return node_classes.const_factory(not bool(self.items))
|
65
68
|
raise TypeError() # XXX log unsupported operation
|
66
69
|
nodes.Dict.infer_unary_op = dict_infer_unary_op
|
67
70
|
|
68
71
|
|
69
72
|
def const_infer_unary_op(self, operator):
|
70
73
|
if operator == 'not':
|
71
|
-
return const_factory(not self.value)
|
74
|
+
return node_classes.const_factory(not self.value)
|
72
75
|
# XXX log potentially raised TypeError
|
73
76
|
elif operator == '+':
|
74
|
-
return const_factory(+self.value)
|
77
|
+
return node_classes.const_factory(+self.value)
|
75
78
|
else: # operator == '-':
|
76
|
-
return const_factory(-self.value)
|
79
|
+
return node_classes.const_factory(-self.value)
|
77
80
|
nodes.Const.infer_unary_op = const_infer_unary_op
|
78
81
|
|
79
82
|
|
@@ -92,17 +95,23 @@ BIN_OP_IMPL = {'+': lambda a, b: a + b,
|
|
92
95
|
'<<': lambda a, b: a << b,
|
93
96
|
'>>': lambda a, b: a >> b,
|
94
97
|
}
|
98
|
+
|
99
|
+
if sys.version_info >= (3, 5):
|
100
|
+
# MatMult is available since Python 3.5+.
|
101
|
+
BIN_OP_IMPL['@'] = operator.matmul
|
102
|
+
|
95
103
|
for key, impl in list(BIN_OP_IMPL.items()):
|
96
104
|
BIN_OP_IMPL[key+'='] = impl
|
97
105
|
|
98
|
-
def const_infer_binary_op(self,
|
106
|
+
def const_infer_binary_op(self, binop, other, context):
|
107
|
+
operator = binop.op
|
99
108
|
for other in other.infer(context):
|
100
109
|
if isinstance(other, nodes.Const):
|
101
110
|
try:
|
102
111
|
impl = BIN_OP_IMPL[operator]
|
103
112
|
|
104
113
|
try:
|
105
|
-
yield const_factory(impl(self.value, other.value))
|
114
|
+
yield node_classes.const_factory(impl(self.value, other.value))
|
106
115
|
except Exception:
|
107
116
|
# ArithmeticError is not enough: float >> float is a TypeError
|
108
117
|
# TODO : let pylint know about the problem
|
@@ -110,68 +119,88 @@ def const_infer_binary_op(self, operator, other, context):
|
|
110
119
|
except TypeError:
|
111
120
|
# XXX log TypeError
|
112
121
|
continue
|
113
|
-
elif other is YES:
|
122
|
+
elif other is util.YES:
|
114
123
|
yield other
|
115
124
|
else:
|
116
125
|
try:
|
117
|
-
for val in other.infer_binary_op(
|
126
|
+
for val in other.infer_binary_op(binop, self, context):
|
118
127
|
yield val
|
119
128
|
except AttributeError:
|
120
|
-
yield YES
|
121
|
-
nodes.Const.infer_binary_op =
|
129
|
+
yield util.YES
|
130
|
+
nodes.Const.infer_binary_op = bases.yes_if_nothing_inferred(const_infer_binary_op)
|
131
|
+
|
132
|
+
|
122
133
|
|
134
|
+
def _multiply_seq_by_int(self, binop, other, context):
|
135
|
+
node = self.__class__()
|
136
|
+
node.parent = binop
|
137
|
+
elts = []
|
138
|
+
for elt in self.elts:
|
139
|
+
infered = util.safe_infer(elt, context)
|
140
|
+
if infered is None:
|
141
|
+
infered = util.YES
|
142
|
+
elts.append(infered)
|
143
|
+
node.elts = elts * other.value
|
144
|
+
return node
|
123
145
|
|
124
|
-
|
146
|
+
|
147
|
+
def _filter_uninferable_nodes(elts, context):
|
148
|
+
for elt in elts:
|
149
|
+
if elt is util.YES:
|
150
|
+
yield elt
|
151
|
+
else:
|
152
|
+
for inferred in elt.infer(context):
|
153
|
+
yield inferred
|
154
|
+
|
155
|
+
|
156
|
+
def tl_infer_binary_op(self, binop, other, context):
|
157
|
+
operator = binop.op
|
125
158
|
for other in other.infer(context):
|
126
159
|
if isinstance(other, self.__class__) and operator == '+':
|
127
160
|
node = self.__class__()
|
128
|
-
|
129
|
-
|
130
|
-
elts +=
|
131
|
-
if not n is YES]
|
161
|
+
node.parent = binop
|
162
|
+
elts = list(_filter_uninferable_nodes(self.elts, context))
|
163
|
+
elts += list(_filter_uninferable_nodes(other.elts, context))
|
132
164
|
node.elts = elts
|
133
165
|
yield node
|
134
166
|
elif isinstance(other, nodes.Const) and operator == '*':
|
135
167
|
if not isinstance(other.value, int):
|
136
|
-
yield YES
|
168
|
+
yield util.YES
|
137
169
|
continue
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
node.elts = elts
|
142
|
-
yield node
|
143
|
-
elif isinstance(other, Instance) and not isinstance(other, nodes.Const):
|
144
|
-
yield YES
|
170
|
+
yield _multiply_seq_by_int(self, binop, other, context)
|
171
|
+
elif isinstance(other, bases.Instance) and not isinstance(other, nodes.Const):
|
172
|
+
yield util.YES
|
145
173
|
# XXX else log TypeError
|
146
|
-
nodes.Tuple.infer_binary_op =
|
147
|
-
nodes.List.infer_binary_op =
|
174
|
+
nodes.Tuple.infer_binary_op = bases.yes_if_nothing_inferred(tl_infer_binary_op)
|
175
|
+
nodes.List.infer_binary_op = bases.yes_if_nothing_inferred(tl_infer_binary_op)
|
148
176
|
|
149
177
|
|
150
|
-
def dict_infer_binary_op(self,
|
178
|
+
def dict_infer_binary_op(self, binop, other, context):
|
151
179
|
for other in other.infer(context):
|
152
|
-
if isinstance(other, Instance) and isinstance(other._proxied, nodes.
|
153
|
-
yield YES
|
180
|
+
if isinstance(other, bases.Instance) and isinstance(other._proxied, nodes.ClassDef):
|
181
|
+
yield util.YES
|
154
182
|
# XXX else log TypeError
|
155
|
-
nodes.Dict.infer_binary_op =
|
183
|
+
nodes.Dict.infer_binary_op = bases.yes_if_nothing_inferred(dict_infer_binary_op)
|
156
184
|
|
157
|
-
def instance_infer_binary_op(self,
|
185
|
+
def instance_infer_binary_op(self, binop, other, context):
|
186
|
+
operator = binop.op
|
158
187
|
try:
|
159
188
|
methods = self.getattr(BIN_OP_METHOD[operator])
|
160
|
-
except (NotFoundError, KeyError):
|
189
|
+
except (exceptions.NotFoundError, KeyError):
|
161
190
|
# Unknown operator
|
162
|
-
yield YES
|
191
|
+
yield util.YES
|
163
192
|
else:
|
164
193
|
for method in methods:
|
165
|
-
if not isinstance(method, nodes.
|
194
|
+
if not isinstance(method, nodes.FunctionDef):
|
166
195
|
continue
|
167
196
|
for result in method.infer_call_result(self, context):
|
168
|
-
if result is not YES:
|
197
|
+
if result is not util.YES:
|
169
198
|
yield result
|
170
199
|
# We are interested only in the first infered method,
|
171
200
|
# don't go looking in the rest of the methods of the ancestors.
|
172
201
|
break
|
173
202
|
|
174
|
-
Instance.infer_binary_op =
|
203
|
+
bases.Instance.infer_binary_op = bases.yes_if_nothing_inferred(instance_infer_binary_op)
|
175
204
|
|
176
205
|
|
177
206
|
# assignment ##################################################################
|
@@ -192,7 +221,7 @@ def _resolve_looppart(parts, asspath, context):
|
|
192
221
|
asspath = asspath[:]
|
193
222
|
index = asspath.pop(0)
|
194
223
|
for part in parts:
|
195
|
-
if part is YES:
|
224
|
+
if part is util.YES:
|
196
225
|
continue
|
197
226
|
# XXX handle __iter__ and log potentially detected errors
|
198
227
|
if not hasattr(part, 'itered'):
|
@@ -212,104 +241,125 @@ def _resolve_looppart(parts, asspath, context):
|
|
212
241
|
# we achieved to resolved the assignment path,
|
213
242
|
# don't infer the last part
|
214
243
|
yield assigned
|
215
|
-
elif assigned is YES:
|
244
|
+
elif assigned is util.YES:
|
216
245
|
break
|
217
246
|
else:
|
218
247
|
# we are not yet on the last part of the path
|
219
248
|
# search on each possibly inferred value
|
220
249
|
try:
|
221
|
-
for
|
250
|
+
for inferred in _resolve_looppart(assigned.infer(context),
|
222
251
|
asspath, context):
|
223
|
-
yield
|
224
|
-
except InferenceError:
|
252
|
+
yield inferred
|
253
|
+
except exceptions.InferenceError:
|
225
254
|
break
|
226
255
|
|
227
256
|
|
228
|
-
|
257
|
+
@bases.raise_if_nothing_inferred
|
258
|
+
def for_assigned_stmts(self, node=None, context=None, asspath=None):
|
229
259
|
if asspath is None:
|
230
260
|
for lst in self.iter.infer(context):
|
231
261
|
if isinstance(lst, (nodes.Tuple, nodes.List)):
|
232
262
|
for item in lst.elts:
|
233
263
|
yield item
|
234
264
|
else:
|
235
|
-
for
|
265
|
+
for inferred in _resolve_looppart(self.iter.infer(context),
|
236
266
|
asspath, context):
|
237
|
-
yield
|
267
|
+
yield inferred
|
238
268
|
|
239
|
-
nodes.For.assigned_stmts =
|
240
|
-
nodes.Comprehension.assigned_stmts =
|
269
|
+
nodes.For.assigned_stmts = for_assigned_stmts
|
270
|
+
nodes.Comprehension.assigned_stmts = for_assigned_stmts
|
241
271
|
|
242
272
|
|
243
|
-
def
|
273
|
+
def sequence_assigned_stmts(self, node=None, context=None, asspath=None):
|
244
274
|
if asspath is None:
|
245
275
|
asspath = []
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
276
|
+
try:
|
277
|
+
index = self.elts.index(node)
|
278
|
+
except ValueError:
|
279
|
+
util.reraise(exceptions.InferenceError(
|
280
|
+
'Tried to retrieve a node {node!r} which does not exist',
|
281
|
+
node=self, assign_path=asspath, context=context))
|
282
|
+
|
283
|
+
asspath.insert(0, index)
|
284
|
+
return self.parent.assigned_stmts(node=self, context=context, asspath=asspath)
|
285
|
+
|
286
|
+
nodes.Tuple.assigned_stmts = sequence_assigned_stmts
|
287
|
+
nodes.List.assigned_stmts = sequence_assigned_stmts
|
250
288
|
|
251
289
|
|
252
|
-
def assend_assigned_stmts(self, context=None):
|
253
|
-
return self.parent.assigned_stmts(self, context=context)
|
254
|
-
nodes.
|
255
|
-
nodes.
|
290
|
+
def assend_assigned_stmts(self, node=None, context=None, asspath=None):
|
291
|
+
return self.parent.assigned_stmts(node=self, context=context)
|
292
|
+
nodes.AssignName.assigned_stmts = assend_assigned_stmts
|
293
|
+
nodes.AssignAttr.assigned_stmts = assend_assigned_stmts
|
256
294
|
|
257
295
|
|
258
296
|
def _arguments_infer_argname(self, name, context):
|
259
297
|
# arguments information may be missing, in which case we can't do anything
|
260
298
|
# more
|
261
299
|
if not (self.args or self.vararg or self.kwarg):
|
262
|
-
yield YES
|
300
|
+
yield util.YES
|
263
301
|
return
|
264
302
|
# first argument of instance/class method
|
265
303
|
if self.args and getattr(self.args[0], 'name', None) == name:
|
266
304
|
functype = self.parent.type
|
267
305
|
if functype == 'method':
|
268
|
-
yield Instance(self.parent.parent.frame())
|
306
|
+
yield bases.Instance(self.parent.parent.frame())
|
269
307
|
return
|
270
308
|
if functype == 'classmethod':
|
271
309
|
yield self.parent.parent.frame()
|
272
310
|
return
|
311
|
+
|
312
|
+
if context and context.callcontext:
|
313
|
+
call_site = arguments.CallSite(context.callcontext)
|
314
|
+
for value in call_site.infer_argument(self.parent, name, context):
|
315
|
+
yield value
|
316
|
+
return
|
317
|
+
|
318
|
+
# TODO: just provide the type here, no need to have an empty Dict.
|
273
319
|
if name == self.vararg:
|
274
|
-
vararg = const_factory(())
|
320
|
+
vararg = node_classes.const_factory(())
|
275
321
|
vararg.parent = self
|
276
322
|
yield vararg
|
277
323
|
return
|
278
324
|
if name == self.kwarg:
|
279
|
-
kwarg = const_factory({})
|
325
|
+
kwarg = node_classes.const_factory({})
|
280
326
|
kwarg.parent = self
|
281
327
|
yield kwarg
|
282
328
|
return
|
283
329
|
# if there is a default value, yield it. And then yield YES to reflect
|
284
330
|
# we can't guess given argument value
|
285
331
|
try:
|
286
|
-
context = copy_context(context)
|
287
|
-
for
|
288
|
-
yield
|
289
|
-
yield YES
|
290
|
-
except NoDefault:
|
291
|
-
yield YES
|
332
|
+
context = contextmod.copy_context(context)
|
333
|
+
for inferred in self.default_value(name).infer(context):
|
334
|
+
yield inferred
|
335
|
+
yield util.YES
|
336
|
+
except exceptions.NoDefault:
|
337
|
+
yield util.YES
|
292
338
|
|
293
339
|
|
294
|
-
def arguments_assigned_stmts(self, node, context, asspath=None):
|
340
|
+
def arguments_assigned_stmts(self, node=None, context=None, asspath=None):
|
295
341
|
if context.callcontext:
|
296
342
|
# reset call context/name
|
297
343
|
callcontext = context.callcontext
|
298
|
-
context = copy_context(context)
|
344
|
+
context = contextmod.copy_context(context)
|
299
345
|
context.callcontext = None
|
300
|
-
|
346
|
+
args = arguments.CallSite(callcontext)
|
347
|
+
return args.infer_argument(self.parent, node.name, context)
|
301
348
|
return _arguments_infer_argname(self, node.name, context)
|
349
|
+
|
302
350
|
nodes.Arguments.assigned_stmts = arguments_assigned_stmts
|
303
351
|
|
304
352
|
|
305
|
-
|
353
|
+
@bases.raise_if_nothing_inferred
|
354
|
+
def assign_assigned_stmts(self, node=None, context=None, asspath=None):
|
306
355
|
if not asspath:
|
307
356
|
yield self.value
|
308
357
|
return
|
309
|
-
for
|
310
|
-
yield
|
311
|
-
|
312
|
-
nodes.
|
358
|
+
for inferred in _resolve_asspart(self.value.infer(context), asspath, context):
|
359
|
+
yield inferred
|
360
|
+
|
361
|
+
nodes.Assign.assigned_stmts = assign_assigned_stmts
|
362
|
+
nodes.AugAssign.assigned_stmts = assign_assigned_stmts
|
313
363
|
|
314
364
|
|
315
365
|
def _resolve_asspart(parts, asspath, context):
|
@@ -328,28 +378,30 @@ def _resolve_asspart(parts, asspath, context):
|
|
328
378
|
# we achieved to resolved the assignment path, don't infer the
|
329
379
|
# last part
|
330
380
|
yield assigned
|
331
|
-
elif assigned is YES:
|
381
|
+
elif assigned is util.YES:
|
332
382
|
return
|
333
383
|
else:
|
334
384
|
# we are not yet on the last part of the path search on each
|
335
385
|
# possibly inferred value
|
336
386
|
try:
|
337
|
-
for
|
387
|
+
for inferred in _resolve_asspart(assigned.infer(context),
|
338
388
|
asspath, context):
|
339
|
-
yield
|
340
|
-
except InferenceError:
|
389
|
+
yield inferred
|
390
|
+
except exceptions.InferenceError:
|
341
391
|
return
|
342
392
|
|
343
393
|
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
394
|
+
@bases.raise_if_nothing_inferred
|
395
|
+
def excepthandler_assigned_stmts(self, node=None, context=None, asspath=None):
|
396
|
+
for assigned in node_classes.unpack_infer(self.type):
|
397
|
+
if isinstance(assigned, nodes.ClassDef):
|
398
|
+
assigned = bases.Instance(assigned)
|
348
399
|
yield assigned
|
349
|
-
nodes.ExceptHandler.assigned_stmts =
|
400
|
+
nodes.ExceptHandler.assigned_stmts = bases.raise_if_nothing_inferred(excepthandler_assigned_stmts)
|
350
401
|
|
351
402
|
|
352
|
-
|
403
|
+
@bases.raise_if_nothing_inferred
|
404
|
+
def with_assigned_stmts(self, node=None, context=None, asspath=None):
|
353
405
|
if asspath is None:
|
354
406
|
for _, vars in self.items:
|
355
407
|
if vars is None:
|
@@ -358,13 +410,14 @@ def with_assigned_stmts(self, node, context=None, asspath=None):
|
|
358
410
|
if isinstance(lst, (nodes.Tuple, nodes.List)):
|
359
411
|
for item in lst.nodes:
|
360
412
|
yield item
|
361
|
-
nodes.With.assigned_stmts =
|
413
|
+
nodes.With.assigned_stmts = with_assigned_stmts
|
362
414
|
|
363
415
|
|
416
|
+
@bases.yes_if_nothing_inferred
|
364
417
|
def starred_assigned_stmts(self, node=None, context=None, asspath=None):
|
365
418
|
stmt = self.statement()
|
366
419
|
if not isinstance(stmt, (nodes.Assign, nodes.For)):
|
367
|
-
raise InferenceError()
|
420
|
+
raise exceptions.InferenceError()
|
368
421
|
|
369
422
|
if isinstance(stmt, nodes.Assign):
|
370
423
|
value = stmt.value
|
@@ -372,24 +425,24 @@ def starred_assigned_stmts(self, node=None, context=None, asspath=None):
|
|
372
425
|
|
373
426
|
if sum(1 for node in lhs.nodes_of_class(nodes.Starred)) > 1:
|
374
427
|
# Too many starred arguments in the expression.
|
375
|
-
raise InferenceError()
|
428
|
+
raise exceptions.InferenceError()
|
376
429
|
|
377
430
|
if context is None:
|
378
|
-
context = InferenceContext()
|
431
|
+
context = contextmod.InferenceContext()
|
379
432
|
try:
|
380
433
|
rhs = next(value.infer(context))
|
381
|
-
except InferenceError:
|
382
|
-
yield YES
|
434
|
+
except exceptions.InferenceError:
|
435
|
+
yield util.YES
|
383
436
|
return
|
384
|
-
if rhs is YES or not hasattr(rhs, 'elts'):
|
437
|
+
if rhs is util.YES or not hasattr(rhs, 'elts'):
|
385
438
|
# Not interested in inferred values without elts.
|
386
|
-
yield YES
|
439
|
+
yield util.YES
|
387
440
|
return
|
388
441
|
|
389
442
|
elts = collections.deque(rhs.elts[:])
|
390
443
|
if len(lhs.elts) > len(rhs.elts):
|
391
444
|
# a, *b, c = (1, 2)
|
392
|
-
raise InferenceError()
|
445
|
+
raise exceptions.InferenceError()
|
393
446
|
|
394
447
|
# Unpack iteratively the values from the rhs of the assignment,
|
395
448
|
# until the find the starred node. What will remain will
|
@@ -408,8 +461,10 @@ def starred_assigned_stmts(self, node=None, context=None, asspath=None):
|
|
408
461
|
elts.pop()
|
409
462
|
continue
|
410
463
|
# We're done
|
411
|
-
|
412
|
-
|
464
|
+
packed = nodes.List()
|
465
|
+
packed.elts = elts
|
466
|
+
packed.parent = self
|
467
|
+
yield packed
|
413
468
|
break
|
414
469
|
|
415
470
|
nodes.Starred.assigned_stmts = starred_assigned_stmts
|