Class

Operations.WriteScope

Common
value class WriteScope(private val stack: Operations)

Properties

Common
val operation: Operation

Functions

setInt

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
            }

setInts

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
            }

setInts

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
            }

setObject

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
            }

setObjects

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
            }

setObjects

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
            }

setObjects

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
            }
Common
value class WriteScope(private val stack: Operations)

Properties

Common
val operation: Operation

Functions


setInt

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
            }

setLong

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

setInts

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
            }

setInts

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
            }

setObject

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
            }

setObjects

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
            }

setObjects

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
            }

setObjects

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
            }

requireApplication

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.