<div class='sourceset sourceset-common'>Common</div>

```kotlin
value class WriteScope(private val stack: Operations)
```

## Properties

<div class='sourceset sourceset-common'>Common</div>

```kotlin
val operation: Operation
```

## Functions

<h2 id="setint-parameter-value">setInt</h2>

```kotlin
inline fun setInt(parameter: IntParameter, value: Int) =
            with(stack) {
                if (EnableDebugRuntimeChecks) {
                    val mask = 0b1 shl parameter
                    debugRuntimeCheck(pushedIntMask and mask == 0) {
                        "Already pushed argument ${operation.intParamName(parameter)}"
                    }
                    pushedIntMask = pushedIntMask or mask
                }
                intArgs[topIntIndexOf(parameter)] = value
            }
```

<hr class="docs-overload-divider">

<h2 id="setints-parameter1-value1-parameter2-value2">setInts</h2>

```kotlin
inline fun setInts(
            parameter1: IntParameter,
            value1: Int,
            parameter2: IntParameter,
            value2: Int,
        ) =
            with(stack) {
                if (EnableDebugRuntimeChecks) {
                    val mask = (0b1 shl parameter1) or (0b1 shl parameter2)
                    debugRuntimeCheck(pushedIntMask and mask == 0) {
                        "Already pushed argument(s) ${operation.intParamName(parameter1)}" +
                            ", ${operation.intParamName(parameter2)}"
                    }
                    pushedIntMask = pushedIntMask or mask
                }
                val base = intArgsSize - peekOperation().ints
                val intArgs = intArgs
                intArgs[base + parameter1] = value1
                intArgs[base + parameter2] = value2
            }
```

<hr class="docs-overload-divider">

<h2 id="setints-parameter1-value1-parameter2-value2-parameter3-value3">setInts</h2>

```kotlin
inline fun setInts(
            parameter1: IntParameter,
            value1: Int,
            parameter2: IntParameter,
            value2: Int,
            parameter3: IntParameter,
            value3: Int,
        ) =
            with(stack) {
                if (EnableDebugRuntimeChecks) {
                    val mask = (0b1 shl parameter1) or (0b1 shl parameter2) or (0b1 shl parameter3)
                    debugRuntimeCheck(pushedIntMask and mask == 0) {
                        "Already pushed argument(s) ${operation.intParamName(parameter1)}" +
                            ", ${operation.intParamName(parameter2)}" +
                            ", ${operation.intParamName(parameter3)}"
                    }
                    pushedIntMask = pushedIntMask or mask
                }
                val base = intArgsSize - peekOperation().ints
                val intArgs = intArgs
                intArgs[base + parameter1] = value1
                intArgs[base + parameter2] = value2
                intArgs[base + parameter3] = value3
            }
```

<hr class="docs-overload-divider">

<h2 id="setobject-parameter-value">setObject</h2>

```kotlin
fun <T> setObject(parameter: ObjectParameter<T>, value: T) =
            with(stack) {
                if (EnableDebugRuntimeChecks) {
                    val mask = 0b1 shl parameter.offset
                    debugRuntimeCheck(pushedObjectMask and mask == 0) {
                        "Already pushed argument ${operation.objectParamName(parameter)}"
                    }
                    pushedObjectMask = pushedObjectMask or mask
                }
                objectArgs[topObjectIndexOf(parameter)] = value
            }
```

<hr class="docs-overload-divider">

<h2 id="setobjects-parameter1-value1-parameter2-value2">setObjects</h2>

```kotlin
fun <T, U> setObjects(
            parameter1: ObjectParameter<T>,
            value1: T,
            parameter2: ObjectParameter<U>,
            value2: U,
        ) =
            with(stack) {
                if (EnableDebugRuntimeChecks) {
                    val mask = (0b1 shl parameter1.offset) or (0b1 shl parameter2.offset)
                    debugRuntimeCheck(pushedObjectMask and mask == 0) {
                        "Already pushed argument(s) ${operation.objectParamName(parameter1)}" +
                            ", ${operation.objectParamName(parameter2)}"
                    }
                    pushedObjectMask = pushedObjectMask or mask
                }
                val base = objectArgsSize - peekOperation().objects
                val objectArgs = objectArgs
                objectArgs[base + parameter1.offset] = value1
                objectArgs[base + parameter2.offset] = value2
            }
```

<hr class="docs-overload-divider">

<h2 id="setobjects-parameter1-value1-parameter2-value2-parameter3-value3">setObjects</h2>

```kotlin
fun <T, U, V> setObjects(
            parameter1: ObjectParameter<T>,
            value1: T,
            parameter2: ObjectParameter<U>,
            value2: U,
            parameter3: ObjectParameter<V>,
            value3: V,
        ) =
            with(stack) {
                if (EnableDebugRuntimeChecks) {
                    val mask =
                        (0b1 shl parameter1.offset) or
                            (0b1 shl parameter2.offset) or
                            (0b1 shl parameter3.offset)
                    debugRuntimeCheck(pushedObjectMask and mask == 0) {
                        "Already pushed argument(s) ${operation.objectParamName(parameter1)}" +
                            ", ${operation.objectParamName(parameter2)}" +
                            ", ${operation.objectParamName(parameter3)}"
                    }
                    pushedObjectMask = pushedObjectMask or mask
                }
                val base = objectArgsSize - peekOperation().objects
                val objectArgs = objectArgs
                objectArgs[base + parameter1.offset] = value1
                objectArgs[base + parameter2.offset] = value2
                objectArgs[base + parameter3.offset] = value3
            }
```

<hr class="docs-overload-divider">

<h2 id="setobjects-parameter1-value1-parameter2-value2-parameter3-value3-parameter4-value4">setObjects</h2>

```kotlin
fun <T, U, V, W> setObjects(
            parameter1: ObjectParameter<T>,
            value1: T,
            parameter2: ObjectParameter<U>,
            value2: U,
            parameter3: ObjectParameter<V>,
            value3: V,
            parameter4: ObjectParameter<W>,
            value4: W,
        ) =
            with(stack) {
                if (EnableDebugRuntimeChecks) {
                    val mask =
                        (0b1 shl parameter1.offset) or
                            (0b1 shl parameter2.offset) or
                            (0b1 shl parameter3.offset) or
                            (0b1 shl parameter4.offset)
                    debugRuntimeCheck(pushedObjectMask and mask == 0) {
                        "Already pushed argument(s) ${operation.objectParamName(parameter1)}" +
                            ", ${operation.objectParamName(parameter2)}" +
                            ", ${operation.objectParamName(parameter3)}" +
                            ", ${operation.objectParamName(parameter4)}"
                    }
                    pushedObjectMask = pushedObjectMask or mask
                }
                val base = objectArgsSize - peekOperation().objects
                val objectArgs = objectArgs
                objectArgs[base + parameter1.offset] = value1
                objectArgs[base + parameter2.offset] = value2
                objectArgs[base + parameter3.offset] = value3
                objectArgs[base + parameter4.offset] = value4
            }
```

<div class='sourceset sourceset-common'>Common</div>

```kotlin
value class WriteScope(private val stack: Operations)
```

## Properties

<div class='sourceset sourceset-common'>Common</div>

```kotlin
val operation: Operation
```

## Functions

<hr class="docs-overload-divider">

<h2 id="setint-parameter-value-2">setInt</h2>

```kotlin
inline fun setInt(parameter: IntParameter, value: Int) =
            with(stack) {
                if (EnableDebugRuntimeChecks) {
                    val mask = 0b1 shl parameter
                    debugRuntimeCheck(pushedIntMask and mask == 0) {
                        "Already pushed argument ${operation.intParamName(parameter)}"
                    }
                    pushedIntMask = pushedIntMask or mask
                }
                intArgs[topIntIndexOf(parameter)] = value
            }
```

<hr class="docs-overload-divider">

<h2 id="setlong-highparameter-lowparameter-value">setLong</h2>

```kotlin
fun setLong(highParameter: IntParameter, lowParameter: IntParameter, value: Long)
```

<hr class="docs-overload-divider">

<h2 id="setints-parameter1-value1-parameter2-value2-2">setInts</h2>

```kotlin
inline fun setInts(
            parameter1: IntParameter,
            value1: Int,
            parameter2: IntParameter,
            value2: Int,
        ) =
            with(stack) {
                if (EnableDebugRuntimeChecks) {
                    val mask = (0b1 shl parameter1) or (0b1 shl parameter2)
                    debugRuntimeCheck(pushedIntMask and mask == 0) {
                        "Already pushed argument(s) ${operation.intParamName(parameter1)}" +
                            ", ${operation.intParamName(parameter2)}"
                    }
                    pushedIntMask = pushedIntMask or mask
                }
                val base = intArgsSize - peekOperation().ints
                val intArgs = intArgs
                intArgs[base + parameter1] = value1
                intArgs[base + parameter2] = value2
            }
```

<hr class="docs-overload-divider">

<h2 id="setints-parameter1-value1-parameter2-value2-parameter3-value3-2">setInts</h2>

```kotlin
inline fun setInts(
            parameter1: IntParameter,
            value1: Int,
            parameter2: IntParameter,
            value2: Int,
            parameter3: IntParameter,
            value3: Int,
        ) =
            with(stack) {
                if (EnableDebugRuntimeChecks) {
                    val mask = (0b1 shl parameter1) or (0b1 shl parameter2) or (0b1 shl parameter3)
                    debugRuntimeCheck(pushedIntMask and mask == 0) {
                        "Already pushed argument(s) ${operation.intParamName(parameter1)}" +
                            ", ${operation.intParamName(parameter2)}" +
                            ", ${operation.intParamName(parameter3)}"
                    }
                    pushedIntMask = pushedIntMask or mask
                }
                val base = intArgsSize - peekOperation().ints
                val intArgs = intArgs
                intArgs[base + parameter1] = value1
                intArgs[base + parameter2] = value2
                intArgs[base + parameter3] = value3
            }
```

<hr class="docs-overload-divider">

<h2 id="setobject-parameter-value-2">setObject</h2>

```kotlin
fun <T> setObject(parameter: ObjectParameter<T>, value: T) =
            with(stack) {
                if (EnableDebugRuntimeChecks) {
                    val mask = 0b1 shl parameter.offset
                    debugRuntimeCheck(pushedObjectMask and mask == 0) {
                        "Already pushed argument ${operation.objectParamName(parameter)}"
                    }
                    pushedObjectMask = pushedObjectMask or mask
                }
                objectArgs[topObjectIndexOf(parameter)] = value
            }
```

<hr class="docs-overload-divider">

<h2 id="setobjects-parameter1-value1-parameter2-value2-2">setObjects</h2>

```kotlin
fun <T, U> setObjects(
            parameter1: ObjectParameter<T>,
            value1: T,
            parameter2: ObjectParameter<U>,
            value2: U,
        ) =
            with(stack) {
                if (EnableDebugRuntimeChecks) {
                    val mask = (0b1 shl parameter1.offset) or (0b1 shl parameter2.offset)
                    debugRuntimeCheck(pushedObjectMask and mask == 0) {
                        "Already pushed argument(s) ${operation.objectParamName(parameter1)}" +
                            ", ${operation.objectParamName(parameter2)}"
                    }
                    pushedObjectMask = pushedObjectMask or mask
                }
                val base = objectArgsSize - peekOperation().objects
                val objectArgs = objectArgs
                objectArgs[base + parameter1.offset] = value1
                objectArgs[base + parameter2.offset] = value2
            }
```

<hr class="docs-overload-divider">

<h2 id="setobjects-parameter1-value1-parameter2-value2-parameter3-value3-2">setObjects</h2>

```kotlin
fun <T, U, V> setObjects(
            parameter1: ObjectParameter<T>,
            value1: T,
            parameter2: ObjectParameter<U>,
            value2: U,
            parameter3: ObjectParameter<V>,
            value3: V,
        ) =
            with(stack) {
                if (EnableDebugRuntimeChecks) {
                    val mask =
                        (0b1 shl parameter1.offset) or
                            (0b1 shl parameter2.offset) or
                            (0b1 shl parameter3.offset)
                    debugRuntimeCheck(pushedObjectMask and mask == 0) {
                        "Already pushed argument(s) ${operation.objectParamName(parameter1)}" +
                            ", ${operation.objectParamName(parameter2)}" +
                            ", ${operation.objectParamName(parameter3)}"
                    }
                    pushedObjectMask = pushedObjectMask or mask
                }
                val base = objectArgsSize - peekOperation().objects
                val objectArgs = objectArgs
                objectArgs[base + parameter1.offset] = value1
                objectArgs[base + parameter2.offset] = value2
                objectArgs[base + parameter3.offset] = value3
            }
```

<hr class="docs-overload-divider">

<h2 id="setobjects-parameter1-value1-parameter2-value2-parameter3-value3-parameter4-value4-2">setObjects</h2>

```kotlin
fun <T, U, V, W> setObjects(
            parameter1: ObjectParameter<T>,
            value1: T,
            parameter2: ObjectParameter<U>,
            value2: U,
            parameter3: ObjectParameter<V>,
            value3: V,
            parameter4: ObjectParameter<W>,
            value4: W,
        ) =
            with(stack) {
                if (EnableDebugRuntimeChecks) {
                    val mask =
                        (0b1 shl parameter1.offset) or
                            (0b1 shl parameter2.offset) or
                            (0b1 shl parameter3.offset) or
                            (0b1 shl parameter4.offset)
                    debugRuntimeCheck(pushedObjectMask and mask == 0) {
                        "Already pushed argument(s) ${operation.objectParamName(parameter1)}" +
                            ", ${operation.objectParamName(parameter2)}" +
                            ", ${operation.objectParamName(parameter3)}" +
                            ", ${operation.objectParamName(parameter4)}"
                    }
                    pushedObjectMask = pushedObjectMask or mask
                }
                val base = objectArgsSize - peekOperation().objects
                val objectArgs = objectArgs
                objectArgs[base + parameter1.offset] = value1
                objectArgs[base + parameter2.offset] = value2
                objectArgs[base + parameter3.offset] = value3
                objectArgs[base + parameter4.offset] = value4
            }
```

<hr class="docs-overload-divider">

<h2 id="requireapplication">requireApplication</h2>

```kotlin
fun requireApplication()
```

Manually flag that this sequence of operations has been updated with an operation that
requires the applier. This is typically handled automatically by checking the value of
`Operation.isExternallyVisible`.

This is intended for `Operation.ApplyChangeList`, since `isExternallyVisible` in this
context is a function of the nested change list, and isn't knowable statically.