MCPcopy Create free account
hub / github.com/AMReX-Codes/amrex / parser_node_equal

Function parser_node_equal

Src/Base/Parser/AMReX_Parser_Y.cpp:772–838  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

770}
771
772bool parser_node_equal (struct parser_node* a, struct parser_node* b)
773{
774 if (a->type != b->type) { return false; }
775 switch (a->type)
776 {
777 case PARSER_NUMBER:
778 return parser_get_number(a) == parser_get_number(b);
779 case PARSER_SYMBOL:
780 return parser_same_symbol(a,b);
781 case PARSER_ADD:
782 case PARSER_SUB:
783 case PARSER_MUL:
784 case PARSER_DIV:
785 return parser_node_equal(a->l,b->l) && parser_node_equal(a->r,b->r);
786 case PARSER_F1:
787 return (((struct parser_f1*)a)->ftype == ((struct parser_f1*)b)->ftype)
788 && parser_node_equal(((struct parser_f1*)a)->l,
789 ((struct parser_f1*)b)->l);
790 case PARSER_F2:
791 return (((struct parser_f2*)a)->ftype == ((struct parser_f2*)b)->ftype)
792 && parser_node_equal(((struct parser_f2*)a)->l,
793 ((struct parser_f2*)b)->l)
794 && parser_node_equal(((struct parser_f2*)a)->r,
795 ((struct parser_f2*)b)->r);
796 case PARSER_F3:
797 return (((struct parser_f3*)a)->ftype == ((struct parser_f3*)b)->ftype)
798 && parser_node_equal(((struct parser_f3*)a)->n1,
799 ((struct parser_f3*)b)->n1)
800 && parser_node_equal(((struct parser_f3*)a)->n2,
801 ((struct parser_f3*)b)->n2)
802 && parser_node_equal(((struct parser_f3*)a)->n3,
803 ((struct parser_f3*)b)->n3);
804 case PARSER_USRF1:
805 return (std::strcmp(((struct parser_usrf1*)a)->name,
806 ((struct parser_usrf1*)b)->name) == 0)
807 && parser_node_equal(((struct parser_usrf1*)a)->l,
808 ((struct parser_usrf1*)b)->l);
809 case PARSER_USRF2:
810 return (std::strcmp(((struct parser_usrf2*)a)->name,
811 ((struct parser_usrf2*)b)->name) == 0)
812 && parser_node_equal(((struct parser_usrf2*)a)->l,
813 ((struct parser_usrf2*)b)->l)
814 && parser_node_equal(((struct parser_usrf2*)a)->r,
815 ((struct parser_usrf2*)b)->r);
816 case PARSER_USRFN:
817 {
818 short argca = ((struct parser_usrfn*)a)->argc;
819 short argcb = ((struct parser_usrfn*)b)->argc;
820 bool r = (argca == argcb)
821 && (std::strcmp(((struct parser_usrfn*)a)->name,
822 ((struct parser_usrfn*)b)->name) == 0)
823 && parser_node_equal(((struct parser_usrfn*)a)->n1,
824 ((struct parser_usrfn*)b)->n1);
825 for (short iarg = 0; (iarg < argca-1) && r; ++iarg) {
826 r = r && parser_node_equal(((struct parser_usrfn*)a)->others[iarg],
827 ((struct parser_usrfn*)b)->others[iarg]);
828 }
829 return r;

Callers 6

parser_compile_exe_sizeFunction · 0.85
is_add_combinableFunction · 0.85
is_mul_combinableFunction · 0.85
parser_node_compareFunction · 0.85
try_cancelFunction · 0.85
parser_ast_optimizeFunction · 0.85

Calls 3

parser_get_numberFunction · 0.85
parser_same_symbolFunction · 0.85
AbortFunction · 0.85

Tested by

no test coverage detected