From 3f47df577d05478a324b6eca80df0a33c838fab8 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 24 Mar 2021 12:38:08 +1100 Subject: Cleanup: use new BLI_assert_unreachable macro --- source/blender/blenkernel/intern/appdir.c | 4 ++-- source/blender/blenkernel/intern/armature.c | 4 ++-- source/blender/blenkernel/intern/colortools.c | 4 ++-- source/blender/blenkernel/intern/fluid.c | 2 +- source/blender/blenkernel/intern/main.c | 2 +- source/blender/blenkernel/intern/mesh_wrapper.c | 14 +++++++------- source/blender/blenkernel/intern/object.c | 4 ++-- source/blender/blenkernel/intern/paint.c | 2 +- source/blender/editors/util/ed_util.c | 2 +- source/blender/editors/util/select_utils.c | 4 ++-- source/blender/editors/uvedit/uvedit_rip.c | 4 ++-- source/blender/editors/uvedit/uvedit_select.c | 2 +- source/blender/imbuf/intern/thumbs.c | 4 ++-- source/blender/python/bmesh/bmesh_py_types.c | 2 +- source/blender/python/bmesh/bmesh_py_types_customdata.c | 4 ++-- source/blender/python/generic/imbuf_py_api.c | 2 +- source/blender/python/gpu/gpu_py_matrix.c | 4 ++-- source/blender/python/gpu/gpu_py_vertex_buffer.c | 3 ++- source/blender/python/intern/bpy_rna.c | 6 +++--- source/blender/python/mathutils/mathutils_Matrix.c | 5 +++-- source/blender/sequencer/intern/sequencer.c | 2 +- source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c | 8 ++++---- source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c | 2 +- source/blender/windowmanager/intern/wm_event_system.c | 6 +++--- source/blender/windowmanager/intern/wm_files.c | 2 +- source/blender/windowmanager/intern/wm_files_link.c | 2 +- source/blender/windowmanager/intern/wm_operators.c | 6 +++--- source/blender/windowmanager/intern/wm_window.c | 2 +- 28 files changed, 55 insertions(+), 53 deletions(-) (limited to 'source/blender') diff --git a/source/blender/blenkernel/intern/appdir.c b/source/blender/blenkernel/intern/appdir.c index ff799d9a495..1075a46e72b 100644 --- a/source/blender/blenkernel/intern/appdir.c +++ b/source/blender/blenkernel/intern/appdir.c @@ -664,7 +664,7 @@ bool BKE_appdir_folder_id_ex(const int folder_id, return false; default: - BLI_assert(0); + BLI_assert_unreachable(); break; } @@ -719,7 +719,7 @@ const char *BKE_appdir_folder_id_user_notest(const int folder_id, const char *su get_path_user_ex(path, sizeof(path), "scripts", subfolder, version, check_is_dir); break; default: - BLI_assert(0); + BLI_assert_unreachable(); break; } diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c index 92759221f79..a1ebec1d756 100644 --- a/source/blender/blenkernel/intern/armature.c +++ b/source/blender/blenkernel/intern/armature.c @@ -1691,7 +1691,7 @@ void BKE_bone_parent_transform_calc_from_matrices(int bone_flag, break; default: - BLI_assert(false); + BLI_assert_unreachable(); } } /* If removing parent pose rotation: */ @@ -1723,7 +1723,7 @@ void BKE_bone_parent_transform_calc_from_matrices(int bone_flag, break; default: - BLI_assert(false); + BLI_assert_unreachable(); } } diff --git a/source/blender/blenkernel/intern/colortools.c b/source/blender/blenkernel/intern/colortools.c index 44d9bd6b2d2..f30fcc54b23 100644 --- a/source/blender/blenkernel/intern/colortools.c +++ b/source/blender/blenkernel/intern/colortools.c @@ -1374,7 +1374,7 @@ void BKE_histogram_update_sample_line(Histogram *hist, rgba[3] = 1.0f; break; default: - BLI_assert(0); + BLI_assert_unreachable(); } hist->data_luma[i] = IMB_colormanagement_get_luminance(rgba); @@ -1476,7 +1476,7 @@ static void scopes_update_cb(void *__restrict userdata, rgba[3] = 1.0f; break; default: - BLI_assert(0); + BLI_assert_unreachable(); } } else { diff --git a/source/blender/blenkernel/intern/fluid.c b/source/blender/blenkernel/intern/fluid.c index 4c85fda4a37..851d8aae378 100644 --- a/source/blender/blenkernel/intern/fluid.c +++ b/source/blender/blenkernel/intern/fluid.c @@ -936,7 +936,7 @@ static void update_velocities(FluidEffectorSettings *fes, } else { /* Should never reach this block. */ - BLI_assert(false); + BLI_assert_unreachable(); } } else { diff --git a/source/blender/blenkernel/intern/main.c b/source/blender/blenkernel/intern/main.c index d1f34ad8ce9..dc678f248c9 100644 --- a/source/blender/blenkernel/intern/main.c +++ b/source/blender/blenkernel/intern/main.c @@ -182,7 +182,7 @@ void BKE_main_free(Main *mainvar) BKE_id_free_ex(mainvar, id, free_flag, false); break; default: - BLI_assert(0); + BLI_assert_unreachable(); break; } #endif diff --git a/source/blender/blenkernel/intern/mesh_wrapper.c b/source/blender/blenkernel/intern/mesh_wrapper.c index acd272ac305..5df9f7816e3 100644 --- a/source/blender/blenkernel/intern/mesh_wrapper.c +++ b/source/blender/blenkernel/intern/mesh_wrapper.c @@ -148,7 +148,7 @@ bool BKE_mesh_wrapper_minmax(const Mesh *me, float min[3], float max[3]) case ME_WRAPPER_TYPE_MDATA: return BKE_mesh_minmax(me, min, max); } - BLI_assert(0); + BLI_assert_unreachable(); return false; } @@ -189,7 +189,7 @@ void BKE_mesh_wrapper_vert_coords_copy(const Mesh *me, return; } } - BLI_assert(0); + BLI_assert_unreachable(); } void BKE_mesh_wrapper_vert_coords_copy_with_mat4(const Mesh *me, @@ -226,7 +226,7 @@ void BKE_mesh_wrapper_vert_coords_copy_with_mat4(const Mesh *me, return; } } - BLI_assert(0); + BLI_assert_unreachable(); } /** \} */ @@ -243,7 +243,7 @@ int BKE_mesh_wrapper_vert_len(const Mesh *me) case ME_WRAPPER_TYPE_MDATA: return me->totvert; } - BLI_assert(0); + BLI_assert_unreachable(); return -1; } @@ -255,7 +255,7 @@ int BKE_mesh_wrapper_edge_len(const Mesh *me) case ME_WRAPPER_TYPE_MDATA: return me->totedge; } - BLI_assert(0); + BLI_assert_unreachable(); return -1; } @@ -267,7 +267,7 @@ int BKE_mesh_wrapper_loop_len(const Mesh *me) case ME_WRAPPER_TYPE_MDATA: return me->totloop; } - BLI_assert(0); + BLI_assert_unreachable(); return -1; } @@ -279,7 +279,7 @@ int BKE_mesh_wrapper_poly_len(const Mesh *me) case ME_WRAPPER_TYPE_MDATA: return me->totpoly; } - BLI_assert(0); + BLI_assert_unreachable(); return -1; } diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 00e99f193a2..b07c4b22c39 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -1858,7 +1858,7 @@ bool BKE_object_data_is_in_editmode(const ID *id) case ID_AR: return ((const bArmature *)id)->edbo != NULL; default: - BLI_assert(0); + BLI_assert_unreachable(); return false; } } @@ -1905,7 +1905,7 @@ char *BKE_object_data_editmode_flush_ptr_get(struct ID *id) return &arm->needs_flush_to_id; } default: - BLI_assert(0); + BLI_assert_unreachable(); return NULL; } return NULL; diff --git a/source/blender/blenkernel/intern/paint.c b/source/blender/blenkernel/intern/paint.c index 2e81b61ad8c..3494630e1fa 100644 --- a/source/blender/blenkernel/intern/paint.c +++ b/source/blender/blenkernel/intern/paint.c @@ -656,7 +656,7 @@ void BKE_paint_runtime_init(const ToolSettings *ts, Paint *paint) paint->runtime.ob_mode = OB_MODE_WEIGHT_GPENCIL; } else { - BLI_assert(0); + BLI_assert_unreachable(); } } diff --git a/source/blender/editors/util/ed_util.c b/source/blender/editors/util/ed_util.c index 9903711834a..da94eef4917 100644 --- a/source/blender/editors/util/ed_util.c +++ b/source/blender/editors/util/ed_util.c @@ -146,7 +146,7 @@ void ED_editors_init(bContext *C) ED_object_wpaintmode_enter_ex(bmain, depsgraph, scene, ob); } else { - BLI_assert(0); + BLI_assert_unreachable(); } } else { diff --git a/source/blender/editors/util/select_utils.c b/source/blender/editors/util/select_utils.c index 85f48e6d397..14a6d751bb1 100644 --- a/source/blender/editors/util/select_utils.c +++ b/source/blender/editors/util/select_utils.c @@ -94,7 +94,7 @@ int ED_select_similar_compare_float(const float delta, const float thresh, const case SIM_CMP_LT: return ((delta - thresh) < FLT_EPSILON); default: - BLI_assert(0); + BLI_assert_unreachable(); return 0; } } @@ -124,7 +124,7 @@ bool ED_select_similar_compare_float_tree(const KDTree_1d *tree, nearest_edge_length = FLT_MAX; break; default: - BLI_assert(0); + BLI_assert_unreachable(); return false; } diff --git a/source/blender/editors/uvedit/uvedit_rip.c b/source/blender/editors/uvedit/uvedit_rip.c index c8aa21191ba..e1b9a287457 100644 --- a/source/blender/editors/uvedit/uvedit_rip.c +++ b/source/blender/editors/uvedit/uvedit_rip.c @@ -169,7 +169,7 @@ static BMLoop *bm_loop_find_other_fan_loop_with_visible_face(BMLoop *l_src, l_other = l_other->prev; } else { - BLI_assert(0); + BLI_assert_unreachable(); } } return l_other; @@ -189,7 +189,7 @@ static BMLoop *bm_vert_step_fan_loop_uv(BMLoop *l, BMEdge **e_step, const int cd l_next = l; } else { - BLI_assert(0); + BLI_assert_unreachable(); return NULL; } diff --git a/source/blender/editors/uvedit/uvedit_select.c b/source/blender/editors/uvedit/uvedit_select.c index f46975c9378..c10e132a4e2 100644 --- a/source/blender/editors/uvedit/uvedit_select.c +++ b/source/blender/editors/uvedit/uvedit_select.c @@ -2213,7 +2213,7 @@ static int uv_mouse_select_loop_generic_multi(bContext *C, flush = uv_select_edgering(sima, scene, obedit, &hit, extend); } else { - BLI_assert(0); + BLI_assert_unreachable(); } if (ts->uv_flag & UV_SYNC_SELECTION) { diff --git a/source/blender/imbuf/intern/thumbs.c b/source/blender/imbuf/intern/thumbs.c index 0d2080b5f0a..61bc185eb8d 100644 --- a/source/blender/imbuf/intern/thumbs.c +++ b/source/blender/imbuf/intern/thumbs.c @@ -393,7 +393,7 @@ static ImBuf *thumb_create_ex(const char *file_path, img = IMB_thumb_load_font(file_path, tsize, tsize); break; default: - BLI_assert(0); /* This should never happen */ + BLI_assert_unreachable(); /* This should never happen */ } } @@ -738,7 +738,7 @@ void IMB_thumb_path_unlock(const char *path) if (thumb_locks.locked_paths) { if (!BLI_gset_remove(thumb_locks.locked_paths, key, MEM_freeN)) { - BLI_assert(0); + BLI_assert_unreachable(); } BLI_condition_notify_all(&thumb_locks.cond); } diff --git a/source/blender/python/bmesh/bmesh_py_types.c b/source/blender/python/bmesh/bmesh_py_types.c index 5fca6f4cec6..563a76ac824 100644 --- a/source/blender/python/bmesh/bmesh_py_types.c +++ b/source/blender/python/bmesh/bmesh_py_types.c @@ -3984,7 +3984,7 @@ PyObject *BPy_BMElem_CreatePyObject(BMesh *bm, BMHeader *ele) case BM_LOOP: return BPy_BMLoop_CreatePyObject(bm, (BMLoop *)ele); default: - BLI_assert(0); + BLI_assert_unreachable(); PyErr_SetString(PyExc_SystemError, "internal error"); return NULL; } diff --git a/source/blender/python/bmesh/bmesh_py_types_customdata.c b/source/blender/python/bmesh/bmesh_py_types_customdata.c index 471a311c411..78c43d18609 100644 --- a/source/blender/python/bmesh/bmesh_py_types_customdata.c +++ b/source/blender/python/bmesh/bmesh_py_types_customdata.c @@ -56,7 +56,7 @@ static CustomData *bpy_bm_customdata_get(BMesh *bm, char htype) return &bm->ldata; } - BLI_assert(0); + BLI_assert_unreachable(); return NULL; } @@ -958,7 +958,7 @@ PyObject *BPy_BMLayerAccess_CreatePyObject(BMesh *bm, const char htype) type = &BPy_BMLayerAccessLoop_Type; break; default: { - BLI_assert(0); + BLI_assert_unreachable(); type = NULL; break; } diff --git a/source/blender/python/generic/imbuf_py_api.c b/source/blender/python/generic/imbuf_py_api.c index 5b4a4fd237e..97a66bc23c0 100644 --- a/source/blender/python/generic/imbuf_py_api.c +++ b/source/blender/python/generic/imbuf_py_api.c @@ -123,7 +123,7 @@ static PyObject *py_imbuf_resize(Py_ImBuf *self, PyObject *args, PyObject *kw) IMB_scaleImBuf(self->ibuf, UNPACK2(size)); } else { - BLI_assert(0); + BLI_assert_unreachable(); } Py_RETURN_NONE; } diff --git a/source/blender/python/gpu/gpu_py_matrix.c b/source/blender/python/gpu/gpu_py_matrix.c index df7c82379b3..b00a13d5be8 100644 --- a/source/blender/python/gpu/gpu_py_matrix.c +++ b/source/blender/python/gpu/gpu_py_matrix.c @@ -201,7 +201,7 @@ static PyObject *pygpu_matrix_stack_context_enter(BPyGPU_MatrixStackContext *sel self->level = GPU_matrix_stack_level_get_projection(); } else { - BLI_assert(0); + BLI_assert_unreachable(); } Py_RETURN_NONE; } @@ -234,7 +234,7 @@ static PyObject *pygpu_matrix_stack_context_exit(BPyGPU_MatrixStackContext *self } } else { - BLI_assert(0); + BLI_assert_unreachable(); } finally: Py_RETURN_NONE; diff --git a/source/blender/python/gpu/gpu_py_vertex_buffer.c b/source/blender/python/gpu/gpu_py_vertex_buffer.c index 111fa114c43..3c7038186b9 100644 --- a/source/blender/python/gpu/gpu_py_vertex_buffer.c +++ b/source/blender/python/gpu/gpu_py_vertex_buffer.c @@ -70,7 +70,8 @@ break; \ } \ default: \ - BLI_assert(0); \ + BLI_assert_unreachable(); \ + break; \ } \ ((void)0) diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index fab73d0f3dc..49ac2662a31 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -1345,7 +1345,7 @@ BLI_bitmap *pyrna_set_to_enum_bitmap(const EnumPropertyItem *items, index = (int)ret_convert.as_unsigned; } else { - BLI_assert(0); + BLI_assert_unreachable(); } } BLI_assert(index < bitmap_size); @@ -5550,7 +5550,7 @@ static PyObject *pyprop_array_foreach_getset(BPy_PropertyArrayRNA *self, case PROP_POINTER: case PROP_COLLECTION: /* Should never happen. */ - BLI_assert(false); + BLI_assert_unreachable(); break; } @@ -5595,7 +5595,7 @@ static PyObject *pyprop_array_foreach_getset(BPy_PropertyArrayRNA *self, case PROP_POINTER: case PROP_COLLECTION: /* Should never happen. */ - BLI_assert(false); + BLI_assert_unreachable(); break; } diff --git a/source/blender/python/mathutils/mathutils_Matrix.c b/source/blender/python/mathutils/mathutils_Matrix.c index 016ba462030..161d2f41592 100644 --- a/source/blender/python/mathutils/mathutils_Matrix.c +++ b/source/blender/python/mathutils/mathutils_Matrix.c @@ -1049,7 +1049,8 @@ static void adjoint_matrix_n(float *mat_dst, const float *mat_src, const ushort break; } default: - BLI_assert(0); + BLI_assert_unreachable(); + break; } } @@ -1159,7 +1160,7 @@ static void matrix_invert_safe_internal(const MatrixObject *self, float *r_mat) break; } default: - BLI_assert(0); + BLI_assert_unreachable(); } } diff --git a/source/blender/sequencer/intern/sequencer.c b/source/blender/sequencer/intern/sequencer.c index 4db7350544b..cc11796496c 100644 --- a/source/blender/sequencer/intern/sequencer.c +++ b/source/blender/sequencer/intern/sequencer.c @@ -488,7 +488,7 @@ static Sequence *seq_dupli(const Scene *scene_src, } else { /* sequence type not handled in duplicate! Expect a crash now... */ - BLI_assert(0); + BLI_assert_unreachable(); } /* When using SEQ_DUPE_UNIQUE_NAME, it is mandatory to add new sequences in relevant container diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c index 1e77ccd7a1c..32b6a6e6b31 100644 --- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c +++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c @@ -324,7 +324,7 @@ bool wm_gizmogroup_is_visible_in_drawstep(const wmGizmoGroup *gzgroup, case WM_GIZMOMAP_DRAWSTEP_3D: return (gzgroup->type->flag & WM_GIZMOGROUPTYPE_3D); default: - BLI_assert(0); + BLI_assert_unreachable(); return false; } } @@ -393,7 +393,7 @@ static int gizmo_select_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSE return OPERATOR_FINISHED; } - BLI_assert(0); + BLI_assert_unreachable(); return (OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH); } @@ -498,7 +498,7 @@ static int gizmo_tweak_modal(bContext *C, wmOperator *op, const wmEvent *event) bool clear_modal = true; if (gz == NULL) { - BLI_assert(0); + BLI_assert_unreachable(); return (OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH); } @@ -585,7 +585,7 @@ static int gizmo_tweak_invoke(bContext *C, wmOperator *op, const wmEvent *event) if (!gz) { /* wm_handlers_do_intern shouldn't let this happen */ - BLI_assert(0); + BLI_assert_unreachable(); return (OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH); } diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c index 9b38f010205..45950a32d85 100644 --- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c +++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c @@ -941,7 +941,7 @@ bool WM_gizmomap_select_all(bContext *C, wmGizmoMap *gzmap, const int action) changed = wm_gizmomap_deselect_all(gzmap); break; default: - BLI_assert(0); + BLI_assert_unreachable(); break; } diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index ed1b53e8e20..791aeeb39cd 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -144,7 +144,7 @@ wmEvent *wm_event_add(wmWindow *win, const wmEvent *event_to_add) wmEvent *WM_event_add_simulate(wmWindow *win, const wmEvent *event_to_add) { if ((G.f & G_FLAG_EVENT_SIMULATE) == 0) { - BLI_assert(0); + BLI_assert_unreachable(); return NULL; } wmEvent *event = wm_event_add(win, event_to_add); @@ -1037,7 +1037,7 @@ static void wm_operator_finished(bContext *C, wmOperator *op, const bool repeat, ED_area_type_hud_clear(wm, NULL); } else { - BLI_assert(0); + BLI_assert_unreachable(); } } } @@ -2885,7 +2885,7 @@ static int wm_handlers_do_intern(bContext *C, wmEvent *event, ListBase *handlers } else { /* Unreachable (handle all types above). */ - BLI_assert(0); + BLI_assert_unreachable(); } if (action & WM_HANDLER_BREAK) { diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c index a9b30f91bee..bbcb0669cce 100644 --- a/source/blender/windowmanager/intern/wm_files.c +++ b/source/blender/windowmanager/intern/wm_files.c @@ -2298,7 +2298,7 @@ static int operator_state_dispatch(bContext *C, wmOperator *op, OperatorDispatch return target.run(C, op); } } - BLI_assert(false); + BLI_assert_unreachable(); return OPERATOR_CANCELLED; } diff --git a/source/blender/windowmanager/intern/wm_files_link.c b/source/blender/windowmanager/intern/wm_files_link.c index bf7cf81f0a9..840debad01b 100644 --- a/source/blender/windowmanager/intern/wm_files_link.c +++ b/source/blender/windowmanager/intern/wm_files_link.c @@ -750,7 +750,7 @@ static void lib_relocate_do_remap(Main *bmain, /* In some cases, new_id might become direct link, remove parent of library in this case. */ if (new_id->lib->parent && (new_id->tag & LIB_TAG_INDIRECT) == 0) { if (do_reload) { - BLI_assert(0); /* Should not happen in 'pure' reload case... */ + BLI_assert_unreachable(); /* Should not happen in 'pure' reload case... */ } new_id->lib->parent = NULL; } diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index e8a41b04d84..84c16999c1b 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -1229,7 +1229,7 @@ ID *WM_operator_drop_load_path(struct bContext *C, wmOperator *op, const short i id = (ID *)BKE_image_load_exists_ex(bmain, path, &exists); } else { - BLI_assert(0); + BLI_assert_unreachable(); } if (!id) { @@ -1248,7 +1248,7 @@ ID *WM_operator_drop_load_path(struct bContext *C, wmOperator *op, const short i BLI_path_rel(((Image *)id)->filepath, BKE_main_blendfile_path(bmain)); } else { - BLI_assert(0); + BLI_assert_unreachable(); } } } @@ -1687,7 +1687,7 @@ static uiBlock *wm_block_search_menu(bContext *C, ARegion *region, void *userdat UI_but_func_menu_search(but); } else { - BLI_assert(0); + BLI_assert_unreachable(); } UI_but_flag_enable(but, UI_BUT_ACTIVATE_ON_INIT); diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c index 25232e8e3d5..eb1da15807c 100644 --- a/source/blender/windowmanager/intern/wm_window.c +++ b/source/blender/windowmanager/intern/wm_window.c @@ -2174,7 +2174,7 @@ void WM_window_screen_rect_calc(const wmWindow *win, rcti *r_rect) screen_rect.ymin += height; break; default: - BLI_assert(0); + BLI_assert_unreachable(); break; } } -- cgit v1.2.3