public function finalize() { $compiler = $this->getCompiler(); $properties = $compiler->getProperties(); $blocks = isset($properties['blocks']) ? $properties['blocks'] : []; $blockTypes = isset($properties['blockTypes']) ? $properties['blockTypes'] : []; list($prolog) = parent::finalize(); if (isset($compiler->getProperties()['blocks'])) { foreach ($compiler->getProperties()['blocks'] as $key => $val) { $blocks[$key] = $val; } } if (isset($compiler->getProperties()['blockTypes'])) { foreach ($compiler->getProperties()['blockTypes'] as $key => $val) { $blockTypes[$key] = $val; } } $compiler->addProperty('blocks', $blocks); $compiler->addProperty('blockTypes', $blockTypes); if (!$this->redefinedBlocks) { return [$prolog]; } $compiler = $this->getCompiler(); $compiler->addProperty('redefinedBlocks', $this->redefinedBlocks); return [$prolog . ' $blocksToPrepend = []; foreach ($this->redefinedBlocks as $redefinedBlock) { foreach ($this->blockQueue[$redefinedBlock] as $i => $callback) { if ($callback[0] === $this) { $blocksToPrepend[] = [$redefinedBlock, $i]; } } } foreach ($blocksToPrepend as $blockToPrepend) { $cb = $this->blockQueue[$blockToPrepend[0]][$blockToPrepend[1]]; unset($this->blockQueue[$blockToPrepend[0]][$blockToPrepend[1]]); array_unshift($this->blockQueue[$blockToPrepend[0]], $cb); } ']; }