| Commit message (Collapse) | Author | Age |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
function call.
This is the 2nd attempt at this commit. The first attempt (https://github.com/bazelbuild/bazel/commit/f1013485d41efd8503f9d4f937e17d1b4bc91ed3) was rolled back because it introduced the following two bugs:
(1) The side effects of Environment#enterScope are relevant: it creates and stores a new Continuation that has a reference to the set currently referenced by 'knownGlobalVariables', and then overwrites the value of the variable. When there are e.g. nested function calls, 'knownGlobalVariables' will be wrong in the Environment used to stage the inner call (see the added test for an example).
(2) The finally block in UserDefinedFunction#call assumes the env.enterScope was called. Because of the EvalException (incorrectly) thrown due to (1), this is no longer true.
I restructured the code such that (2) isn't possible and I also added a unit test that would have caught the two bugs.
In my first attempt, I was doing too much - I was also trying to save the CPU-costs in the env.update call (dispatches to the just-created lexical frame, and calls LexicalFrame#put, which does an unnecessary mutability sanity check, etc) and in doing so completely missed the above bugs. Sorry.
RELNOTES: None
PiperOrigin-RevId: 188411737
|
|
|
|
|
|
|
| |
checks are unnecessary by construction; see the codepaths that construct SkylarkInfo instances.
RELNOTES: None
PiperOrigin-RevId: 188373688
|
|
|
|
| |
PiperOrigin-RevId: 188367672
|
|
|
|
|
|
|
|
|
| |
function call overhead of the morally no-op Callstack#push/pop was profiled to be ~1.4% CPU in a benchmark of loading a BUILD file that was particularly heavy in Skylark function calls.
Alternatives considered: writing code that I hoped would be more amenable to the JIT choosing to inline the function call. I couldn't get this to work.
RELNOTES: None
PiperOrigin-RevId: 188350132
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
*** Reason for rollback ***
Introduced a bug in skylark that caused intellij TAP test to fail. The bug was not caught by any skylark/blaze/bazel tests.
*** Original change description ***
Optimize GC churn of parameter bindings performed before each user defined function call.
RELNOTES: None
PiperOrigin-RevId: 188249713
|
|
|
|
|
| |
RELNOTES: None.
PiperOrigin-RevId: 188201686
|
|
|
|
|
|
|
| |
function call.
RELNOTES: None
PiperOrigin-RevId: 188199514
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
It was previously assumed that safety wasn't needed because
1) all builtins should be registered in static initializer blocks, and
2) all retrievals should occur during Skylark evaluation, after static initialization completes.
It turns out these assumptions aren't actually true (Who would've thunk it!). SkylarkActionFactory has been observed to be initialized as late as analysis time, and retrievals occur as early as constructing a PackageFactory (when scanning the native module). The failure mode is particularly ugly: Random Skylark method lookups will fail non-deterministically.
This change guards against this by making the builtins registry implement a form of freezing. Before freezing, reads and writes are allowed and are synchronized. After freezing, only reads are allowed and they are unsynchronized for performance. BlazeRuntime is responsible for flipping the bit, and for ensuring classes like SkylarkActionFactory run their initialization by that point. Unit tests don't need to worry, since they just stay unfrozen and synchronized throughout.
RELNOTES: None
PiperOrigin-RevId: 188080136
|
|
|
|
|
| |
RELNOTES: None.
PiperOrigin-RevId: 188038131
|
|
|
|
|
|
| |
Needed for Attribute serialization.
PiperOrigin-RevId: 187907727
|
|
|
|
|
|
|
|
| |
ObjectCodec into a MEMOIZE_AFTER MemoizingCodec. I think that this is safe, because all the codecs that are being wrapped this way weren't memoizing anything internally that I could see.
In order to @AutoCodec the WithValue type, which is generic and can have null elements in lists, add functionality to @AutoCodec to deal with generic type static instantiators, matching generic type arguments (although I'm not sure why that wasn't already working), and null elements in lists.
PiperOrigin-RevId: 187740461
|
|
|
|
|
|
|
|
|
| |
objc provider skylark fields.
This flag is not fully implemented -- there should also be a way to disable the provider getters using this flag, but, since @SkylarkCallable does not allow for evaluation of SkylarkSemantics, this is not yet possible.
RELNOTES: None.
PiperOrigin-RevId: 187542004
|
|
|
|
|
| |
RELNOTES: None.
PiperOrigin-RevId: 187531006
|
|
|
|
|
|
|
| |
(https://github.com/google/copybara/commit/77a0e68eb0b044449b412e939ad25d500d2c12d3).
RELNOTES: None
PiperOrigin-RevId: 187525928
|
|
|
|
|
|
|
| |
a nice consequence, this lets us reduce GC churn since we no longer need to create a frame instance for the lexical frame at a callsite of either a function when the environment is frozen or a builtin function (since builtins cannot modify bindings in their lexical frame).
RELNOTES: None
PiperOrigin-RevId: 187495787
|
|
|
|
|
|
| |
RELNOTES:
Removed flag `--incompatible_load_argument_is_label`.
PiperOrigin-RevId: 187479614
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The skylark implementation of git_repository is a drop-in replacement
for the native workspace rule. So deprecate the latter to avoid having
two implementations of the same. Also, the native rule pulls in quite
some dependencies.
RELNOTES: The native git_repository rule is deprecated. Use the
Skylark version available via load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
instead.
Change-Id: Id75d8e7b7377acd1092c4ba993f488be86c03fa0
PiperOrigin-RevId: 187466931
|
|
|
|
|
| |
RELNOTES: None.
PiperOrigin-RevId: 187453379
|
|
|
|
| |
PiperOrigin-RevId: 187397314
|
|
|
|
|
|
|
|
|
|
| |
These subclasses should be using @SkylarkCallable(structField = true) instead
This is a bit of a memory win, as there is now no need to store field information twice.
There are still a couple of stragglers that are more difficult, namely ToolchainInfo and DefaultInfo. Their APIs will likely need some more extensive revamping before proceeding.
RELNOTES: None.
PiperOrigin-RevId: 187364392
|
|
|
|
|
|
|
| |
duplicate named arguments.
RELNOTES: None
PiperOrigin-RevId: 187236124
|
|
|
|
|
|
|
|
| |
Avoid throwing an execption if we don't have to, stack traces are expensive to
fill in.
RELNOTES: None
PiperOrigin-RevId: 187199392
|
|
|
|
|
|
|
|
|
|
| |
I'm assuming most of the time folks are only assigning one variable, which
doesn't require an ImmutableSet.Builder and the garbage it comes with.
Also took the liberty of removing some unused InterruptedException
declarations.
PiperOrigin-RevId: 187068400
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Only check/update type if the types of elements that we're adding changes. In
particular, the "is DICT/LIST" check can get expensive when run on every single
inserted element.
According to a hacky unit test (create 10M element SkylarkNestedSet 10x over) this is ~60%
faster (~18s -> ~7s).
This change is intended to be a quick fix, there's surely a more principled way
to make skylark's type checking more efficient...
PiperOrigin-RevId: 187062547
|
|
|
|
|
|
| |
Most of the time there's only one, doesn't justify the iterator overhead.
PiperOrigin-RevId: 187031802
|
|
|
|
|
|
|
| |
This is a change from behavior introduced in unknown commit, which was added to preserve determinism even though the ordering of dicts in Python is non-deterministic. Now that we don't call into Python anymore, this is not necessary.
RELNOTES: None (select branches are mutually exclusive, so this is a no-op)
PiperOrigin-RevId: 187022575
|
|
|
|
|
|
|
|
| |
This is a change from behavior introduced in unknown commit, which was added to preserve determinism even though the ordering of dicts in Python is non-deterministic. Now that we don't call into Python anymore, this is not necessary.
RELNOTES[INC]: The order of dict-valued attributes is now the order in the BUILD file (or in the Skylark dict they were created from) and not lexicographically sorted.
PiperOrigin-RevId: 187003317
|
|
|
|
|
| |
RELNOTES: None
PiperOrigin-RevId: 186693205
|
|
|
|
| |
PiperOrigin-RevId: 186616752
|
|
|
|
|
| |
RELNOTES: None.
PiperOrigin-RevId: 186470386
|
|
|
|
|
|
| |
to select a codec.
PiperOrigin-RevId: 186378153
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Since the skylark implementation of http_archive provides all
the features available in the native http_archive and a few
more (patching), there is no need to have to rule implementations
doing the same thing. Hence deprecate the native one as part
of our plan of moving more functionality to skylark.
RELNOTES: The native http_archive rule is deprecated. Use the
Skylark version available via load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
instead.
Change-Id: I107c2f25f5a37c67f56b4362e7c9d9ade8428c16
PiperOrigin-RevId: 186314624
|
|
|
|
|
|
|
|
|
| |
provider keys.
This change only affects printing a rule target directly -- it intentionally does not affect the behavior of str(target), as we want to avoid skylark code being able to parse potentially-private provider keys.
RELNOTES: In skylark, print(target) now shows the provider keys of a target, as debug information.
PiperOrigin-RevId: 186046226
|
|
|
|
|
|
| |
RELNOTES:
Removed flags `--incompatible_checked_arithmetic`, `--incompatible_dict_literal_has_no_duplicates`, `--incompatible_disallow_keyword_only_args`, and ` --incompatible_comprehension_variables_do_not_leak`.
PiperOrigin-RevId: 185977740
|
|
|
|
|
| |
RELNOTES: None.
PiperOrigin-RevId: 185838543
|
|
|
|
|
|
|
| |
Added a little javadoc and tests.
RELNOTES: None
PiperOrigin-RevId: 185569985
|
|
|
|
|
|
|
| |
compile time.
RELNOTES: None.
PiperOrigin-RevId: 185432867
|
|
|
|
|
| |
RELNOTES: None.
PiperOrigin-RevId: 185353994
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Path and PathFragment have been replaced with String-based implementations. They are pretty similar, but each method is dissimilar enough that I did not feel sharing code was appropriate.
A summary of changes:
PATH
====
* Subsumes LocalPath (deleted, its tests repurposed)
* Use a simple string to back Path
* Path instances are no longer interned; Reference equality will no longer work
* Always normalized (same as before)
* Some operations will now be slower, like instance compares (which were previously just a reference check)
* Multiple identical paths will now consume more memory since they are not interned
PATH FRAGMENT
=============
* Use a simple string to back PathFragment
* No more segment arrays with interned strings
* Always normalized
* Remove isNormalized
* Replace some isNormalizied uses with containsUpLevelReferences() to check if path fragments try to escape their scope
* To check if user input is normalized, supply static methods on PathFragment to validate the string before constructing a PathFragment
* Because PathFragments are always normalized, we have to replace checks for literal "." from PathFragment#getPathString to PathFragment#getSafePathString. The latter returns "." for the empty string.
* The previous implementation supported efficient segment semantics (segment count, iterating over segments). This is now expensive since we do longer have a segment array.
ARTIFACT
========
* Remove Path instance. It is instead dynamically constructed on request. This is necessary to avoid this CL becoming a memory regression.
RELNOTES: None
PiperOrigin-RevId: 185062932
|
|
|
|
|
| |
RELNOTES: None
PiperOrigin-RevId: 184649483
|
|
|
|
|
| |
RELNOTES: None.
PiperOrigin-RevId: 184498836
|
|
|
|
|
| |
RELNOTES: None.
PiperOrigin-RevId: 184016150
|
|
|
|
| |
PiperOrigin-RevId: 183733621
|
|
|
|
|
|
| |
Generalizes @AutoCodec.Constructor to @AutoCodec.Instantiator.
PiperOrigin-RevId: 183702768
|
|
|
|
| |
PiperOrigin-RevId: 182796843
|
|
|
|
| |
PiperOrigin-RevId: 182767783
|
|
|
|
|
|
|
|
| |
SkylarkAspectLoadingKey.
Also add a @VisibleForSerialization annotation to @AutoCodec, since we're going to need to increase serialization visibility a lot here, and clean up some unnecessary modifiers.
PiperOrigin-RevId: 182389162
|
|
|
|
|
|
|
|
|
| |
The bug also permitted For statements in BUILD files so long as they were contained within an If statement (i.e. not at the top level).
Also add minor guidance to error messages.
RELNOTES: None
PiperOrigin-RevId: 182236172
|
|
|
|
|
|
| |
* Moves SingletonCodec to third_party.
PiperOrigin-RevId: 182143153
|
|
|
|
|
|
|
| |
If two values compared equal (e.g., MethodLibrary#bool and SkylarkAttr#bool), we were dropping one of them in favor of the other.
RELNOTES: None
PiperOrigin-RevId: 182057611
|