Skip to content

Commit b120d4f

Browse files
katrecopybara-github
authored andcommitted
Fix toolchains to support type lookup.
Fixes #13320. PiperOrigin-RevId: 367624002
1 parent d51a88f commit b120d4f

File tree

3 files changed

+10
-6
lines changed

3 files changed

+10
-6
lines changed

src/main/java/net/starlark/java/eval/Eval.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -460,7 +460,7 @@ private static Object inplaceBinaryOp(StarlarkThread.Frame fr, TokenKind op, Obj
460460
list.extend(y);
461461
return list;
462462
}
463-
return EvalUtils.binaryOp(op, x, y, fr.thread.getSemantics(), fr.thread.mutability());
463+
return EvalUtils.binaryOp(op, x, y, fr.thread);
464464
}
465465

466466
// ---- expressions ----
@@ -532,8 +532,7 @@ private static Object evalBinaryOperator(StarlarkThread.Frame fr, BinaryOperator
532532
default:
533533
Object y = eval(fr, binop.getY());
534534
try {
535-
return EvalUtils.binaryOp(
536-
binop.getOperator(), x, y, fr.thread.getSemantics(), fr.thread.mutability());
535+
return EvalUtils.binaryOp(binop.getOperator(), x, y, fr.thread);
537536
} catch (EvalException ex) {
538537
fr.setErrorLocation(binop.getOperatorLocation());
539538
throw ex;

src/main/java/net/starlark/java/eval/EvalUtils.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,10 @@ static int toIndex(int index, int length) {
7373
}
7474

7575
/** Evaluates an eager binary operation, {@code x op y}. (Excludes AND and OR.) */
76-
static Object binaryOp(
77-
TokenKind op, Object x, Object y, StarlarkSemantics semantics, Mutability mu)
76+
static Object binaryOp(TokenKind op, Object x, Object y, StarlarkThread starlarkThread)
7877
throws EvalException {
78+
StarlarkSemantics semantics = starlarkThread.getSemantics();
79+
Mutability mu = starlarkThread.mutability();
7980
switch (op) {
8081
case PLUS:
8182
if (x instanceof StarlarkInt) {
@@ -339,6 +340,8 @@ static Object binaryOp(
339340
case IN:
340341
if (y instanceof StarlarkIndexable) {
341342
return ((StarlarkIndexable) y).containsKey(semantics, x);
343+
} else if (y instanceof StarlarkIndexable.Threaded) {
344+
return ((StarlarkIndexable.Threaded) y).containsKey(starlarkThread, semantics, x);
342345
} else if (y instanceof String) {
343346
if (!(x instanceof String)) {
344347
throw Starlark.errorf(
@@ -349,7 +352,7 @@ static Object binaryOp(
349352
break;
350353

351354
case NOT_IN:
352-
Object z = binaryOp(TokenKind.IN, x, y, semantics, mu);
355+
Object z = binaryOp(TokenKind.IN, x, y, starlarkThread);
353356
if (z != null) {
354357
return !Starlark.truth(z);
355358
}

src/test/shell/bazel/toolchain_test.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ function write_test_rule() {
7878
mkdir -p toolchain
7979
cat >> toolchain/rule_${rule_name}.bzl <<EOF
8080
def _impl(ctx):
81+
if '//toolchain:${toolchain_name}' not in ctx.toolchains:
82+
fail('Toolchain type //toolchain:${toolchain_name} not found')
8183
toolchain = ctx.toolchains['//toolchain:${toolchain_name}']
8284
message = ctx.attr.message
8385
print(

0 commit comments

Comments
 (0)