node *OSbinop (node *arg_node, info *arg_info) { DBUG_ENTER("OSbinop"); /* * Extremely important: * we must continue to traverse the abstract syntax tree !! */ BINOP_LEFT( arg_node) = TRAVdo( BINOP_LEFT( arg_node), arg_info); BINOP_RIGHT( arg_node) = TRAVdo( BINOP_RIGHT( arg_node), arg_info); if (BINOP_OP( arg_node) == BO_sub) { if ((NODE_TYPE( BINOP_LEFT( arg_node)) == N_var) && (NODE_TYPE( BINOP_RIGHT( arg_node)) == N_var) && STReq( VAR_NAME( BINOP_LEFT( arg_node)), VAR_NAME( BINOP_RIGHT( arg_node)))) { arg_node = FREEdoFreeTree( arg_node); arg_node = TBmakeNum( 0); } else if ((NODE_TYPE( BINOP_LEFT( arg_node)) == N_num) && (NODE_TYPE( BINOP_RIGHT( arg_node)) == N_num) && (NUM_VALUE( BINOP_LEFT( arg_node)) == NUM_VALUE( BINOP_RIGHT( arg_node)))) { arg_node = FREEdoFreeTree( arg_node); arg_node = TBmakeNum( 0); } } DBUG_RETURN( arg_node); }
node *MDREMDUPmetadatakeylist( node *arg_node, info *arg_info ) { node *temp; DBUG_ENTER("MDREMDUPmetadatakeylist"); if(!INFO_IS_CHECKING(arg_info)) { /* See if this node has a duplicate */ INFO_IS_CHECKING(arg_info) = TRUE; INFO_CURRENT(arg_info) = arg_node; INFO_IS_DUPLICATE(arg_info) = FALSE; /* Search for duplicate */ if(METADATAKEYLIST_NEXT(arg_node) != NULL) { METADATAKEYLIST_NEXT(arg_node) = TRAVdo(METADATAKEYLIST_NEXT(arg_node), arg_info); } if(INFO_IS_DUPLICATE(arg_info)) { /* Handle rest of the lsit and then remove this node */ INFO_IS_CHECKING(arg_info) = FALSE; if(METADATAKEYLIST_NEXT(arg_node) != NULL) { temp = TRAVdo(METADATAKEYLIST_NEXT(arg_node), arg_info); } METADATAKEYLIST_NEXT(arg_node) = NULL; FREEdoFreeNode(arg_node); arg_node = temp; } else { /* Handle rest of the list */ INFO_IS_CHECKING(arg_info) = FALSE; if(METADATAKEYLIST_NEXT(arg_node) != NULL) { METADATAKEYLIST_NEXT(arg_node) = TRAVdo(METADATAKEYLIST_NEXT(arg_node), arg_info); } } } else { /* Check if this node is a duplicate with the current node */ if(STReq(METADATAKEYLIST_KEY(INFO_CURRENT(arg_info)), METADATAKEYLIST_KEY(arg_node))) { INFO_IS_DUPLICATE(arg_info) = TRUE; } else { if(METADATAKEYLIST_NEXT(arg_node) != NULL) { METADATAKEYLIST_NEXT(arg_node) = TRAVdo(METADATAKEYLIST_NEXT(arg_node), arg_info); } } } DBUG_RETURN(arg_node); }
/** <!--**********************************************************************--> * * @fn node *CHKinsertError( node *arg_node, char *string) *******************************************************************************/ node *CHKinsertError( node *arg_node, char *string) { DBUG_ENTER( "CHKinsertError"); if ( arg_node == NULL) { CTIwarn( "%s", string); arg_node = TBmakeError( STRcpy( string), global.compiler_anyphase, arg_node); } else { if ( !(STReq( string, ERROR_MESSAGE( arg_node)))) { ERROR_NEXT( arg_node) = CHKinsertError( ERROR_NEXT( arg_node), string); } else { ERROR_ANYPHASE( arg_node) = global.compiler_anyphase; } } DBUG_RETURN( arg_node); }