git.delta.rocks / jrsonnet / refs/commits / a6892a95138f

difftreelog

fix(rowan-parser) forbid assert in objcomp

Yaroslav Bolyukin2023-09-04parent: #cf173f6.patch.diff
in: master

3 files changed

modifiedcrates/jrsonnet-rowan-parser/src/parser.rsdiffbeforeafterboth
408408
409 let mut elems = 0;409 let mut elems = 0;
410 let mut compspecs = Vec::new();410 let mut compspecs = Vec::new();
411 let mut asserts = Vec::new();
411 loop {412 loop {
412 if p.at(T!['}']) {413 if p.at(T!['}']) {
413 p.bump();414 p.bump();
430 let m = p.start();431 let m = p.start();
431 if p.at(T![local]) {432 if p.at(T![local]) {
432 obj_local(p);433 obj_local(p);
433 m.complete(p, MEMBER_BIND_STMT)434 m.complete(p, MEMBER_BIND_STMT);
434 } else if p.at(T![assert]) {435 } else if p.at(T![assert]) {
435 assertion(p);436 assertion(p);
436 m.complete(p, MEMBER_ASSERT_STMT)437 asserts.push(m.complete(p, MEMBER_ASSERT_STMT));
437 } else {438 } else {
438 field_name(p);439 field_name(p);
439 if p.at(T![+]) {440 if p.at(T![+]) {
455 expr(p);456 expr(p);
456 false457 false
457 };458 };
459 elems += 1;
458460
459 if params {461 if params {
460 m.complete(p, MEMBER_FIELD_METHOD)462 m.complete(p, MEMBER_FIELD_METHOD)
461 } else {463 } else {
462 m.complete(p, MEMBER_FIELD_NORMAL)464 m.complete(p, MEMBER_FIELD_NORMAL)
463 }465 };
464 };466 };
465 elems += 1;
466 while p.at_ts(COMPSPEC) {467 while p.at_ts(COMPSPEC) {
467 compspecs.push(compspec(p));468 compspecs.push(compspec(p));
468 }469 }
482 }483 }
483 m.complete(p, OBJ_BODY_MEMBER_LIST);484 m.complete(p, OBJ_BODY_MEMBER_LIST);
484 } else if !compspecs.is_empty() {485 } else if !compspecs.is_empty() {
486 for errored in asserts {
487 errored.wrap_error(p, "asserts can't be used in object comprehensions");
488 }
485 m.complete(p, OBJ_BODY_COMP);489 m.complete(p, OBJ_BODY_COMP);
486 } else {490 } else {
487 m.complete(p, OBJ_BODY_MEMBER_LIST);491 m.complete(p, OBJ_BODY_MEMBER_LIST);
addedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_incompatible_with_asserts.snapdiffbeforeafterboth

no changes

modifiedcrates/jrsonnet-rowan-parser/src/tests.rsdiffbeforeafterboth
212 {a:1, b:1, for a in [1, 2, 3], c:1}212 {a:1, b:1, for a in [1, 2, 3], c:1}
213 "#213 "#
214
215 obj_compspec_incompatible_with_asserts => r#"
216 {assert 1, a: 1 for a in [1,2,3]}
217 "#
214218
215 local_method => r#"219 local_method => r#"
216 local220 local