aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsCodec.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsOptions.java14
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/BinaryOperatorExpression.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java5
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);