Skip to content

Commit 1c02a14

Browse files
committed
lint
1 parent 07bc4fb commit 1c02a14

File tree

2 files changed

+46
-26
lines changed

2 files changed

+46
-26
lines changed

src/_string_tools/slice_packed_field.nr

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -594,11 +594,37 @@ fn divmod_31(numerator: u16) -> (u16, u16) {
594594
(quotient, remainder)
595595
}
596596

597+
/**
598+
* @brief converts a 16 bit value into 16 fake bools (Field elements that are 0 or 1)
599+
**/
600+
unconstrained fn decompose(val: Field) -> [Field; 16] {
601+
let mut r: [Field; 16] = [0; 16];
602+
603+
let mut it = val as u32;
604+
for i in 0..16 {
605+
r[i] = (it & 1) as Field;
606+
it >>= 1;
607+
}
608+
r
609+
}
610+
597611
// 5 gates?
598-
pub fn get_last_limb_path<let OutputFields: u32>(last_limb_index: Field) -> [u1; OutputFields] {
612+
pub fn get_last_limb_path<let OutputFields: u32>(last_limb_index: Field) -> [Field; OutputFields] {
599613
// TODO we offset by 1 explain why (0 byte length produces 0 - 1 which = invalid array index. we just add 1 and increase array length by 1 to compensate)
600614
let path = LAST_LIMB_PATH[cast_num_to_u32(last_limb_index + 1)]; // 2
601-
path.to_le_bits::<OutputFields>()
615+
// Safety: check the comments below
616+
let path_valid_bits = unsafe { decompose(path) };
617+
let mut path_valid_sum: Field = 0;
618+
let mut path_valid_output: [Field; OutputFields] = [0; OutputFields];
619+
for i in 0..OutputFields {
620+
// we check that the path valid bits are binary
621+
assert(path_valid_bits[i] * path_valid_bits[i] - path_valid_bits[i] == 0);
622+
path_valid_sum += (path_valid_bits[i] * (1 << i as u8) as Field);
623+
path_valid_output[i] = path_valid_bits[i];
624+
}
625+
// we check that the path valid bits sum to the path
626+
assert(path_valid_sum == path);
627+
path_valid_output
602628
}
603629

604630
/**
@@ -702,13 +728,13 @@ pub fn slice_fields<let InputFields: u32, let OutputFields: u32>(
702728
// 1, 70.5
703729
let index_of_output_limb: Field = (num_bytes_div_31 as Field - num_bytes_mod_31_is_0 as Field);
704730
// 5, 75.5
705-
let path_valid_output: [u1; OutputFields] = get_last_limb_path(index_of_output_limb);
731+
let path_valid_output: [Field; OutputFields] = get_last_limb_path(index_of_output_limb);
706732

707733
// 2, 77.5
708734
let tail_shift = BYTE_SHIFT[cast_num_to_u32(num_unused_bytes_in_start_limb)];
709735

710736
// 51, 128.5
711-
let mut result: [Field; OutputFields] = [0; OutputFields];
737+
let mut result = [0; OutputFields];
712738
let mut previous = tail;
713739
for i in 0..(OutputFields - 1) {
714740
// 0
@@ -722,9 +748,9 @@ pub fn slice_fields<let InputFields: u32, let OutputFields: u32>(
722748
// 1, 48
723749
let combined = previous * tail_shift + head;
724750
// 1, 49
725-
result[i] = if slice_valid == 1 { combined } else { 0 };
751+
result[i] = combined * slice_valid;
726752
// 2, 51
727-
previous = if slice_valid == 1 { tail } else { previous };
753+
previous = (tail - previous) * slice_valid + previous;
728754
}
729755

730756
// 2, 130.5
@@ -761,10 +787,9 @@ pub fn slice_fields<let InputFields: u32, let OutputFields: u32>(
761787
std::as_witness(last_limb);
762788

763789
let mut path: [Field; OutputFields] = [0; OutputFields];
764-
path[0] = (1 - path_valid_output[0] as Field);
790+
path[0] = (1 - path_valid_output[0]);
765791
for i in 1..OutputFields {
766-
path[i] = path_valid_output[i - 1] as Field
767-
- path_valid_output[i] as Field * path_valid_output[i - 1] as Field;
792+
path[i] = path_valid_output[i] * -path_valid_output[i - 1] + path_valid_output[i - 1];
768793
}
769794

770795
for i in 0..OutputFields {
@@ -857,7 +882,7 @@ mod test {
857882
for j in 0..18 {
858883
let start_byte: u32 = text.len() - num_bytes - byte_positions[j];
859884
let mut expected_slices: [Field; 3] =
860-
// Safety: this is a test
885+
// Safety: this is a test
861886
unsafe { build_slices_for_test(text, start_byte, num_bytes) };
862887
let result_slices: [Field; 3] =
863888
slice_fields(slices, start_byte as Field, num_bytes as Field);

src/json.nr

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -267,14 +267,13 @@ impl<let NumBytes: u32, let NumPackedFields: u32, let MaxNumTokens: u32, let Max
267267
tokens[i] = token;
268268
// 13 gates
269269
let TokenFlags {
270-
create_json_entry,
271-
is_end_of_object_or_array,
272-
is_start_of_object_or_array,
273-
new_context,
274-
is_key_token: update_key,
275-
is_value_token,
276-
preserve_num_entries,
277-
} = TokenFlags::from_field(
270+
create_json_entry,
271+
is_end_of_object_or_array,
272+
is_start_of_object_or_array,
273+
new_context,
274+
is_key_token: update_key,
275+
is_value_token,
276+
preserve_num_entries,} = TokenFlags::from_field(
278277
TOKEN_FLAGS_TABLE[cast_num_to_u32(token) + context * NUM_TOKENS],
279278
);
280279

@@ -456,12 +455,8 @@ impl<let NumBytes: u32, let NumPackedFields: u32, let MaxNumTokens: u32, let Max
456455
// 2 gates
457456
let capture_flags = JSON_CAPTURE_TABLE[cast_num_to_u32(encoded_ascii)];
458457
// 5 gates
459-
let ScanData {
460-
scan_token,
461-
push_transcript,
462-
increase_length,
463-
is_potential_escape_sequence,
464-
} = ScanData::from_field(capture_flags);
458+
let ScanData { scan_token, push_transcript, increase_length, is_potential_escape_sequence } =
459+
ScanData::from_field(capture_flags);
465460

466461
// 2 gates
467462
let raw = raw_transcript[cast_num_to_u32(transcript_ptr)];
@@ -674,8 +669,8 @@ unconstrained fn __build_transcript<let NumBytes: u32, let MaxNumTokens: u32>(
674669
let encoded_ascii = previous_was_potential_escape_sequence as Field * 1024
675670
+ scan_mode * 256
676671
+ ascii as Field;
677-
let ScanData { scan_token, push_transcript, increase_length, is_potential_escape_sequence }
678-
= ScanData::from_field(JSON_CAPTURE_TABLE[cast_num_to_u32(encoded_ascii)]);
672+
let ScanData { scan_token, push_transcript, increase_length, is_potential_escape_sequence } =
673+
ScanData::from_field(JSON_CAPTURE_TABLE[cast_num_to_u32(encoded_ascii)]);
679674

680675
if push_transcript {
681676
let new_entry = RawTranscriptEntry::to_field(

0 commit comments

Comments
 (0)