comparison libinterp/parse-tree/parse.h @ 30144:3c2dee80b542

attempt more uniform handling of list concatenation in the parser * parse.h, oct-parse.yy (append_if_clause, append_switch_case, append_function_body, append_classdef_property, append_classdef_event, append_classdef_enum, append_classdef_superclass, append_classdef_attribute, append_classdef_properties_block, append_classdef_methods_block, append_classdef_events_block, append_classdef_enum_block, append_classdef_method, append_decl_init_list, append_argument_list): New base_parser methods. Use them to simplify actions in parser grammar. * pt-idx.h, pt-idx.cc (tree_index_expression::append): Return pointer to this. Change uses where needed.
author John W. Eaton <jwe@octave.org>
date Thu, 09 Sep 2021 13:27:49 -0400
parents a001811a68e6
children a61e1a0f6024
comparison
equal deleted inserted replaced
30143:45c45295a84a 30144:3c2dee80b542
348 348
349 OCTINTERP_API tree_if_clause * 349 OCTINTERP_API tree_if_clause *
350 make_else_clause (token *else_tok, comment_list *lc, 350 make_else_clause (token *else_tok, comment_list *lc,
351 tree_statement_list *list); 351 tree_statement_list *list);
352 352
353 OCTINTERP_API tree_if_command_list *
354 append_if_clause (tree_if_command_list *list, tree_if_clause *clause);
355
353 // Finish a switch command. 356 // Finish a switch command.
354 OCTINTERP_API tree_switch_command * 357 OCTINTERP_API tree_switch_command *
355 finish_switch_command (token *switch_tok, tree_expression *expr, 358 finish_switch_command (token *switch_tok, tree_expression *expr,
356 tree_switch_case_list *list, token *end_tok, 359 tree_switch_case_list *list, token *end_tok,
357 comment_list *lc); 360 comment_list *lc);
365 tree_statement_list *list, comment_list *lc); 368 tree_statement_list *list, comment_list *lc);
366 369
367 OCTINTERP_API tree_switch_case * 370 OCTINTERP_API tree_switch_case *
368 make_default_switch_case (token *default_tok, comment_list *lc, 371 make_default_switch_case (token *default_tok, comment_list *lc,
369 tree_statement_list *list); 372 tree_statement_list *list);
373
374 OCTINTERP_API tree_switch_case_list *
375 append_switch_case (tree_switch_case_list *list, tree_switch_case *elt);
370 376
371 // Build an assignment to a variable. 377 // Build an assignment to a variable.
372 OCTINTERP_API tree_expression * 378 OCTINTERP_API tree_expression *
373 make_assign_op (int op, tree_argument_list *lhs, token *eq_tok, 379 make_assign_op (int op, tree_argument_list *lhs, token *eq_tok,
374 tree_expression *rhs); 380 tree_expression *rhs);
406 OCTINTERP_API tree_function_def * 412 OCTINTERP_API tree_function_def *
407 finish_function (tree_parameter_list *ret_list, 413 finish_function (tree_parameter_list *ret_list,
408 octave_user_function *fcn, comment_list *lc, 414 octave_user_function *fcn, comment_list *lc,
409 int l, int c); 415 int l, int c);
410 416
417 OCTINTERP_API tree_statement_list *
418 append_function_body (tree_statement_list *body, tree_statement_list *list);
419
411 // Make an arguments validation block. 420 // Make an arguments validation block.
412 OCTINTERP_API tree_arguments_block * 421 OCTINTERP_API tree_arguments_block *
413 make_arguments_block (token *arguments_tok, 422 make_arguments_block (token *arguments_tok,
414 tree_args_block_attribute_list *attr_list, 423 tree_args_block_attribute_list *attr_list,
415 tree_args_block_validation_list *validation_list, 424 tree_args_block_validation_list *validation_list,
464 473
465 OCTINTERP_API tree_classdef_property * 474 OCTINTERP_API tree_classdef_property *
466 make_classdef_property (comment_list *lc, tree_identifier *id, 475 make_classdef_property (comment_list *lc, tree_identifier *id,
467 tree_arg_validation *av); 476 tree_arg_validation *av);
468 477
478 OCTINTERP_API tree_classdef_property_list *
479 append_classdef_property (tree_classdef_property_list *list,
480 tree_classdef_property *elt);
481
469 OCTINTERP_API tree_classdef_methods_block * 482 OCTINTERP_API tree_classdef_methods_block *
470 make_classdef_methods_block (token *tok_val, 483 make_classdef_methods_block (token *tok_val,
471 tree_classdef_attribute_list *a, 484 tree_classdef_attribute_list *a,
472 tree_classdef_methods_list *mlist, 485 tree_classdef_methods_list *mlist,
473 token *end_tok, comment_list *lc, 486 token *end_tok, comment_list *lc,
484 make_classdef_events_list (tree_classdef_event *e); 497 make_classdef_events_list (tree_classdef_event *e);
485 498
486 OCTINTERP_API tree_classdef_event * 499 OCTINTERP_API tree_classdef_event *
487 make_classdef_event (comment_list *lc, tree_identifier *id); 500 make_classdef_event (comment_list *lc, tree_identifier *id);
488 501
502 OCTINTERP_API tree_classdef_events_list *
503 append_classdef_event (tree_classdef_events_list *list,
504 tree_classdef_event *elt);
505
489 OCTINTERP_API tree_classdef_enum_block * 506 OCTINTERP_API tree_classdef_enum_block *
490 make_classdef_enum_block (token *tok_val, 507 make_classdef_enum_block (token *tok_val,
491 tree_classdef_attribute_list *a, 508 tree_classdef_attribute_list *a,
492 tree_classdef_enum_list *elist, 509 tree_classdef_enum_list *elist,
493 token *end_tok, comment_list *lc, 510 token *end_tok, comment_list *lc,
498 515
499 OCTINTERP_API tree_classdef_enum * 516 OCTINTERP_API tree_classdef_enum *
500 make_classdef_enum (tree_identifier *id, tree_expression *expr, 517 make_classdef_enum (tree_identifier *id, tree_expression *expr,
501 comment_list *lc); 518 comment_list *lc);
502 519
520 OCTINTERP_API tree_classdef_enum_list *
521 append_classdef_enum (tree_classdef_enum_list *list,
522 tree_classdef_enum *elt);
523
503 OCTINTERP_API tree_classdef_superclass_list * 524 OCTINTERP_API tree_classdef_superclass_list *
504 make_classdef_superclass_list (tree_classdef_superclass *sc); 525 make_classdef_superclass_list (tree_classdef_superclass *sc);
505 526
506 OCTINTERP_API tree_classdef_superclass * 527 OCTINTERP_API tree_classdef_superclass *
507 make_classdef_superclass (token *fqident); 528 make_classdef_superclass (token *fqident);
529
530 OCTINTERP_API tree_classdef_superclass_list *
531 append_classdef_superclass (tree_classdef_superclass_list *list,
532 tree_classdef_superclass *elt);
508 533
509 OCTINTERP_API tree_classdef_attribute_list * 534 OCTINTERP_API tree_classdef_attribute_list *
510 make_classdef_attribute_list (tree_classdef_attribute *attr); 535 make_classdef_attribute_list (tree_classdef_attribute *attr);
511 536
512 OCTINTERP_API tree_classdef_attribute * 537 OCTINTERP_API tree_classdef_attribute *
514 tree_expression *expr = nullptr); 539 tree_expression *expr = nullptr);
515 540
516 OCTINTERP_API tree_classdef_attribute * 541 OCTINTERP_API tree_classdef_attribute *
517 make_not_classdef_attribute (tree_identifier *id); 542 make_not_classdef_attribute (tree_identifier *id);
518 543
544 OCTINTERP_API tree_classdef_attribute_list *
545 append_classdef_attribute (tree_classdef_attribute_list *list,
546 tree_classdef_attribute *elt);
547
519 OCTINTERP_API tree_classdef_body * 548 OCTINTERP_API tree_classdef_body *
520 make_classdef_body (tree_classdef_properties_block *pb); 549 make_classdef_body (tree_classdef_properties_block *pb);
521 550
522 OCTINTERP_API tree_classdef_body * 551 OCTINTERP_API tree_classdef_body *
523 make_classdef_body (tree_classdef_methods_block *mb); 552 make_classdef_body (tree_classdef_methods_block *mb);
525 OCTINTERP_API tree_classdef_body * 554 OCTINTERP_API tree_classdef_body *
526 make_classdef_body (tree_classdef_events_block *evb); 555 make_classdef_body (tree_classdef_events_block *evb);
527 556
528 OCTINTERP_API tree_classdef_body * 557 OCTINTERP_API tree_classdef_body *
529 make_classdef_body (tree_classdef_enum_block *enb); 558 make_classdef_body (tree_classdef_enum_block *enb);
559
560 OCTINTERP_API tree_classdef_body *
561 append_classdef_properties_block (tree_classdef_body *body,
562 tree_classdef_properties_block *block);
563
564 OCTINTERP_API tree_classdef_body *
565 append_classdef_methods_block (tree_classdef_body *body,
566 tree_classdef_methods_block *block);
567
568 OCTINTERP_API tree_classdef_body *
569 append_classdef_events_block (tree_classdef_body *body,
570 tree_classdef_events_block *block);
571
572 OCTINTERP_API tree_classdef_body *
573 append_classdef_enum_block (tree_classdef_body *body,
574 tree_classdef_enum_block *block);
530 575
531 OCTINTERP_API octave_user_function * 576 OCTINTERP_API octave_user_function *
532 start_classdef_external_method (tree_identifier *id, 577 start_classdef_external_method (tree_identifier *id,
533 tree_parameter_list *pl); 578 tree_parameter_list *pl);
534 579
538 comment_list *cl); 583 comment_list *cl);
539 584
540 OCTINTERP_API tree_classdef_methods_list * 585 OCTINTERP_API tree_classdef_methods_list *
541 make_classdef_methods_list (tree_function_def *fcn_def); 586 make_classdef_methods_list (tree_function_def *fcn_def);
542 587
588 OCTINTERP_API tree_classdef_methods_list *
589 append_classdef_method (tree_classdef_methods_list *list,
590 tree_function_def *fcn_def);
591
543 OCTINTERP_API bool 592 OCTINTERP_API bool
544 finish_classdef_file (tree_classdef *cls, 593 finish_classdef_file (tree_classdef *cls,
545 tree_statement_list *local_fcns); 594 tree_statement_list *local_fcns);
546 595
547 // Make an index expression. 596 // Make an index expression.
565 make_decl_init_list (tree_decl_elt *elt); 614 make_decl_init_list (tree_decl_elt *elt);
566 615
567 OCTINTERP_API tree_decl_elt * 616 OCTINTERP_API tree_decl_elt *
568 make_decl_elt (tree_identifier *id, token *eq_op = nullptr, 617 make_decl_elt (tree_identifier *id, token *eq_op = nullptr,
569 tree_expression *expr = nullptr); 618 tree_expression *expr = nullptr);
619
620 OCTINTERP_API tree_decl_init_list *
621 append_decl_init_list (tree_decl_init_list *list, tree_decl_elt *elt);
570 622
571 // Validate an function parameter list. 623 // Validate an function parameter list.
572 OCTINTERP_API bool 624 OCTINTERP_API bool
573 validate_param_list (tree_parameter_list *lst, 625 validate_param_list (tree_parameter_list *lst,
574 tree_parameter_list::in_or_out type); 626 tree_parameter_list::in_or_out type);
620 tree_statement *stmt, bool warn_missing_semi); 672 tree_statement *stmt, bool warn_missing_semi);
621 673
622 OCTINTERP_API tree_argument_list * 674 OCTINTERP_API tree_argument_list *
623 make_argument_list (tree_expression *expr); 675 make_argument_list (tree_expression *expr);
624 676
677 OCTINTERP_API tree_argument_list *
678 append_argument_list (tree_argument_list *list, tree_expression *expr);
679
625 OCTINTERP_API tree_parameter_list * 680 OCTINTERP_API tree_parameter_list *
626 make_parameter_list (tree_parameter_list::in_or_out io); 681 make_parameter_list (tree_parameter_list::in_or_out io);
627 682
628 OCTINTERP_API tree_parameter_list * 683 OCTINTERP_API tree_parameter_list *
629 make_parameter_list (tree_parameter_list::in_or_out io, tree_decl_elt *t); 684 make_parameter_list (tree_parameter_list::in_or_out io, tree_decl_elt *t);
630 685
631 OCTINTERP_API tree_parameter_list * 686 OCTINTERP_API tree_parameter_list *
632 make_parameter_list (tree_parameter_list::in_or_out io, 687 make_parameter_list (tree_parameter_list::in_or_out io,
633 tree_identifier *id); 688 tree_identifier *id);
689
690 OCTINTERP_API tree_parameter_list *
691 append_parameter_list (tree_parameter_list *list, tree_decl_elt *t);
634 692
635 OCTINTERP_API tree_parameter_list * 693 OCTINTERP_API tree_parameter_list *
636 append_parameter_list (tree_parameter_list *list, tree_identifier *id); 694 append_parameter_list (tree_parameter_list *list, tree_identifier *id);
637 695
638 // Don't allow parsing command syntax. If the parser/lexer is 696 // Don't allow parsing command syntax. If the parser/lexer is