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; }
/* 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;