@@ -62,7 +62,7 @@ data Event =
6262 | EventDocumentEnd
6363 | EventAlias !AnchorName
6464 | EventScalar !ByteString !Tag !Style !Anchor
65− | EventSequenceStart !Anchor
65+ | EventSequenceStart !Tag !Anchor
6666 | EventSequenceEnd
6767 | EventMappingStart !Tag !Anchor
6868 | EventMappingEnd
@@ -229,6 +229,12 @@ foreign import ccall unsafe "get_scalar_anchor"
229229foreign import ccall unsafe "get_sequence_start_anchor"
230230 c_get_sequence_start_anchor :: EventRaw -> IO CString
231231
232+foreign import ccall unsafe "get_sequence_start_tag"
233+ c_get_sequence_start_tag :: EventRaw -> IO CString
234+
235+foreign import ccall unsafe "get_sequence_start_tag_len"
236+ c_get_sequence_start_tag_len :: EventRaw -> IO CULong
237+
232238foreign import ccall unsafe "get_mapping_start_anchor"
233239 c_get_mapping_start_anchor :: EventRaw -> IO CString
234240
@@ -282,10 +288,24 @@ getEvent er = do
282288 anchor <- if yanchor == nullPtr
283289 then return Nothing
284290 else Just <$> peekCString yanchor
285− return $ Just $ EventSequenceStart anchor
291+ ytag <- c_get_sequence_start_tag er
292+ tag <- if ytag == nullPtr
293+ then return NoTag
294+ else do
295+ ytag_len <- c_get_sequence_start_tag_len er
296+ let ytag' = castPtr ytag
297+ let ytag_len' = fromEnum ytag_len
298+ bsToTag <$>
299+ if ytag_len' == 0
300+ then return Data.ByteString.empty
301+ else packCStringLen (ytag', ytag_len')
302+ return $ Just $ EventSequenceStart tag anchor
286303 YamlSequenceEndEvent -> return $ Just EventSequenceEnd
287304 YamlMappingStartEvent -> do
288305 yanchor <- c_get_mapping_start_anchor er
306+ anchor <- if yanchor == nullPtr
307+ then return Nothing
308+ else Just <$> peekCString yanchor
289309 ytag <- c_get_mapping_start_tag er
290310 tag <- if ytag == nullPtr
291311 then return NoTag
@@ -297,9 +317,6 @@ getEvent er = do
297317 if ytag_len' == 0
298318 then return Data.ByteString.empty
299319 else packCStringLen (ytag', ytag_len')
300− anchor <- if yanchor == nullPtr
301− then return Nothing
302− else Just <$> peekCString yanchor
303320 return $ Just $ EventMappingStart tag anchor
304321 YamlMappingEndEvent -> return $ Just EventMappingEnd
305322
@@ -447,22 +464,26 @@ toEventRaw e f = allocaBytes eventSize $ \er -> do
447464 0 -- plain_implicit
448465 qi -- quoted_implicit
449466 style' -- style
450− EventSequenceStart Nothing ->
451− c_yaml_sequence_start_event_initialize
452− er
453− nullPtr
454− nullPtr
455− 1
456− 0 -- YAML_ANY_SEQUENCE_STYLE
457− EventSequenceStart (Just anchor) ->
458− withCString anchor $ \anchor' -> do
459− let anchorP = castPtr anchor'
467+ EventSequenceStart tag Nothing ->
468+ withCString (tagToString tag) $ \tag' -> do
469+ let tagP = castPtr tag'
460470 c_yaml_sequence_start_event_initialize
461− er
462− anchorP
463− nullPtr
464− 1
465− 0 -- YAML_ANY_SEQUENCE_STYLE
471+ er
472+ nullPtr
473+ tagP
474+ 1
475+ 0 -- YAML_ANY_SEQUENCE_STYLE
476+ EventSequenceStart tag (Just anchor) ->
477+ withCString (tagToString tag) $ \tag' -> do
478+ let tagP = castPtr tag'
479+ withCString anchor $ \anchor' -> do
480+ let anchorP = castPtr anchor'
481+ c_yaml_sequence_start_event_initialize
482+ er
483+ anchorP
484+ tagP
485+ 1
486+ 0 -- YAML_ANY_SEQUENCE_STYLE
466487 EventSequenceEnd ->
467488 c_yaml_sequence_end_event_initialize er
468489 EventMappingStart tag Nothing ->