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()