@@ -325,6 +325,7 @@ const int op_dcl_local_table = 31;
325325const int op_outer_map = 32 ;
326326const int op_invoke_function = 33 ;
327327const int op_invsel_procedure = 34 ;
328+ const int op_table_value_fun = 35 ;
328329
329330static const UCHAR
330331 // generic print formats
@@ -419,7 +420,8 @@ static const UCHAR
419420 in_list[] = { op_line, op_verb, op_indent, op_word, op_line, op_args, 0 },
420421 invoke_function[] = { op_invoke_function, 0 },
421422 invsel_procedure[] = { op_invsel_procedure, 0 },
422- cast_format[] = { op_line, op_indent, op_byte, op_literal, op_line, op_indent, op_dtype, op_line, op_verb, 0 };
423+ cast_format[] = { op_line, op_indent, op_byte, op_literal, op_line, op_indent, op_dtype, op_line, op_verb, 0 },
424+ table_value_fun[] = { op_table_value_fun, 0 };
423425
424426
425427#include " ../jrd/blp.h"
@@ -4173,6 +4175,62 @@ static void blr_print_verb(gds_ctl* control, SSHORT level)
41734175 break ;
41744176 }
41754177
4178+ case op_table_value_fun:
4179+ {
4180+ offset = blr_print_line (control, static_cast <SSHORT>(offset));
4181+
4182+ static const char * subCodes[] =
4183+ {
4184+ nullptr ,
4185+ " unlist" ,
4186+ };
4187+
4188+ blr_indent (control, level);
4189+
4190+ blr_operator = control->ctl_blr_reader .getByte ();
4191+
4192+ if (blr_operator == 0 || blr_operator >= FB_NELEM (subCodes))
4193+ blr_error (control, " *** invalid blr_table_value_fun sub code ***" );
4194+
4195+ blr_format (control, " blr_table_value_fun_%s, " , subCodes[blr_operator]);
4196+
4197+ switch (blr_operator)
4198+ {
4199+ case blr_table_value_fun_unlist:
4200+
4201+ blr_print_byte (control);
4202+
4203+ blr_print_name (control);
4204+
4205+ n = blr_print_word (control);
4206+ offset = blr_print_line (control, static_cast <SSHORT>(offset));
4207+
4208+ ++level;
4209+ while (n-- > 0 )
4210+ blr_print_verb (control, level);
4211+
4212+ blr_indent (control, level);
4213+ n = blr_print_word (control);
4214+
4215+ while (n-- > 0 )
4216+ {
4217+ offset = blr_print_line (control, static_cast <SSHORT>(offset));
4218+ blr_indent (control, level);
4219+ blr_print_dtype (control);
4220+ blr_print_name (control);
4221+ }
4222+ --level;
4223+
4224+ offset = blr_print_line (control, static_cast <SSHORT>(offset));
4225+ break ;
4226+
4227+ default :
4228+ fb_assert (false );
4229+ }
4230+
4231+ break ;
4232+ }
4233+
41764234 default :
41774235 fb_assert (false );
41784236 break ;
0 commit comments