示例#1
0
struct coordinates coordinates_of_square(unsigned int square_index) {
  struct tetromino tetromino = tetrominos[current_shape.index];
  Point topLeftCorner = tetromino.coords[square_index];
  Point center = tetromino.rotation_center;
  int oy = getAbscissa(topLeftCorner);
  int ox = getOrdinate(topLeftCorner);
  int cy = getAbscissa(center);
  int cx = getOrdinate(center);
  struct coordinates result;
  switch (current_shape.rotation_angle) {
  case ANGLE_0:
    result.column = ox;
    result.row = oy;
    break;
  case ANGLE_90:
    result.column = oy;
    result.row = cx - ox;
    break;
  case ANGLE_180:
    result.column = cx - ox;
    result.row = cy - oy;
    break;
  case ANGLE_270:
    result.column = cy - oy;
    result.row = ox;
    break;
  }
  result.column += current_shape.column_index;
  result.row += current_shape.row_index;
  return result;
}
示例#2
0
    /* Is   */ {IND,    IND,    IND,   IND,   MDEF,  IND,   IND,   IND,   CIND,  CIND,  CIND,  MIND }   // NOLINT
  };

  // Special cases:
  // * when a dynamic defined symbol meets a dynamic weak defined symbol, act
  //   noting.
  // * when a undefined symbol meets a dynamic defined symbol, override by
  //   dynamic defined first, then recover back to undefined symbol later.
  // * when a dynamic defined symbol meets a undefined symbol or a weak
  //   undefined symbol, do not override, instead of marking.
  // * When a undefined symbol meets a dynamic defined symbol or a weak
  //   undefined symbol meets a dynamic defined symbol, should override.
  // * When a common symbol meets a weak common symbol, adjust the size of
  //   common symbol.

  unsigned int row = getOrdinate(pNew);
  unsigned int col = getOrdinate(pOld);

  bool cycle = false;
  pOverride = false;
  ResolveInfo* old = &pOld;
  LinkAction action;
  do {
    cycle = false;
    action = link_action[row][col];

    switch (action) {
      case FAIL: { /* abort.  */
        fatal(diag::fail_sym_resolution) << __FILE__ << __LINE__
                                         << "*****@*****.**";
        return false;