yeptris 0.6.54.0-arm-linux-eabihf → 0.6.55.1-arm-linux-eabihf

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 98eb93f4bcbc15ae9cdbb27ca0c0df3f713f339e5d31a47223410f395b92cb86
4
- data.tar.gz: 567addfbae19c7b3b3dcf59ff9e073bc3a04372343b965cdd618bea92cbf6cae
3
+ metadata.gz: 03b4a88095b07d80c6739ced2cc9d69513b592bf99708fb5bb249b486291a2b8
4
+ data.tar.gz: 72f365c3a9b7a7a6587dfc1e572d7740f7c2e8039bfb8d7d4090f85708e8c4da
5
5
  SHA512:
6
- metadata.gz: 6b582fa561076e339b246acac3d9ede1d1b67f31543617df6760c14fe88540938183f4f19ebc5c58a20ff85a288edd993fe39f1a0be6191fd8c78d004b1f42a3
7
- data.tar.gz: efaf2d6acdc439d85f9a098e4a1dc6b989d8861f25589dd1587bee33a272e41d5e1c8944908d363ab32f1493db6ecd337a06232e574d6247ae1242a34ada17f5
6
+ metadata.gz: e84c19b55d5796f71173771cfbe571a389968472c58d40ff75f3a766ee0c133d9b68f3d037f3f42d25cdb7f4ce6035a64a41d8b5500032045d2c0f34ce82e851
7
+ data.tar.gz: e2f0340489e971cf2b37008cea9f915519b61da15aaba26f87c0c82f9523ee98b7e682f4c6de13641feebeb2bd8cc75b24c6e49fe85e240ef3b652cd8b71e542
@@ -11,8 +11,8 @@
11
11
 
12
12
  #define YEPTRIS_VERSION_MAJOR 0
13
13
  #define YEPTRIS_VERSION_MINOR 6
14
- #define YEPTRIS_VERSION_PATCH 54
15
- #define YEPTRIS_VERSION_STRING "0.6.54"
14
+ #define YEPTRIS_VERSION_PATCH 55
15
+ #define YEPTRIS_VERSION_STRING "0.6.55"
16
16
 
17
17
  #ifdef __cplusplus
18
18
  extern "C" {
@@ -320,6 +320,10 @@ module Yeptris
320
320
  target = merge_target.pop
321
321
  merge_into(target, done) if target
322
322
  when DOCUMENT_START
323
+ # anchors are per-document (the engine memo law; PyYAML's
324
+ # composer resets per document): a later document's alias
325
+ # must not resolve into an earlier one's name
326
+ anchors.clear
323
327
  docs.push(nil)
324
328
  end
325
329
  i += FIELDS
data/lib/yeptris.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  module Yeptris
4
4
  # The gem's version lives in the parent namespace's file — the last
5
5
  # internal require (yeptris/version) retired with it.
6
- VERSION = "0.6.54.0".freeze
6
+ VERSION = "0.6.55.1".freeze
7
7
 
8
8
  # Informational notices are OPT-IN (yeptris-ruby#217): consumers
9
9
  # embed yeptris inside CLIs that assert clean stderr, and a
data/libyeptris.so CHANGED
Binary file
@@ -3,7 +3,7 @@
3
3
  cmake_minimum_required(VERSION 3.20)
4
4
 
5
5
  project(yeptris
6
- VERSION 0.6.54
6
+ VERSION 0.6.55
7
7
  DESCRIPTION "Ultra-fast YAML 1.2 parser, emitter and streamer in C"
8
8
  LANGUAGES C CXX
9
9
  )
@@ -105,8 +105,8 @@ typedef struct {
105
105
  uint8_t style;
106
106
  uint8_t flags; /* YEPTRIS_EF_* */
107
107
  uint8_t tag_id; /* resolved implicit tag (YeptrisTagId, resolve.h) —
108
- * the typing SSOT, so hosts never re-scan. Uses the
109
- * struct's pad byte: sizeof stays 36 (ABI-pinned) */
108
+ * the typing SSOT, so hosts never re-scan (the
109
+ * struct is 44B, ABI-pinned; the bindings mirror it) */
110
110
  uint32_t line;
111
111
  uint32_t col;
112
112
  uint32_t end_line; /* #179: libyaml end_mark semantics (see the
@@ -590,6 +590,8 @@ void ytap_sink(yep_ytape* t, yep_sink* sink) {
590
590
  sink->on_scalar = yt_on_scalar;
591
591
  sink->on_block_open = yt_on_block_open;
592
592
  sink->on_block_item = yt_on_block_item;
593
+ sink->compose = 1; /* the tape replays into a DOM: the composer's
594
+ * undefined-alias rejection stays at parse time */
593
595
  }
594
596
 
595
597
  /* ---- replay ---- */
@@ -1435,13 +1435,22 @@ static int e_alias(yep_engine* e, yep_event* ev) {
1435
1435
  return e_fail(e, YEP_ERR_UNEXPECTED, star);
1436
1436
  }
1437
1437
  uint32_t target = anchor_id_of(e, name);
1438
- if (target == 0 || (target <= e->anchor_serial && e->anchor_placed != NULL &&
1439
- e->anchor_placed[target - 1] == 0)) {
1438
+ /* libyaml's scanner/composer split: the scanner emits the ALIAS
1439
+ * event for ANY name; the composer rejects what it cannot resolve
1440
+ * ("found undefined alias"). Rejecting here unconditionally made
1441
+ * event streams (recorder/pull/push) diverge from libyaml's for
1442
+ * every dangling alias ({?\n:*c }, the nightly's r101), so the
1443
+ * rejection rides the sink's compose bit: document builders (the
1444
+ * DOM, the record tape) keep the parse-time error, event
1445
+ * consumers carry the name for their host's resolution (the ruby
1446
+ * materializer raises; the py loader does since this change too). */
1447
+ if (e->sink != NULL && e->sink->compose &&
1448
+ (target == 0 || (target <= e->anchor_serial && e->anchor_placed != NULL &&
1449
+ e->anchor_placed[target - 1] == 0))) {
1440
1450
  /* undefined, or defined-but-not-yet-placed: the props scan
1441
1451
  * registers the name before the anchor's node reaches the
1442
1452
  * output, so an alias here would precede its definition and
1443
- * the re-parse would reject the document (libyaml: "found
1444
- * undefined alias") */
1453
+ * the re-parse would reject the document */
1445
1454
  e->pos = star;
1446
1455
  return e_fail(e, YEP_ERR_UNDEFINED_ALIAS, star);
1447
1456
  }
@@ -110,6 +110,13 @@ typedef struct yep_sink {
110
110
  int (*on_scalar)(void* ctx, const struct yep_view* value, const struct yep_view* tag,
111
111
  const struct yep_view* anchor, uint32_t anchor_id, uint8_t tag_id,
112
112
  uint8_t style, uint8_t implicit, uint8_t flow, int borrowed);
113
+ /* Document composers (libyaml's scanner/composer split): the
114
+ * scanner emits the ALIAS event for ANY name, while a sink that
115
+ * builds a document rejects an alias whose target is undefined or
116
+ * not yet placed ("found undefined alias"). Set for the DOM and
117
+ * record-tape routes; event consumers (recorder/pull/push) leave
118
+ * it 0 so their streams carry every alias like libyaml's. */
119
+ uint8_t compose;
113
120
  } yep_sink;
114
121
 
115
122
  /* Value facts for on_block_pair (the classified value classes the
@@ -410,7 +410,8 @@ engine_enter:
410
410
  .on_block_pair = dom_on_block_pair,
411
411
  .on_scalar = dom_on_scalar,
412
412
  .on_block_open = dom_on_block_open,
413
- .on_block_item = dom_on_block_item};
413
+ .on_block_item = dom_on_block_item,
414
+ .compose = 1};
414
415
  }
415
416
  int rc = 0;
416
417
  if (have_tape && !norm_kept_raw && ytap_flow_rooted(&yt) == 0) {
@@ -248,7 +248,8 @@ YEPTRIS_API YeptrisStatus yeptris_schema_load(const char* source, size_t len, Ye
248
248
  .on_block_pair = dom_on_block_pair,
249
249
  .on_scalar = dom_on_scalar,
250
250
  .on_block_open = dom_on_block_open,
251
- .on_block_item = dom_on_block_item};
251
+ .on_block_item = dom_on_block_item,
252
+ .compose = 1};
252
253
  if (eng == NULL || dom == NULL) {
253
254
  st = YEPTRIS_ERROR_MEMORY;
254
255
  goto out;
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yeptris
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.54.0
4
+ version: 0.6.55.1
5
5
  platform: arm-linux-eabihf
6
6
  authors:
7
7
  - Ribose Inc.