diff --git a/psalm.xml b/psalm.xml index c6e1935..4f01c49 100644 --- a/psalm.xml +++ b/psalm.xml @@ -32,6 +32,7 @@ + diff --git a/src/Parsedown.php b/src/Parsedown.php index 679376a..711f939 100644 --- a/src/Parsedown.php +++ b/src/Parsedown.php @@ -28,12 +28,6 @@ final class Parsedown public function __construct(State $State = null) { $this->State = $State ?: new State; - - // ensure we cache the initial value if these weren't explicitly set - $this->State = $this->State->mergingWith(new State([ - $this->State->get(BlockTypes::class), - $this->State->get(InlineTypes::class), - ])); } /** diff --git a/src/State.php b/src/State.php index c94b9af..6824758 100644 --- a/src/State.php +++ b/src/State.php @@ -9,9 +9,14 @@ final class State { /** * @var array, Configurable> - * */ + */ private $state; + /** + * @var array, Configurable> + */ + private static $initialCache; + /** * @param Configurable[] $Configurables */ @@ -48,13 +53,18 @@ final class State * @template-typeof T $configurableClass * @param class-string $configurableClass * @return T - * */ + */ public function get($configurableClass) { - return (isset($this->state[$configurableClass]) - ? $this->state[$configurableClass] - : $configurableClass::initial() - ); + if (isset($this->state[$configurableClass])) { + return $this->state[$configurableClass]; + } + + if (! isset(self::$initialCache[$configurableClass])) { + self::$initialCache[$configurableClass] = $configurableClass::initial(); + } + + return self::$initialCache[$configurableClass]; } public function __clone()