示例#1
0
node *MDUNPACKboxdef( node *arg_node, info *arg_info )
{
  node *temp;
  node *keys;

  DBUG_ENTER("MDUNPACKboxdef");

  temp = dequeuePopNextMatch(INFO_BOXDEQUEUE(arg_info), BOXDEF_NAME(arg_node));

  if(temp != NULL) {
    BOXDEF_METADATA(arg_node) = METADATABOXDEF_KEYS(temp);

    METADATABOXDEF_KEYS(temp) = NULL;

    FREEdoFreeTree(temp);

    while((temp = dequeuePopNextMatch(INFO_BOXDEQUEUE(arg_info), BOXDEF_NAME(arg_node))) != NULL) { 
      
      keys = BOXDEF_METADATA(arg_node);

      while(METADATAKEYLIST_NEXT(keys) != NULL) {
	keys = METADATAKEYLIST_NEXT(keys);
      }
      
      METADATAKEYLIST_NEXT(keys) = METADATABOXDEF_KEYS(temp);

      METADATABOXDEF_KEYS(temp) = NULL;

      FREEdoFreeTree(temp);
    }
  }

  DBUG_RETURN(arg_node);
}
示例#2
0
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);
}
示例#3
0
node *MDUNPACKnetdef( node *arg_node, info *arg_info )
{
  node *temp;
  node *keys;
  node *childs;

  DBUG_ENTER("MDUNPACKnetdef");

  temp = dequeuePopNextMatch(INFO_NETDEQUEUE(arg_info), NETDEF_NAME(arg_node));

  if(temp != NULL) {
    NETDEF_METADATA(arg_node) = METADATANETDEF_KEYS(temp);

    METADATANETDEF_KEYS(temp) = NULL;

    INFO_CHILDS(arg_info) = METADATANETDEF_CHILDS(temp);

    METADATANETDEF_CHILDS(temp) = NULL;

    FREEdoFreeTree(temp);

    while((temp = dequeuePopNextMatch(INFO_NETDEQUEUE(arg_info), NETDEF_NAME(arg_node))) != NULL) { 
      
      keys = NETDEF_METADATA(arg_node);

      if(keys != NULL) {
	while(METADATAKEYLIST_NEXT(keys) != NULL) {
	  keys = METADATAKEYLIST_NEXT(keys);
	}
      
	METADATAKEYLIST_NEXT(keys) = METADATANETDEF_KEYS(temp);

	METADATANETDEF_KEYS(temp) = NULL;
      }

      childs = INFO_CHILDS(arg_info);

      if(childs != NULL) {

	while(METADATADEFS_NEXT(childs) != NULL) {
	  childs = METADATADEFS_NEXT(childs);
	}

	METADATADEFS_NEXT(childs) = METADATANETDEF_CHILDS(temp);

	METADATANETDEF_CHILDS(temp) = NULL;
      }

      FREEdoFreeTree(temp);

    }
  }

  if(NETDEF_BODY(arg_node) != NULL) {
    NETDEF_BODY(arg_node) = TRAVdo(NETDEF_BODY(arg_node), arg_info);
  }

  DBUG_RETURN(arg_node);
}
示例#4
0
node *MDUNPACKmetadatadefs( node *arg_node, info *arg_info )
{
  node *temp;

  DBUG_ENTER("MDUNPACKmetadatadefs");

  if(METADATADEFS_DEF(arg_node) != NULL) {
    METADATADEFS_DEF(arg_node) = TRAVdo(METADATADEFS_DEF(arg_node), arg_info);
  }

  if(METADATADEFS_NEXT(arg_node) != NULL) {
    METADATADEFS_NEXT(arg_node) = TRAVdo(METADATADEFS_NEXT(arg_node), arg_info);
  }

  if(METADATADEFS_DEF(arg_node) == NULL) {

    temp = METADATADEFS_NEXT(arg_node);

    METADATADEFS_NEXT(arg_node) = NULL;

    FREEdoFreeTree(arg_node);

    arg_node = temp;
  }

  DBUG_RETURN(arg_node);
}
示例#5
0
node *PPLOCat( node *arg_node, info *arg_info)
{
  DBUG_ENTER("PPLOCat");

  int loc;
  node *temp;
  node *top = NULL;
  node *ref;

  if(INFO_TOP(arg_info) != NULL) {
    top = INFO_TOP(arg_info);

    ref = TBmakeNetrefs(top, NULL);
    NODE_ERRCODE(ref) = STRcpy(NODE_ERRCODE(arg_node));

    NETREFS_LOCATION(ref) = AT_LOCATION(arg_node);

    temp = TBmakeNetbody(NULL, ref);

    NODE_ERRCODE(temp) = STRcpy(NODE_ERRCODE(arg_node));

    temp = TBmakeNetdef(STRcpy(NETDEF_NAME(top)),
           NULL,
           FALSE, FALSE, NULL,
           temp,
           NULL);

    NODE_ERRCODE(temp) = STRcpy(NODE_ERRCODE(arg_node));

    top = temp;

    INFO_TOP(arg_info) = NULL;
  }

  loc = INFO_LOC(arg_info);

  INFO_LOC(arg_info) = AT_LOCATION(arg_node);

  AT_LEFT(arg_node) = TRAVdo(AT_LEFT(arg_node), arg_info);

  INFO_LOC(arg_info) = loc;

  temp = AT_LEFT(arg_node);

  AT_LEFT(arg_node) = NULL;

  FREEdoFreeTree(arg_node);

  arg_node = temp;

  INFO_TOP(arg_info) = top;

  DBUG_RETURN(arg_node);
}
示例#6
0
static dequeue_element_t *dequeueElementFree(dequeue_element_t *element) 
{
  dequeue_element_t *temp;
  
  temp = element->next;

  CTIwarnNode(CTI_ERRNO_DEAD_CODE,
	      element->def, 
	      "Discarding unused metadata (name=\"%s\")", 
	      element->name);

  FREEdoFreeTree(element->def);

  MEMfree(element);

  return temp;
}