# Calls and arithmetic

Source: https://hashisoft.com/docs/dashboard/calls-and-arithmetic/introduction

Protect calls and calculations

Configure InvokeDynamic routing, reference protection and instruction mutation. Each pass has its own control so you can enable only the transformations your application needs.

## Configuration

These entries belong in the `engine` block of your RR configuration.

```rr
engine ^ {
  linkedIndy true;
  skipReflection false;
  skipConstructorIndy false;
}
```

## Keep the JVM target in mind

The condy backend requires ConstantDynamic support on the target JVM. Expression depth and expression families control different parts of arithmetic generation. Increasing either can add bytecode and execution cost.

## Option reference

For options beginning with `skip`, `false` enables the pass.

### InvokeDynamic Obfuscation

boolean

`linkedIndy`

Enables linked InvokeDynamic protection. Constants, references and constructors have separate controls.

Panel default `true`

### Reference Encryption

boolean

`skipReflection`

Protects supported method and field references. Enabled exports skipReflection false.

Panel default `false`

### Constructor calls

boolean

`skipConstructorIndy`

Transforms supported constructor calls through InvokeDynamic. JVM initialization rules can exclude individual call sites.

Panel default `false`

### Distributed bootstrap

boolean

`skipDistributedReferenceBootstrap`

Includes distributed bootstrap generation for supported references.

Panel default `false`

### Reference protocols

boolean

`referenceProtocols`

Enables the reference protocol option. Constant backend selection remains independent.

Panel default `true`

### Caller metadata flow

boolean

`callerMetadataFlow`

Includes caller metadata in supported call transformations. Coverage depends on the selected engine profile.

Panel default `true`

### Constant backend

enum

`constantBackend`

Selects InvokeDynamic compatibility mode or ConstantDynamic. The target JVM must support the chosen backend.

Panel default `indyCompat`Values `indyCompat · condy`

### Constant transformation

boolean

`bozarConst`

Transforms numeric constants. Constant-only expressions may still be simplified by analysis tools.

Panel default `true`

### Instruction Mutation

boolean

`skipArithmetic`

Replaces supported arithmetic instructions with equivalent bytecode sequences.

Panel default `false`

### Chained MBA

boolean

`chainedMba`

Enables chained mixed Boolean arithmetic. Flow and InvokeDynamic are configured separately.

Panel default `true`

### Expression depth

enum

`expressionSteps`

Sets expression depth from 0 to 8. Increasing depth can increase bytecode size and execution cost.

Panel default `0`Values `0 · 1 · 2 · 3 · 4 · 5 · 6 · 7 · 8`

### Expression families

enum

`expressionClasses`

Sets the number of expression families from 0 to 6. This is separate from expression depth.

Panel default `5`Values `0 · 1 · 2 · 3 · 4 · 5 · 6`

### Selective inlining

boolean

`skipSelectiveInlining`

Includes selective inlining at supported call sites.

Panel default `false`

## Related guides

[RR configurations ](https://hashisoft.com/docs/configurations)[Submit a build ](https://hashisoft.com/docs/quickstart)
