private function doArrayAssignment(
        CodePrinter $codePrinter,
        CompiledExpression $resolvedExpr,
        ZephirVariable $symbolVariable,
        $variable,
        array $statement,
        CompilationContext $compilationContext
    ) {
        switch ($resolvedExpr->getType()) {
            case 'variable':
            case 'array':
                switch ($statement['operator']) {
                    case 'assign':
                        if ($variable != $resolvedExpr->getCode()) {
                            $symbolVariable->setMustInitNull(true);
                            $compilationContext->symbolTable->mustGrownStack(true);

                            /* Inherit the dynamic type data from the assigned value */
                            $symbolVariable->setDynamicTypes('array');
                            $symbolVariable->increaseVariantIfNull();
                            $symbol = $compilationContext->backend->getVariableCode($symbolVariable);

                            $codePrinter->output('ZEPHIR_CPY_WRT('.$symbol.', '.$compilationContext->backend->resolveValue($resolvedExpr, $compilationContext).');');
                        }
                        break;

                    default:
                        throw new IllegalOperationException($statement, $resolvedExpr, $resolvedExpr->getOriginal());
                }
                break;

            default:
                throw new CompilerException("Cannot '".$statement['operator']."' ".$resolvedExpr->getType().' for array type', $resolvedExpr->getOriginal());
        }
    }