aboutsummaryrefslogtreecommitdiffstats
path: root/src/Data/JLD/Expansion.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Data/JLD/Expansion.hs')
-rw-r--r--src/Data/JLD/Expansion.hs31
1 files changed, 13 insertions, 18 deletions
diff --git a/src/Data/JLD/Expansion.hs b/src/Data/JLD/Expansion.hs
index 79a992d..beb10a3 100644
--- a/src/Data/JLD/Expansion.hs
+++ b/src/Data/JLD/Expansion.hs
@@ -167,7 +167,7 @@ eo1314ExpandValue activeProperty value = do
167 expandValue activeProperty value 167 expandValue activeProperty value
168 |> withStateRES eo1314StateJlde (\eo1314 jld -> eo1314{eo1314StateJlde = jld}) 168 |> withStateRES eo1314StateJlde (\eo1314 jld -> eo1314{eo1314StateJlde = jld})
169 169
170eo1314ExpandKeywordItem :: Monad m => Maybe Text -> Key -> Keyword -> Value -> EO1314T e m () 170eo1314ExpandKeywordItem :: forall e m. Monad m => Maybe Text -> Key -> Keyword -> Value -> EO1314T e m ()
171eo1314ExpandKeywordItem inputType key keyword value = do 171eo1314ExpandKeywordItem inputType key keyword value = do
172 JLDEEnv{..} <- ask 172 JLDEEnv{..} <- ask
173 let JLDExpansionEnv{..} = jldeEnvGlobal 173 let JLDExpansionEnv{..} = jldeEnvGlobal
@@ -335,15 +335,14 @@ eo1314ExpandKeywordItem inputType key keyword value = do
335 335
336 -- 13.4.13.4. 336 -- 13.4.13.4.
337 unless (KM.size expandedObjectValue == 1 && KM.member (show KeywordReverse) expandedObjectValue) do 337 unless (KM.size expandedObjectValue == 1 && KM.member (show KeywordReverse) expandedObjectValue) do
338 let go key' reverseMap (Array item) | key' /= show KeywordReverse = foldlM (go' key') reverseMap item
339 go _ reverseMap _ = pure reverseMap
340
341 go' _ _ item | isListObject item || isValueObject item = throwError <| InvalidReversePropertyValue
342 go' key' reverseMap item = pure <| mapAddValue key' item True reverseMap
343
338 reverseMap <- gets <| getMapDefault (show KeywordReverse) <. eo1314StateResult 344 reverseMap <- gets <| getMapDefault (show KeywordReverse) <. eo1314StateResult
339 reverseMap' <- 345 reverseMap' <- ifoldlM go reverseMap expandedObjectValue
340 (\fn -> ifoldlM fn reverseMap expandedObjectValue) <| \key' rm -> \case
341 Array item | key' /= show KeywordReverse -> do
342 (\fn -> foldlM fn rm item) <| \rm' i ->
343 if isListObject i || isValueObject i
344 then throwError <| InvalidReversePropertyValue
345 else pure <| mapAddValue key' i True rm'
346 _ -> pure rm
347 346
348 if KM.null reverseMap' 347 if KM.null reverseMap'
349 then eo1314ModifyResult <| KM.delete (show KeywordReverse) 348 then eo1314ModifyResult <| KM.delete (show KeywordReverse)
@@ -555,16 +554,12 @@ eo1314ExpandNonKeywordItem key expandedProperty value = do
555 -- 13.13. 554 -- 13.13.
556 if maybe False termDefinitionReversePropertyFlag keyTermDefinition 555 if maybe False termDefinitionReversePropertyFlag keyTermDefinition
557 then do 556 then do
558 reverseMap <- gets <| getMapDefault (show KeywordReverse) <. eo1314StateResult
559
560 -- 13.13.3. 13.13.4. 557 -- 13.13.3. 13.13.4.
561 reverseMap' <- 558 let go _ item | isListObject item || isValueObject item = throwError InvalidReversePropertyValue
562 (\fn -> foldlM fn reverseMap (valueToArray expandedValue'')) <| \rm item -> 559 go reverseMap item = pure <| mapAddValue (K.fromText expandedProperty) item True reverseMap
563 if isListObject item || isValueObject item 560
564 then -- 13.13.4.1. 561 reverseMap <- gets <| getMapDefault (show KeywordReverse) <. eo1314StateResult
565 throwError InvalidReversePropertyValue 562 reverseMap' <- foldlM go reverseMap (valueToArray expandedValue'')
566 else -- 13.13.4.3.
567 pure <| mapAddValue (K.fromText expandedProperty) item True rm
568 563
569 eo1314ModifyResult <| KM.insert (show KeywordReverse) (Object reverseMap') 564 eo1314ModifyResult <| KM.insert (show KeywordReverse) (Object reverseMap')
570 else -- 13.14. 565 else -- 13.14.