Mercurial > octave
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 |