Files
odfstudio/sc/Module_sc.mk
T
Tomaž Vajngerl 6612d4f785 sc: add the # postfix operator for spilled-range references
A1# is the postfix counterpart of the @ prefix. When A1 is
the origin of a dynamic-array formula spilled into A1:A4, A1#
refers to the whole spill range, so SUM(A1#) totals the four
values and ROWS(A1#) returns 4.

The new opcode ocSpill sits in the unary-operator range. The
tokenizer produces it from a bare # after a reference or
value. Otherwise # stays the start of a #REF! or #NAME!
token. The compiler routes it through PostOpLine so it
follows its operand in the RPN.

ScSpilledRange pushes the spill range as an ScMatrixRangeToken
so aggregating functions see the whole range, and ISREF
reports it as a reference. A master yields its matrix. A
plain number, string, or non-master matrix slot yields the
the cell value.

A freshly typed =A1# counts as an array result, so it
promotes to a dynamic-array master and spills again. A cell
that does not promote collapses the range by implicit
intersection to the row-aligned value, or #VALUE! outside the
range, keeping that cell's number format.

Signed-off-by: Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>
Change-Id: Idf2752af3f7575f6bc95b940344aa365415e4a2f
Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/5785
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
Tested-by: Tomaž Vajngerl <tomaz.vajngerl@collabora.com>
(cherry picked from commit 9b97b0fc91bce4b8726ea210347e8ea84270e148)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/207904
Tested-by: Xisco Fauli <xiscofauli@libreoffice.org>
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
Tested-by: Jenkins
2026-07-10 01:08:46 +02:00

325 lines
10 KiB
Makefile

# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
#
#
# This file is part of the LibreOffice project.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
include $(SRCDIR)/sc/common_unoapi_tests.mk
include $(SRCDIR)/sc/functions_setup.mk
include $(SRCDIR)/sc/ucalc_setup.mk
include $(SRCDIR)/sc/subsequent_setup.mk
$(eval $(call gb_Module_Module,sc))
$(eval $(call gb_Module_add_targets,sc,\
Library_sc \
Library_scd \
Library_scfilt \
Library_scui \
$(call gb_Helper_optional,OPENCL,Package_opencl) \
Package_res_xml \
UIConfig_scalc \
))
$(eval $(call gb_Module_add_l10n_targets,sc,\
AllLangMoTarget_sc \
))
ifneq ($(filter SCRIPTING,$(BUILD_TYPE)),)
$(eval $(call gb_Module_add_targets,sc,\
Library_vbaobj \
))
endif
ifneq ($(OS),iOS)
ifneq ($(filter SCRIPTING,$(BUILD_TYPE)),)
$(eval $(call gb_Module_add_check_targets,sc,\
Library_scqahelper \
$(if $(and $(filter $(COM),MSC),$(MERGELIBS)),, \
CppunitTest_sc_ucalc) \
CppunitTest_sc_ucalc_nanpayload \
CppunitTest_sc_ucalc_condformat \
CppunitTest_sc_ucalc_copypaste \
CppunitTest_sc_ucalc_datatransformation \
CppunitTest_sc_ucalc_document_themes \
CppunitTest_sc_ucalc_tablestyles \
CppunitTest_sc_ucalc_formula \
CppunitTest_sc_ucalc_formula2 \
CppunitTest_sc_ucalc_spilled_range \
CppunitTest_sc_ucalc_parallelism \
CppunitTest_sc_ucalc_pivottable \
CppunitTest_sc_ucalc_rangelst \
CppunitTest_sc_ucalc_range \
CppunitTest_sc_ucalc_sharedformula \
CppunitTest_sc_ucalc_sparkline \
CppunitTest_sc_ucalc_solver \
CppunitTest_sc_ucalc_sort \
CppunitTest_sc_filters_test \
CppunitTest_sc_oox_helpers_test \
CppunitTest_sc_mark_test \
CppunitTest_sc_core \
CppunitTest_sc_basic_types_test \
CppunitTest_sc_dataprovider \
CppunitTest_sc_cache_test \
CppunitTest_sc_parallelism \
CppunitTest_sc_shapetest \
))
endif
ifneq ($(DISABLE_GUI),TRUE)
ifeq ($(OS),LINUX)
$(eval $(call gb_Module_add_check_targets,sc,\
CppunitTest_sc_tiledrendering \
CppunitTest_sc_tiledrendering2 \
))
endif
endif
$(eval $(call gb_Module_add_slowcheck_targets,sc, \
CppunitTest_sc_anchor_test \
CppunitTest_sc_color_scale_api \
CppunitTest_sc_cond_format \
CppunitTest_sc_cond_format_merge \
CppunitTest_sc_copypaste \
CppunitTest_sc_html_export_test \
CppunitTest_sc_goal_seek_test \
CppunitTest_sc_macros_test \
CppunitTest_sc_new_cond_format_api \
CppunitTest_sc_pdf_export \
CppunitTest_sc_pivottable_filters_test \
CppunitTest_sc_pivottable_formats_import_export_test \
CppunitTest_sc_named_sheet_views_import_export_test \
CppunitTest_sc_scriptforge_test \
CppunitTest_sc_sparkline_test \
CppunitTest_sc_subsequent_filters_test \
CppunitTest_sc_subsequent_filters_test2 \
CppunitTest_sc_subsequent_filters_test3 \
CppunitTest_sc_subsequent_filters_test4 \
CppunitTest_sc_subsequent_filters_test5 \
CppunitTest_sc_subsequent_export_test \
CppunitTest_sc_subsequent_export_test2 \
CppunitTest_sc_subsequent_export_test3 \
CppunitTest_sc_subsequent_export_test4 \
CppunitTest_sc_subsequent_export_test5 \
CppunitTest_sc_subsequent_export_test6 \
CppunitTest_sc_uicalc \
CppunitTest_sc_uicalc2 \
CppunitTest_sc_vba_macro_test \
CppunitTest_sc_a11y \
CppunitTest_sc_filter_html \
CppunitTest_sc_filter_xml \
))
ifneq ($(ENABLE_JUMBO_SHEETS),)
$(eval $(call gb_Module_add_slowcheck_targets,sc, \
CppunitTest_sc_jumbosheets_test \
))
endif
# Various function tests fail in 32-bit linux_x86 build due to dreaded floating
# point weirdness (x87, registers, compiler optimization, ... whatever),
# disable them until someone finds a real cure.
ifneq ($(PLATFORMID),linux_x86)
$(eval $(call gb_Module_add_slowcheck_targets,sc, \
CppunitTest_sc_functions_test_old \
CppunitTest_sc_database_functions_test \
CppunitTest_sc_array_functions_test \
CppunitTest_sc_addin_functions_test \
CppunitTest_sc_datetime_functions_test \
CppunitTest_sc_financial_functions_test \
CppunitTest_sc_information_functions_test \
CppunitTest_sc_logical_functions_test \
CppunitTest_sc_mathematical_functions_test \
CppunitTest_sc_spreadsheet_functions_test \
CppunitTest_sc_statistical_functions_test \
CppunitTest_sc_text_functions_test \
CppunitTest_sc_annotationobj \
CppunitTest_sc_annotationshapeobj \
CppunitTest_sc_annotationsobj \
CppunitTest_sc_arealinkobj \
CppunitTest_sc_arealinksobj \
CppunitTest_sc_autoformatobj \
CppunitTest_sc_cellcursorobj \
CppunitTest_sc_cellfieldsobj \
CppunitTest_sc_cellformatsenumeration \
CppunitTest_sc_cellformatsobj \
CppunitTest_sc_cellobj \
CppunitTest_sc_cellrangeobj \
CppunitTest_sc_cellrangesobj \
CppunitTest_sc_cellsearchobj \
CppunitTest_sc_cellsenumeration \
CppunitTest_sc_cellsobj \
CppunitTest_sc_chart2dataprovider \
CppunitTest_sc_chartobj \
CppunitTest_sc_chartsobj \
CppunitTest_sc_check_data_pilot_field \
CppunitTest_sc_check_data_pilot_table \
CppunitTest_sc_check_xcell_ranges_query \
CppunitTest_sc_consolidationdescriptorobj \
$(if $(filter-out $(OS),iOS), \
CppunitTest_sc_databaserangeobj) \
CppunitTest_sc_databaserangesobj \
CppunitTest_sc_datapilotfieldgroupitemobj \
CppunitTest_sc_datapilotfieldgroupobj \
CppunitTest_sc_datapilotfieldgroupsobj \
CppunitTest_sc_datapilotfieldobj \
CppunitTest_sc_datapilotfieldsobj \
CppunitTest_sc_datapilotitemobj \
CppunitTest_sc_datapilotitemsobj \
CppunitTest_sc_datapilottableobj \
CppunitTest_sc_datapilottablesobj \
CppunitTest_sc_ddelinkobj \
CppunitTest_sc_ddelinksobj \
CppunitTest_sc_documentconfigurationobj \
CppunitTest_sc_drawpageobj \
CppunitTest_sc_drawpagesobj \
CppunitTest_sc_editfieldobj_cell \
CppunitTest_sc_editfieldobj_header \
CppunitTest_sc_filterdescriptorbase \
CppunitTest_sc_functiondescriptionobj \
CppunitTest_sc_functionlistobj \
CppunitTest_sc_headerfieldsobj \
CppunitTest_sc_headerfootercontentobj \
CppunitTest_sc_indexenumeration_cellannotationsenumeration \
CppunitTest_sc_indexenumeration_cellarealinksenumeration \
CppunitTest_sc_indexenumeration_databaserangesenumeration \
CppunitTest_sc_indexenumeration_datapilotfieldsenumeration \
CppunitTest_sc_indexenumeration_datapilotitemsenumeration \
CppunitTest_sc_indexenumeration_datapilottablesenumeration \
CppunitTest_sc_indexenumeration_ddelinksenumeration \
CppunitTest_sc_indexenumeration_functiondescriptionenumeration \
CppunitTest_sc_indexenumeration_labelrangesenumeration \
CppunitTest_sc_indexenumeration_namedrangesenumeration \
CppunitTest_sc_indexenumeration_scenariosenumeration \
CppunitTest_sc_indexenumeration_sheetcellrangesenumeration \
CppunitTest_sc_indexenumeration_sheetlinksenumeration \
CppunitTest_sc_indexenumeration_spreadsheetsenumeration \
CppunitTest_sc_indexenumeration_spreadsheetviewpanesenumeration \
CppunitTest_sc_indexenumeration_subtotalfieldsenumeration \
CppunitTest_sc_indexenumeration_tableautoformatenumeration \
CppunitTest_sc_indexenumeration_tablechartsenumeration \
CppunitTest_sc_indexenumeration_tablecolumnsenumeration \
CppunitTest_sc_indexenumeration_tableconditionalentryenumeration \
CppunitTest_sc_indexenumeration_tablerowsenumeration \
CppunitTest_sc_indexenumeration_textfieldenumeration \
CppunitTest_sc_importdescriptorbaseobj \
CppunitTest_sc_importdescriptorcellrangeobj \
CppunitTest_sc_labelrangeobj \
CppunitTest_sc_labelrangesobj \
CppunitTest_sc_modelobj \
CppunitTest_sc_namedrangeobj \
CppunitTest_sc_namedrangesobj \
CppunitTest_sc_outlineobj \
CppunitTest_sc_recentfunctionsobj \
CppunitTest_sc_recordchanges \
CppunitTest_sc_scenariosobj \
CppunitTest_sc_shapeobj \
CppunitTest_sc_sheetlinkobj \
CppunitTest_sc_sheetlinksobj \
CppunitTest_sc_sheetview_test \
CppunitTest_sc_solverobj \
CppunitTest_sc_sortdescriptorbaseobj \
CppunitTest_sc_spreadsheetsettings \
CppunitTest_sc_spreadsheetsettingsobj \
CppunitTest_sc_styleobj \
CppunitTest_sc_stylefamiliesobj \
CppunitTest_sc_stylefamilyobj \
CppunitTest_sc_subtotaldescriptorbase \
CppunitTest_sc_subtotalfieldobj \
CppunitTest_sc_tablecolumnobj \
CppunitTest_sc_tablecolumnsobj \
CppunitTest_sc_tableconditionalentryobj \
CppunitTest_sc_tableconditionalformat \
CppunitTest_sc_tablerowobj \
CppunitTest_sc_tablerowsobj \
CppunitTest_sc_tablesheetobj \
CppunitTest_sc_tablesheetsobj \
CppunitTest_sc_tablevalidationobj \
CppunitTest_sc_tabviewobj \
CppunitTest_sc_theme_import_export_test \
CppunitTest_sc_uniquecellformatsenumeration \
CppunitTest_sc_uniquecellformatsobj \
CppunitTest_sc_viewpaneobj \
))
endif
$(eval $(call gb_Module_add_subsequentcheck_targets,sc,\
JunitTest_sc_complex \
JunitTest_sc_unoapi_1 \
JunitTest_sc_unoapi_2 \
JunitTest_sc_unoapi_3 \
JunitTest_sc_unoapi_4 \
JunitTest_sc_unoapi_6 \
JunitTest_sc_unoapi_7 \
$(call gb_Helper_optional,OPENCL,CppunitTest_sc_opencl-1) \
$(call gb_Helper_optional,OPENCL,CppunitTest_sc_opencl-2) \
))
$(eval $(call gb_Module_add_perfcheck_targets,sc,\
CppunitTest_sc_perfobj \
CppunitTest_sc_tablesheetobj \
))
$(eval $(call gb_Module_add_subsequentcheck_targets,sc,\
PythonTest_sc_python \
))
# screenshots
$(eval $(call gb_Module_add_screenshot_targets,sc,\
CppunitTest_sc_screenshots \
))
$(eval $(call gb_Module_add_uicheck_targets,sc,\
UITest_conditional_format \
UITest_range_name \
UITest_autofilter \
UITest_autofilter2 \
UITest_search_replace \
UITest_calc_tests \
UITest_calc_tests2 \
UITest_calc_tests3 \
UITest_calc_tests4 \
UITest_calc_tests6 \
UITest_csv_dialog \
UITest_external_links \
UITest_statistics \
UITest_goalSeek \
UITest_protect \
UITest_sc_options \
UITest_sc_vba \
UITest_validity \
UITest_key_f4 \
UITest_textCase \
UITest_textToColumns \
UITest_signatureLine \
UITest_inputLine \
UITest_calc_tests7 \
UITest_sort \
UITest_chart \
UITest_chart2 \
UITest_pageFormat \
UITest_pasteSpecial \
UITest_calc_tests8 \
UITest_calc_dialogs \
UITest_calc_tests9 \
UITest_function_wizard \
UITest_manual_tests \
UITest_sc_styleui \
))
ifneq ($(or $(ENABLE_LPSOLVE),$(ENABLE_COINMP)),)
$(eval $(call gb_Module_add_uicheck_targets,sc,\
UITest_solver \
))
endif
endif
# vim: set noet sw=4 ts=4: