diff options
author | 2017-05-04 19:26:48 +0200 | |
---|---|---|
committer | 2017-05-04 23:05:57 +0200 | |
commit | ee0a8bb7f4a9b8edc3fdb30b4e255cf461415382 (patch) | |
tree | 969ab65be7d55c35e4c54ddf9826a39d71628730 /src/main/java/com/google/devtools/build/lib | |
parent | 902fefc347f243c42aa9444c75c7204e5e6462ac (diff) |
Implement a flag to forbid the `+` operator for dicts
Usage: --incompatible_dict_plus=true (the default value is false).
PiperOrigin-RevId: 155094639
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/syntax/BinaryOperatorExpression.java | 7 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemanticsOptions.java | 8 |
2 files changed, 15 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/BinaryOperatorExpression.java b/src/main/java/com/google/devtools/build/lib/syntax/BinaryOperatorExpression.java index ec81e07219..ef8b7f1c55 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/BinaryOperatorExpression.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/BinaryOperatorExpression.java @@ -219,6 +219,13 @@ public final class BinaryOperatorExpression extends Expression { } if (lval instanceof SkylarkDict && rval instanceof SkylarkDict) { + if (env.getSemantics().incompatibleDictPlus) { + throw new EvalException( + location, + "The `+` operator for dicts is deprecated and no longer supported. Please use the " + + "`update` method instead. You can temporarily enable the `+` operator by passing " + + "the flag --incompatible_dict_plus=false"); + } return SkylarkDict.plus((SkylarkDict<?, ?>) lval, (SkylarkDict<?, ?>) rval, env); } diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemanticsOptions.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemanticsOptions.java index 5909ea7155..abd5611704 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemanticsOptions.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemanticsOptions.java @@ -68,4 +68,12 @@ public class SkylarkSemanticsOptions extends OptionsBase implements Serializable + "list. Otherwise it copies the original list without mutating it." ) public boolean incompatibleListPlusEquals; + + @Option( + name = "incompatible_dict_plus", + defaultValue = "false", + category = "incompatible changes", + help = "If set to true, the `+` becomes disabled for dicts." + ) + public boolean incompatibleDictPlus; } |