1 write to _instructions
System.Linq.Expressions (1)
System\Linq\Expressions\Interpreter\LightCompiler.cs (1)
298_instructions = new InstructionList();
383 references to _instructions
System.Linq.Expressions (383)
System\Linq\Expressions\Interpreter\LightCompiler.cs (383)
307public InstructionList Instructions => _instructions; 318_instructions.EmitInitializeParameter(local.Index); 326_instructions.EmitPop(); 329Debug.Assert(_instructions.CurrentStackDepth == (node.ReturnType != typeof(void) ? 1 : 0)); 341return new Interpreter(lambdaName, _locals, _instructions.ToArray(), debugInfos); 347_instructions.EmitLoad(node.Value, node.Type); 361_instructions.EmitLoad(value: null); 368_instructions.EmitLoad(value); 372_instructions.EmitDefaultValue(type); 384_locals.Box(expr, _instructions); 412_instructions.SetDebugCookie(variable.Name); 424_instructions.Emit(ValueTypeCopyInstruction.Instruction); 434_instructions.EmitLoadLocalFromClosure(local.Index); 438_instructions.EmitLoadLocalBoxed(local.Index); 442_instructions.EmitLoadLocal(local.Index); 457_instructions.EmitLoadLocalFromClosureBoxed(local.Index); 462_instructions.EmitLoadLocal(local.Index); 465_instructions.SetDebugCookie(variable.Name); 476_instructions.EmitStoreLocalToClosure(local.Index); 480_instructions.EmitAssignLocalToClosure(local.Index); 487_instructions.EmitStoreLocalBoxed(local.Index); 491_instructions.EmitAssignLocalBoxed(local.Index); 498_instructions.EmitStoreLocal(local.Index); 502_instructions.EmitAssignLocal(local.Index); 506_instructions.SetDebugCookie(variable.Name); 531int start = _instructions.Count; 546_instructions.EmitInitializeLocal(local.Index, variable.Type); 547_instructions.SetDebugCookie(variable.Name); 566_locals.UndefineLocal(local, _instructions.Count); 593_instructions.EmitCall(index.Indexer.GetGetMethod(nonPublic: true)!); 597_instructions.EmitCall(TypeUtils.GetArrayGetMethod(index.Object!.Type)); 601_instructions.EmitGetArrayItem(); 626local = _locals.DefineLocal(Expression.Parameter(node.Right.Type), _instructions.Count); 627_instructions.EmitAssignLocal(local.Index); 632_instructions.EmitCall(index.Indexer.GetSetMethod(nonPublic: true)!); 636_instructions.EmitCall(TypeUtils.GetArraySetMethod(index.Object!.Type)); 640_instructions.EmitSetArrayItem(); 645_instructions.EmitLoadLocal(local.Index); 646_locals.UndefineLocal(local, _instructions.Count); 674int start = _instructions.Count; 678_instructions.EmitAssignLocal(local.Index); 679_instructions.EmitCall(method); 680_instructions.EmitLoadLocal(local.Index); 681_locals.UndefineLocal(local, _instructions.Count); 685_instructions.EmitCall(method); 700_instructions.UnEmit(); // Undo having pushed the instance to the stack. 705int start = _instructions.Count; 709_instructions.EmitAssignLocal(local.Index); 710_instructions.EmitStoreField(fi); 711_instructions.EmitLoadLocal(local.Index); 712_locals.UndefineLocal(local, _instructions.Count); 716_instructions.EmitStoreField(fi); 767BranchLabel end = _instructions.MakeLabel(); 769LocalDefinition leftTemp = _locals.DefineLocal(Expression.Parameter(node.Left.Type), _instructions.Count); 771_instructions.EmitStoreLocal(leftTemp.Index); 773LocalDefinition rightTemp = _locals.DefineLocal(Expression.Parameter(node.Right.Type), _instructions.Count); 775_instructions.EmitStoreLocal(rightTemp.Index); 795BranchLabel testRight = _instructions.MakeLabel(); 796BranchLabel callMethod = _instructions.MakeLabel(); 798_instructions.EmitLoadLocal(leftTemp.Index); 799_instructions.EmitLoad(null, typeof(object)); 800_instructions.EmitEqual(typeof(object)); 801_instructions.EmitBranchFalse(testRight); 804_instructions.EmitLoadLocal(rightTemp.Index); 805_instructions.EmitLoad(null, typeof(object)); 808_instructions.EmitEqual(typeof(object)); 812_instructions.EmitNotEqual(typeof(object)); 814_instructions.EmitBranch(end, hasResult: false, hasValue: true); 816_instructions.MarkLabel(testRight); 819_instructions.EmitLoadLocal(rightTemp.Index); 820_instructions.EmitLoad(null, typeof(object)); 821_instructions.EmitEqual(typeof(object)); 822_instructions.EmitBranchFalse(callMethod); 826_instructions.EmitLoad( 829_instructions.EmitBranch(end, hasResult: false, hasValue: true); 832_instructions.MarkLabel(callMethod); 833_instructions.EmitLoadLocal(leftTemp.Index); 834_instructions.EmitLoadLocal(rightTemp.Index); 835_instructions.EmitCall(node.Method); 838BranchLabel loadDefault = _instructions.MakeLabel(); 842_instructions.EmitLoadLocal(leftTemp.Index); 843_instructions.EmitLoad(null, typeof(object)); 844_instructions.EmitEqual(typeof(object)); 845_instructions.EmitBranchTrue(loadDefault); 850_instructions.EmitLoadLocal(rightTemp.Index); 851_instructions.EmitLoad(null, typeof(object)); 852_instructions.EmitEqual(typeof(object)); 853_instructions.EmitBranchTrue(loadDefault); 856_instructions.EmitLoadLocal(leftTemp.Index); 857_instructions.EmitLoadLocal(rightTemp.Index); 858_instructions.EmitCall(node.Method); 859_instructions.EmitBranch(end, hasResult: false, hasValue: true); 861_instructions.MarkLabel(loadDefault); 872_instructions.EmitLoad(AstUtils.BoxedFalse, typeof(object)); 875_instructions.EmitLoad(null, typeof(object)); 881_instructions.MarkLabel(end); 883_locals.UndefineLocal(leftTemp, _instructions.Count); 884_locals.UndefineLocal(rightTemp, _instructions.Count); 890_instructions.EmitCall(node.Method); 901_instructions.EmitGetArrayItem(); 918_instructions.EmitExclusiveOr(node.Left.Type); 923_instructions.EmitOr(node.Left.Type); 928_instructions.EmitAnd(node.Left.Type); 949_instructions.EmitLeftShift(node.Left.Type); 954_instructions.EmitRightShift(node.Left.Type); 983_instructions.EmitEqual(left.Type, liftedToNull); 993_instructions.EmitNotEqual(left.Type, liftedToNull); 1007case ExpressionType.LessThan: _instructions.EmitLessThan(left.Type, node.IsLiftedToNull); break; 1008case ExpressionType.LessThanOrEqual: _instructions.EmitLessThanOrEqual(left.Type, node.IsLiftedToNull); break; 1009case ExpressionType.GreaterThan: _instructions.EmitGreaterThan(left.Type, node.IsLiftedToNull); break; 1010case ExpressionType.GreaterThanOrEqual: _instructions.EmitGreaterThanOrEqual(left.Type, node.IsLiftedToNull); break; 1022case ExpressionType.Add: _instructions.EmitAdd(left.Type, @checked: false); break; 1023case ExpressionType.AddChecked: _instructions.EmitAdd(left.Type, @checked: true); break; 1024case ExpressionType.Subtract: _instructions.EmitSub(left.Type, @checked: false); break; 1025case ExpressionType.SubtractChecked: _instructions.EmitSub(left.Type, @checked: true); break; 1026case ExpressionType.Multiply: _instructions.EmitMul(left.Type, @checked: false); break; 1027case ExpressionType.MultiplyChecked: _instructions.EmitMul(left.Type, @checked: true); break; 1028case ExpressionType.Divide: _instructions.EmitDiv(left.Type); break; 1029case ExpressionType.Modulo: _instructions.EmitModulo(left.Type); break; 1039BranchLabel end = _instructions.MakeLabel(); 1040BranchLabel loadDefault = _instructions.MakeLabel(); 1047LocalDefinition opTemp = _locals.DefineLocal(Expression.Parameter(operandType), _instructions.Count); 1067_instructions.EmitStoreLocal(opTemp.Index); 1071_instructions.EmitLoadLocal(opTemp.Index); 1072_instructions.EmitLoad(null, typeof(object)); 1073_instructions.EmitEqual(typeof(object)); 1074_instructions.EmitBranchTrue(loadDefault); 1077_instructions.EmitLoadLocal(opTemp.Index); 1080_instructions.Emit(NullableMethodCallInstruction.CreateGetValue()); 1085_instructions.EmitCall(method); 1089_instructions.EmitByRefCall(method, parameters, new[] { updater }); 1090updater.UndefineTemps(_instructions, _locals); 1093_instructions.EmitBranch(end, hasResult: false, hasValue: true); 1095_instructions.MarkLabel(loadDefault); 1096_instructions.EmitLoad(null, typeof(object)); 1098_instructions.MarkLabel(end); 1100_locals.UndefineLocal(opTemp, _instructions.Count); 1135_instructions.Emit(NullableMethodCallInstruction.CreateGetValue()); 1170_instructions.Emit(NullableMethodCallInstruction.CreateGetValue()); 1178_instructions.EmitConvertToUnderlying(to, isLiftedToNull); 1185_instructions.EmitNumericConvertChecked(from, to, isLiftedToNull); 1189_instructions.EmitNumericConvertUnchecked(from, to, isLiftedToNull); 1196_instructions.EmitCastToEnum(enumTypeTo); 1204_instructions.Emit(NullCheckInstruction.Instance); 1205_instructions.EmitCastReferenceToEnum(typeTo); 1216_instructions.EmitCast(typeTo); 1222_instructions.EmitNot(node.Operand.Type); 1246_instructions.EmitArrayLength(); 1250_instructions.EmitNegateChecked(node.Type); 1254_instructions.EmitNegate(node.Type); 1258_instructions.EmitIncrement(node.Type); 1262_instructions.EmitDecrement(node.Type); 1282BranchLabel notNull = _instructions.MakeLabel(); 1283BranchLabel computed = _instructions.MakeLabel(); 1285_instructions.EmitCoalescingBranch(notNull); 1286_instructions.EmitBranch(computed); 1288_instructions.MarkLabel(notNull); 1289_instructions.EmitCall(node.Method!); 1291_instructions.MarkLabel(computed); 1295_instructions.EmitCall(node.Method!); 1304BranchLabel notNull = _instructions.MakeLabel(); 1305BranchLabel computed = _instructions.MakeLabel(); 1307_instructions.EmitCoalescingBranch(notNull); 1308_instructions.EmitBranch(computed); 1310_instructions.MarkLabel(notNull); 1311_instructions.EmitLoad(node.NodeType == ExpressionType.IsTrue); 1312_instructions.EmitEqual(typeof(bool)); 1314_instructions.MarkLabel(computed); 1318_instructions.EmitLoad(node.NodeType == ExpressionType.IsTrue); 1319_instructions.EmitEqual(typeof(bool)); 1355BranchLabel labEnd = _instructions.MakeLabel(); 1357_instructions.EmitDup(); 1361_instructions.EmitCall(opTrue); 1362_instructions.EmitBranchTrue(labEnd); 1367_instructions.EmitCall(expr.Method); 1369_instructions.MarkLabel(labEnd); 1374BranchLabel computeRight = _instructions.MakeLabel(); 1375BranchLabel returnFalse = _instructions.MakeLabel(); 1376BranchLabel returnNull = _instructions.MakeLabel(); 1377BranchLabel returnValue = _instructions.MakeLabel(); 1378LocalDefinition result = _locals.DefineLocal(Expression.Parameter(node.Left.Type), _instructions.Count); 1379LocalDefinition leftTemp = _locals.DefineLocal(Expression.Parameter(node.Left.Type), _instructions.Count); 1382_instructions.EmitStoreLocal(leftTemp.Index); 1384_instructions.EmitLoadLocal(leftTemp.Index); 1385_instructions.EmitLoad(null, typeof(object)); 1386_instructions.EmitEqual(typeof(object)); 1388_instructions.EmitBranchTrue(computeRight); 1390_instructions.EmitLoadLocal(leftTemp.Index); 1394_instructions.EmitBranchFalse(returnFalse); 1398_instructions.EmitBranchTrue(returnFalse); 1402_instructions.MarkLabel(computeRight); 1403LocalDefinition rightTemp = _locals.DefineLocal(Expression.Parameter(node.Right.Type), _instructions.Count); 1405_instructions.EmitStoreLocal(rightTemp.Index); 1407_instructions.EmitLoadLocal(rightTemp.Index); 1408_instructions.EmitLoad(null, typeof(object)); 1409_instructions.EmitEqual(typeof(object)); 1410_instructions.EmitBranchTrue(returnNull); 1412_instructions.EmitLoadLocal(rightTemp.Index); 1415_instructions.EmitBranchFalse(returnFalse); 1419_instructions.EmitBranchTrue(returnFalse); 1423_instructions.EmitLoadLocal(leftTemp.Index); 1424_instructions.EmitLoad(null, typeof(object)); 1425_instructions.EmitEqual(typeof(object)); 1426_instructions.EmitBranchTrue(returnNull); 1429_instructions.EmitLoad(andAlso ? AstUtils.BoxedTrue : AstUtils.BoxedFalse, typeof(object)); 1430_instructions.EmitStoreLocal(result.Index); 1431_instructions.EmitBranch(returnValue); 1434_instructions.MarkLabel(returnFalse); 1435_instructions.EmitLoad(andAlso ? AstUtils.BoxedFalse : AstUtils.BoxedTrue, typeof(object)); 1436_instructions.EmitStoreLocal(result.Index); 1437_instructions.EmitBranch(returnValue); 1440_instructions.MarkLabel(returnNull); 1441_instructions.EmitLoad(null, typeof(object)); 1442_instructions.EmitStoreLocal(result.Index); 1444_instructions.MarkLabel(returnValue); 1445_instructions.EmitLoadLocal(result.Index); 1447_locals.UndefineLocal(leftTemp, _instructions.Count); 1448_locals.UndefineLocal(rightTemp, _instructions.Count); 1449_locals.UndefineLocal(result, _instructions.Count); 1454BranchLabel elseLabel = _instructions.MakeLabel(); 1455BranchLabel endLabel = _instructions.MakeLabel(); 1460_instructions.EmitBranchFalse(elseLabel); 1464_instructions.EmitBranchTrue(elseLabel); 1467_instructions.EmitBranch(endLabel, hasResult: false, hasValue: true); 1468_instructions.MarkLabel(elseLabel); 1469_instructions.EmitLoad(!andAlso); 1470_instructions.MarkLabel(endLabel); 1480BranchLabel endOfFalse = _instructions.MakeLabel(); 1481_instructions.EmitBranchTrue(endOfFalse); 1483_instructions.MarkLabel(endOfFalse); 1487BranchLabel endOfTrue = _instructions.MakeLabel(); 1488_instructions.EmitBranchFalse(endOfTrue); 1493BranchLabel endOfFalse = _instructions.MakeLabel(); 1494_instructions.EmitBranch(endOfFalse, false, !asVoid); 1495_instructions.MarkLabel(endOfTrue); 1497_instructions.MarkLabel(endOfFalse); 1501_instructions.MarkLabel(endOfTrue); 1514_instructions.MarkLabel(continueLabel.GetLabel(this)); 1520_instructions.EmitBranch(continueLabel.GetLabel(this), node.Type != typeof(void), hasValue: false); 1522_instructions.MarkLabel(breakLabel.GetLabel(this)); 1599LocalDefinition temp = _locals.DefineLocal(Expression.Parameter(node.SwitchValue.Type), _instructions.Count); 1601_instructions.EmitStoreLocal(temp.Index); 1625_locals.UndefineLocal(temp, _instructions.Count); 1635int switchIndex = _instructions.Count; 1636_instructions.EmitIntSwitch(caseDict); 1646_instructions.EmitBranch(end.GetLabel(this), false, hasValue); 1652int caseOffset = _instructions.Count - switchIndex; 1663_instructions.EmitBranch(end.GetLabel(this), false, hasValue); 1667_instructions.MarkLabel(end.GetLabel(this)); 1677int switchIndex = _instructions.Count; 1680_instructions.EmitStringSwitch(caseDict, nullCase); 1690_instructions.EmitBranch(end.GetLabel(this), false, hasValue); 1696int caseOffset = _instructions.Count - switchIndex; 1717_instructions.EmitBranch(end.GetLabel(this), false, hasValue); 1721_instructions.MarkLabel(end.GetLabel(this)); 1761_instructions.MarkLabel(label.GetLabel(this)); 1774_instructions.EmitGoto(labelInfo.GetLabel(this), 1943_instructions.EmitRethrowVoid(); 1947_instructions.EmitRethrow(); 1955_instructions.EmitThrowVoid(); 1959_instructions.EmitThrow(); 1973BranchLabel end = _instructions.MakeLabel(); 1974BranchLabel gotoEnd = _instructions.MakeLabel(); 1975int tryStart = _instructions.Count; 1980startOfFinally = _instructions.MakeLabel(); 1981_instructions.EmitEnterTryFinally(startOfFinally); 1985_instructions.EmitEnterTryCatch(); 1989var enterTryInstr = _instructions.GetInstruction(tryStart) as EnterTryCatchFinallyInstruction; 1997int tryEnd = _instructions.Count; 2000_instructions.MarkLabel(gotoEnd); 2001_instructions.EmitGoto(end, hasValue, hasValue, hasValue); 2011LocalDefinition local = _locals.DefineLocal(parameter, _instructions.Count); 2020_instructions.EmitEnterExceptionFilter(); 2023int filterLabel = _instructions.MarkRuntimeLabel(); 2024int filterStart = _instructions.Count; 2030filter = new ExceptionFilter(filterLabel, filterStart, _instructions.Count); 2033_instructions.EmitLeaveExceptionFilter(); 2043_instructions.EmitEnterExceptionHandlerNonVoid(); 2047_instructions.EmitEnterExceptionHandlerVoid(); 2051int handlerLabel = _instructions.MarkRuntimeLabel(); 2052int handlerStart = _instructions.Count; 2060_instructions.EmitLeaveExceptionHandler(hasValue, gotoEnd); 2062exHandlers.Add(new ExceptionHandler(handlerLabel, handlerStart, _instructions.Count, handler.Test, filter)); 2065_locals.UndefineLocal(local, _instructions.Count); 2074_instructions.MarkLabel(startOfFinally); 2075_instructions.EmitEnterFinally(startOfFinally); 2077_instructions.EmitLeaveFinally(); 2081startOfFinally.TargetIndex, _instructions.Count, 2092_instructions.MarkLabel(end); 2104int tryStart = _instructions.Count; 2105BranchLabel end = _instructions.MakeLabel(); 2106EnterTryFaultInstruction enterTryInstr = _instructions.EmitEnterTryFault(end); 2107Debug.Assert(enterTryInstr == _instructions.GetInstruction(tryStart)); 2113int tryEnd = _instructions.Count; 2117_instructions.EmitGoto(end, hasValue, hasValue, hasValue); 2122BranchLabel startOfFault = _instructions.MakeLabel(); 2123_instructions.MarkLabel(startOfFault); 2124_instructions.EmitEnterFault(startOfFault); 2126_instructions.EmitLeaveFault(); 2127enterTryInstr.SetTryHandler(new TryFaultHandler(tryStart, tryEnd, startOfFault.TargetIndex, _instructions.Count)); 2130_instructions.MarkLabel(end); 2183_instructions.EmitNullableCall(method, parameters); 2189_instructions.EmitCall(method, parameters); 2193_instructions.EmitByRefCall(method, parameters, updaters.ToArray()); 2197updater.UndefineTemps(_instructions, _locals); 2205LocalDefinition left = _locals.DefineLocal(Expression.Parameter(array.Type, nameof(array)), _instructions.Count); 2206LocalDefinition right = _locals.DefineLocal(Expression.Parameter(index.Type, nameof(index)), _instructions.Count); 2208_instructions.EmitStoreLocal(left.Index); 2210_instructions.EmitStoreLocal(right.Index); 2212_instructions.EmitLoadLocal(left.Index); 2213_instructions.EmitLoadLocal(right.Index); 2214_instructions.EmitGetArrayItem(); 2270objTmp = _locals.DefineLocal(Expression.Parameter(indexNode.Object.Type), _instructions.Count); 2272_instructions.EmitDup(); 2273_instructions.EmitStoreLocal(objTmp.GetValueOrDefault().Index); 2283LocalDefinition argTmp = _locals.DefineLocal(Expression.Parameter(arg.Type), _instructions.Count); 2284_instructions.EmitDup(); 2285_instructions.EmitStoreLocal(argTmp.Index); 2308memberTemp = _locals.DefineLocal(Expression.Parameter(member.Expression.Type, "member"), _instructions.Count); 2310_instructions.EmitDup(); 2311_instructions.EmitStoreLocal(memberTemp.GetValueOrDefault().Index); 2317_instructions.EmitLoadField(field); 2326_instructions.EmitCall(property.GetGetMethod(nonPublic: true)!); 2360LocalDefinition objTmp = _locals.DefineLocal(Expression.Parameter(array.Type), _instructions.Count); 2361_instructions.EmitDup(); 2362_instructions.EmitStoreLocal(objTmp.Index); 2371LocalDefinition argTmp = _locals.DefineLocal(Expression.Parameter(arg.Type), _instructions.Count); 2372_instructions.EmitDup(); 2373_instructions.EmitStoreLocal(argTmp.Index); 2378_instructions.EmitCall(TypeUtils.GetArrayGetMethod(array.Type)); 2416_instructions.EmitByRefNew(node.Constructor, parameters, updaters.ToArray()); 2420_instructions.EmitNew(node.Constructor, parameters); 2429_instructions.EmitLoad(value: null); 2433_instructions.EmitDefaultValue(type); 2452_instructions.EmitLoad(fi.GetValue(obj: null), fi.FieldType); 2463_instructions.EmitLoad(fi.GetValue(obj: null), fi.FieldType); 2467_instructions.EmitLoadField(fi); 2477_instructions.EmitLoadField(fi); 2502_instructions.EmitNullableCall(method, Array.Empty<ParameterInfo>()); 2506_instructions.EmitCall(method); 2530_instructions.EmitNewArrayInit(elementType, rank); 2537_instructions.EmitNewArray(elementType); 2541_instructions.EmitNewArrayBounds(elementType, rank); 2549int start = _instructions.Count; 2571_instructions.EmitNewRuntimeVariables(node.Variables.Count); 2588_instructions.EmitCreateDelegate(creator); 2617BranchLabel leftNotNull = _instructions.MakeLabel(); 2621_instructions.EmitCoalescingBranch(leftNotNull); 2622_instructions.EmitPop(); 2628end = _instructions.MakeLabel(); 2629_instructions.EmitBranch(end); 2638_instructions.MarkLabel(leftNotNull); 2643LocalDefinition local = _locals.DefineLocal(temp, _instructions.Count); 2644_instructions.EmitStoreLocal(local.Index); 2650_locals.UndefineLocal(local, _instructions.Count); 2660_instructions.MarkLabel(end!); 2701_instructions.EmitDup(); 2707_instructions.EmitCall(add); 2709_instructions.EmitPop(); 2727_instructions.EmitDup(); 2737_instructions.EmitDup(); 2740_instructions.EmitPop(); 2744_instructions.EmitDup(); 2753_instructions.EmitPop(); 2783_instructions.Emit(new QuoteInstruction(unary.Operand, mapping.Count > 0 ? mapping : null)); 2894_instructions.Emit(NullCheckInstruction.Instance); 2906_instructions.EmitLoad(node.TypeOperand == typeof(void), typeof(bool)); 2910_instructions.EmitLoad(node.TypeOperand.GetNonNullableType()); 2911_instructions.EmitTypeEquals(); 2918_instructions.EmitTypeAs(node.Type); 2939_instructions.EmitPop(); 2942_instructions.EmitLoad(result == AnalyzeTypeIsResult.KnownTrue); 2948_instructions.EmitLoad(null); 2949_instructions.EmitNotEqual(typeof(object)); 2954_instructions.EmitLoad(node.TypeOperand.GetNonNullableType()); 2955_instructions.EmitTypeEquals(); 2959_instructions.EmitTypeIs(node.TypeOperand); 2980int startingStackDepth = _instructions.CurrentStackDepth; 3005_instructions.EmitPop(); 3009Debug.Assert(_instructions.CurrentStackDepth == startingStackDepth); 3027int startingStackDepth = _instructions.CurrentStackDepth; 3099Debug.Assert(_instructions.CurrentStackDepth == startingStackDepth + (expr.Type == typeof(void) ? 0 : 1), 3100$"{_instructions.CurrentStackDepth} vs {startingStackDepth + (expr.Type == typeof(void) ? 0 : 1)} for {expr.NodeType}");