@@ -364,14 +364,14 @@ pub(super) fn explain(
364364 OP_INIT => {
365365 // start at <p2>
366366 state. visited [ state. program_i ] = true ;
367- state. program_i = p2 as usize ;
367+ state. program_i = usize:: try_from ( p2 ) . unwrap_or ( 0 ) ;
368368 continue ;
369369 }
370370
371371 OP_GOTO => {
372372 // goto <p2>
373373 state. visited [ state. program_i ] = true ;
374- state. program_i = p2 as usize ;
374+ state. program_i = usize:: try_from ( p2 ) . unwrap_or ( 0 ) ;
375375 continue ;
376376 }
377377
@@ -388,7 +388,7 @@ pub(super) fn explain(
388388 state. visited [ state. program_i ] = true ;
389389
390390 let mut branch_state = state. clone ( ) ;
391- branch_state. program_i = p2 as usize ;
391+ branch_state. program_i = usize:: try_from ( p2 ) . unwrap_or ( 0 ) ;
392392 states. push ( branch_state) ;
393393
394394 state. program_i += 1 ;
@@ -401,7 +401,7 @@ pub(super) fn explain(
401401 state. r . insert ( p1, RegDataType :: Int ( p3) ) ;
402402
403403 if p2 != 0 {
404- state. program_i = p2 as usize ;
404+ state. program_i = usize:: try_from ( p2 ) . unwrap_or ( 0 ) ;
405405 } else {
406406 state. program_i += 1 ;
407407 }
@@ -413,10 +413,10 @@ pub(super) fn explain(
413413 state. visited [ state. program_i ] = true ;
414414 if let Some ( RegDataType :: Int ( yield_i) ) = state. r . get ( & p1) {
415415 if let Some ( ( _, yield_op, _, yield_p2, _, _) ) =
416- program. get ( * yield_i as usize )
416+ program. get ( usize :: try_from ( * yield_i) . unwrap_or ( 0 ) )
417417 {
418418 if OP_YIELD == yield_op. as_str ( ) {
419- state. program_i = ( * yield_p2) as usize ;
419+ state. program_i = usize :: try_from ( * yield_p2) . unwrap_or ( 0 ) ;
420420 state. r . remove ( & p1) ;
421421 continue ;
422422 } else {
@@ -434,7 +434,7 @@ pub(super) fn explain(
434434 // jump to the instruction after the instruction pointed at by register p1
435435 state. visited [ state. program_i ] = true ;
436436 if let Some ( RegDataType :: Int ( return_i) ) = state. r . get ( & p1) {
437- state. program_i = ( * return_i + 1 ) as usize ;
437+ state. program_i = usize :: try_from ( * return_i + 1 ) . unwrap_or ( 0 ) ;
438438 state. r . remove ( & p1) ;
439439 continue ;
440440 } else {
@@ -450,15 +450,15 @@ pub(super) fn explain(
450450
451451 //if yielding to a yield operation, go to the NEXT instruction after that instruction
452452 if program
453- . get ( * yield_i as usize )
453+ . get ( usize :: try_from ( * yield_i) . unwrap_or ( 0 ) )
454454 . map ( |( _, yield_op, _, _, _, _) | yield_op. as_str ( ) )
455455 == Some ( OP_YIELD )
456456 {
457- state. program_i = ( * yield_i + 1 ) as usize ;
457+ state. program_i = usize :: try_from ( * yield_i + 1 ) . unwrap_or ( 0 ) ;
458458 * yield_i = program_i as i64 ;
459459 continue ;
460460 } else {
461- state. program_i = * yield_i as usize ;
461+ state. program_i = usize :: try_from ( * yield_i) . unwrap_or ( 0 ) ;
462462 * yield_i = program_i as i64 ;
463463 continue ;
464464 }
@@ -472,15 +472,15 @@ pub(super) fn explain(
472472 state. visited [ state. program_i ] = true ;
473473
474474 let mut branch_state = state. clone ( ) ;
475- branch_state. program_i = p1 as usize ;
475+ branch_state. program_i = usize:: try_from ( p1 ) . unwrap_or ( 0 ) ;
476476 states. push ( branch_state) ;
477477
478478 let mut branch_state = state. clone ( ) ;
479- branch_state. program_i = p2 as usize ;
479+ branch_state. program_i = usize:: try_from ( p2 ) . unwrap_or ( 0 ) ;
480480 states. push ( branch_state) ;
481481
482482 let mut branch_state = state. clone ( ) ;
483- branch_state. program_i = p3 as usize ;
483+ branch_state. program_i = usize:: try_from ( p3 ) . unwrap_or ( 0 ) ;
484484 states. push ( branch_state) ;
485485 }
486486
@@ -515,7 +515,7 @@ pub(super) fn explain(
515515
516516 OP_MAKE_RECORD => {
517517 // p3 = Record([p1 .. p1 + p2])
518- let mut record = Vec :: with_capacity ( p2 as usize ) ;
518+ let mut record = Vec :: with_capacity ( usize:: try_from ( p2 ) . unwrap_or ( 0 ) ) ;
519519 for reg in p1..p1 + p2 {
520520 record. push (
521521 state
@@ -565,7 +565,7 @@ pub(super) fn explain(
565565 //Create a new pointer which is referenced by p1
566566 state. p . insert (
567567 p1,
568- CursorDataType :: from_dense_record ( & vec ! [ ColumnType :: null( ) ; p2 as usize ] ) ,
568+ CursorDataType :: from_dense_record ( & vec ! [ ColumnType :: null( ) ; usize :: try_from ( p2 ) . unwrap_or ( 0 ) ] ) ,
569569 ) ;
570570 }
571571
@@ -666,7 +666,7 @@ pub(super) fn explain(
666666 state. r . insert (
667667 p2,
668668 RegDataType :: Single ( ColumnType {
669- datatype : opcode_to_type ( & opcode) ,
669+ datatype : opcode_to_type ( opcode) ,
670670 nullable : Some ( false ) ,
671671 } ) ,
672672 ) ;
0 commit comments