VExprConditionalStatementHandle VExprConditionalStatement::flatten(VExprIdentifierHandle pInstName) const {
    VExprExpressionHandle pFlatIf = getIf()->flatten(pInstName);
    VExprStatementOrNullHandle pFlatThen = getThen()->flatten(pInstName);

    if (getElse().valid()) {
        VExprStatementOrNullHandle pFlatElse = getElse()->flatten(pInstName);
        return VExprConditionalStatementHandle(VExprConditionalStatement(pFlatIf, pFlatThen, pFlatElse));
    } else {
        return VExprConditionalStatementHandle(VExprConditionalStatement(pFlatIf, pFlatThen));
    }
    assert(0);
}
VExprConditionalStatementHandle VExprConditionalStatement::substitute(VExprExpressionHandle pDst, const HashTable<VExprExpressionHandle> & hashSrc) const {
    VExprExpressionHandle pNewIf = getIf()->substitute(pDst, hashSrc);
    VExprStatementOrNullHandle pNewThen = getThen()->substitute(pDst, hashSrc);

    if (getElse().valid()) {
        VExprStatementOrNullHandle pNewElse = getElse()->substitute(pDst, hashSrc);
        return VExprConditionalStatementHandle(VExprConditionalStatement(pNewIf, pNewThen, pNewElse));
    } else {
        return VExprConditionalStatementHandle(VExprConditionalStatement(pNewIf, pNewThen));
    }
    assert(0);
}
std::string VExprConditionalStatement::getString(unsigned int indentLevel) const {
    std::string s = indent(indentLevel) + "if (" + getIf()->getString() + ") begin\n"
                 + getThen()->getString(indentLevel+1);
    if (getElse().valid() && getElse()->getStatementHandle().valid()) {
        s = s + indent(indentLevel) + "end\n"
              + indent(indentLevel) + "else begin\n"
          + getElse()->getString(indentLevel+1);
    } 
//    if (indentLevel != 0)
//        s += indent(1);
//    s += "}\n";
    
    s = s + indent(indentLevel) + "end\n";
         
    return s;
}
Esempio n. 4
0
status
placeImageTableCell(TableCell cell)
{ Graphical gr = cell->image;
  Table tab = table_of_cell(cell);
  table_cell_dimensions d;
  int grx, gry;
  Any av[4];
  Point ref = NULL;
  Name halign = getHalignTableCell(cell);
  Name valign = getValignTableCell(cell);

  ComputeGraphical(gr);			/* make sure */

  av[2] = DEFAULT;			/* width */
  av[3] = DEFAULT;			/* height */

  dims_table_cell(cell, &d);

  if ( halign == NAME_left )		/* determine X-placement */
    grx = d.x + d.px;
  else if ( halign == NAME_right )
    grx = d.x + d.w-d.px-valInt(gr->area->w);
  else if ( halign == NAME_center )
    grx = d.x + (d.w-valInt(gr->area->w)+1)/2;
  else if ( halign == NAME_stretch )
  { grx = d.x + d.px;
    av[2] = toInt(d.w-2*d.px);
  } else /* if ( halign == NAME_reference ) */
  { ref = getIf(gr, NAME_reference, NIL);

    if ( notNil(ref) )
      grx = d.x + d.rx - valInt(ref->x);
    else
      grx = d.x + d.px;
  }

  if ( valign == NAME_top )		/* determine Y-placement */
    gry = d.y + d.py;
  else if ( valign == NAME_bottom )
    gry = d.y + d.h-d.py-valInt(gr->area->h);
  else if ( valign == NAME_center )
    gry = d.y + (d.h-valInt(gr->area->h)+1)/2;
  else if ( valign == NAME_stretch )
  { gry = d.y + d.py;
    av[3] = toInt(d.h-2*d.py);
  } else /* if ( halign == NAME_reference ) */
  { if ( !ref )
      ref = getIf(gr, NAME_reference, NIL);

    if ( notNil(ref) )
      gry = d.y + d.ry - valInt(ref->y);
    else
      gry = d.y + d.py;
  }

  av[0] = toInt(grx);
  av[1] = toInt(gry);

  if ( instanceOfObject(gr, ClassWindow) && 		/* HACK */
       notNil(((PceWindow)gr)->decoration) )
    gr = (Graphical)((PceWindow)gr)->decoration;

  qadSendv(gr, NAME_doSet, 4, av);
  if ( gr->device != tab->device )
    send(tab->device, NAME_display, gr, EAV);

  succeed;
}