diff options
Diffstat (limited to 'src/main/java')
4 files changed, 30 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsCodec.java b/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsCodec.java index c2fa734a00..19c346f338 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsCodec.java +++ b/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsCodec.java @@ -50,6 +50,7 @@ public final class SkylarkSemanticsCodec implements ObjectCodec<SkylarkSemantics codedOut.writeBoolNoTag(semantics.incompatibleDisableObjcProviderResources()); codedOut.writeBoolNoTag(semantics.incompatibleDisallowDictPlus()); codedOut.writeBoolNoTag(semantics.incompatibleDisallowOldStyleArgsAdd()); + codedOut.writeBoolNoTag(semantics.incompatibleDisallowSlashOperator()); codedOut.writeBoolNoTag(semantics.incompatibleDisallowToplevelIfStatement()); codedOut.writeBoolNoTag(semantics.incompatibleNewActionsApi()); codedOut.writeBoolNoTag(semantics.incompatiblePackageNameIsAFunction()); @@ -72,6 +73,7 @@ public final class SkylarkSemanticsCodec implements ObjectCodec<SkylarkSemantics builder.incompatibleDisableObjcProviderResources(codedIn.readBool()); builder.incompatibleDisallowDictPlus(codedIn.readBool()); builder.incompatibleDisallowOldStyleArgsAdd(codedIn.readBool()); + builder.incompatibleDisallowSlashOperator(codedIn.readBool()); builder.incompatibleDisallowToplevelIfStatement(codedIn.readBool()); builder.incompatibleNewActionsApi(codedIn.readBool()); builder.incompatiblePackageNameIsAFunction(codedIn.readBool()); diff --git a/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsOptions.java b/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsOptions.java index 38ca1d0a22..facbbeae79 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsOptions.java +++ b/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsOptions.java @@ -144,6 +144,19 @@ public class SkylarkSemanticsOptions extends OptionsBase implements Serializable ) public boolean incompatibleDisallowDictPlus; + @Option( + name = "incompatible_disallow_slash_operator", + defaultValue = "false", + documentationCategory = OptionDocumentationCategory.UNCATEGORIZED, + effectTags = {OptionEffectTag.UNKNOWN}, + metadataTags = { + OptionMetadataTag.INCOMPATIBLE_CHANGE, + OptionMetadataTag.TRIGGERED_BY_ALL_INCOMPATIBLE_CHANGES + }, + help = "If set to true, the `/` operator is disabled. Use `//` for integer division." + ) + public boolean incompatibleDisallowSlashOperator; + /** Controls legacy arguments to ctx.actions.Args#add. */ @Option( name = "incompatible_disallow_old_style_args_add", @@ -269,6 +282,7 @@ public class SkylarkSemanticsOptions extends OptionsBase implements Serializable .incompatibleDisableObjcProviderResources(incompatibleDisableObjcProviderResources) .incompatibleDisallowDictPlus(incompatibleDisallowDictPlus) .incompatibleDisallowOldStyleArgsAdd(incompatibleDisallowOldStyleArgsAdd) + .incompatibleDisallowSlashOperator(incompatibleDisallowSlashOperator) .incompatibleDisallowToplevelIfStatement(incompatibleDisallowToplevelIfStatement) .incompatibleNewActionsApi(incompatibleNewActionsApi) .incompatiblePackageNameIsAFunction(incompatiblePackageNameIsAFunction) 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 b1f835ce63..283fd5720d 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 @@ -205,6 +205,15 @@ public final class BinaryOperatorExpression extends Expression { return mult(lhs, rhs, env, location); case DIVIDE: + if (env.getSemantics().incompatibleDisallowSlashOperator()) { + throw new EvalException( + location, + "The `/` operator has been removed. Please use the `//` operator for integer " + + "division. You can temporarily enable the `/` operator by passing " + + "the flag --incompatible_disallow_slash_operator=false"); + } + return divide(lhs, rhs, location); + case FLOOR_DIVIDE: return divide(lhs, rhs, location); diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java index e0ef87f35e..b6665c4de8 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java @@ -53,6 +53,8 @@ public abstract class SkylarkSemantics { public abstract boolean incompatibleDisallowOldStyleArgsAdd(); + public abstract boolean incompatibleDisallowSlashOperator(); + public abstract boolean incompatibleDisallowToplevelIfStatement(); public abstract boolean incompatibleNewActionsApi(); @@ -89,6 +91,7 @@ public abstract class SkylarkSemantics { .incompatibleDisableObjcProviderResources(false) .incompatibleDisallowDictPlus(false) .incompatibleDisallowOldStyleArgsAdd(false) + .incompatibleDisallowSlashOperator(false) .incompatibleDisallowToplevelIfStatement(true) .incompatibleNewActionsApi(false) .incompatiblePackageNameIsAFunction(false) @@ -117,6 +120,8 @@ public abstract class SkylarkSemantics { public abstract Builder incompatibleDisallowOldStyleArgsAdd(boolean value); + public abstract Builder incompatibleDisallowSlashOperator(boolean value); + public abstract Builder incompatibleDisallowToplevelIfStatement(boolean value); public abstract Builder incompatibleNewActionsApi(boolean value); |