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); }
/** <!--******************************************************************--> * * @fn COPYnum * * @brief Copies the node and its sons/attributes * * @param arg_node Num node to process * @param arg_info pointer to info structure * * @return processed node * ***************************************************************************/ node * COPYnum (node * arg_node, info * arg_info) { node *result = TBmakeNum (0); DBUG_ENTER ("COPYnum"); LUTinsertIntoLutP (INFO_LUT (arg_info), arg_node, result); /* Copy attributes */ NUM_VALUE (result) = NUM_VALUE (arg_node); /* Return value */ DBUG_RETURN (result); }
node * PRTnum (node * arg_node, info * arg_info) { DBUG_ENTER ("PRTnum"); printf( "%i", NUM_VALUE( arg_node)); DBUG_RETURN (arg_node); }