summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2021-09-14 17:26:17 +0200
committerStephan Bergmann <sbergman@redhat.com>2022-06-10 17:15:49 +0200
commita8485d558fab53291e2530fd9a1be581c1628deb (patch)
treedff1f2885f954b9da2d3d2dbb9adc20b5b69c69c
parentloplugin:unusedenumconstants add support for ParenListExpr (diff)
downloadcore-a8485d558fab53291e2530fd9a1be581c1628deb.tar.gz
core-a8485d558fab53291e2530fd9a1be581c1628deb.zip
[API CHANGE] Remove deprecated idlc and regmerge from the SDK
* Client code must replace uses of idlc and regmerge with uses of unoidl-write, see the changes to odk/examples/ and ure/source/uretext/ in 40f2aee6584eafcf4cd1d95fcf1f775e5435440d "Provide unoidl-write also for the SDK" for examples. * The new types.rdb format is not compatible with LibreOffice < 4.1. Clients generating extensions containing such files are advised to use appropriate LibreOffice-minimal-version elements. * For compatibility with old extensions, reading the legacy types.rdb format is still supported. * The SDK no longer ships an idl/ sub-directory containing the udkap and offapi .idl files (as, unlike idlc, unoidl-write does not need them). odk/config/cfgWin.js had to be adapted to look (somewhat arbitrarily) for an examples/ sub-directory instead of idl/ when checking for "an sdk folder". gb_UnoApi_package_idlfiles became unused and has been removed. * The idlc and regmerge executables have been removed. Module idlc has been removed except for idlc/test/parser/, which is also used by CustomTarget_unoidl/unoidl-write_test, and which may eventually be moved into module unoidl. Module external/ucpp and the corresponding configure options have also been removed. Change-Id: I42a0231699b863b5ebe2bee63bc32c8f79278cc1 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/122363 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
-rw-r--r--Makefile.fetch1
-rw-r--r--Repository.mk6
-rw-r--r--RepositoryExternal.mk19
-rw-r--r--RepositoryModule_host.mk1
-rw-r--r--compilerplugins/clang/shouldreturnbool.cxx3
-rw-r--r--compilerplugins/clang/unnecessaryparen.cxx2
-rw-r--r--compilerplugins/clang/useuniqueptr.cxx12
-rw-r--r--compilerplugins/clang/writeonlyvars.cxx3
-rw-r--r--config_host.mk.in2
-rw-r--r--configure.ac44
-rw-r--r--download.lst2
-rw-r--r--external/Module_external.mk1
-rw-r--r--external/ucpp/Executable_ucpp.mk33
-rw-r--r--external/ucpp/Makefile14
-rw-r--r--external/ucpp/Module_ucpp.mk20
-rw-r--r--external/ucpp/README3
-rw-r--r--external/ucpp/UnpackedTarball_ucpp.mk20
-rw-r--r--external/ucpp/ucpp.patch11
-rw-r--r--idlc/CustomTarget_parser_test.mk91
-rw-r--r--idlc/Executable_idlc.mk81
-rw-r--r--idlc/Makefile14
-rw-r--r--idlc/Module_idlc.mk25
-rw-r--r--idlc/README.md7
-rw-r--r--idlc/inc/astattribute.hxx107
-rw-r--r--idlc/inc/astbasetype.hxx50
-rw-r--r--idlc/inc/astconstant.hxx50
-rw-r--r--idlc/inc/astconstants.hxx35
-rw-r--r--idlc/inc/astdeclaration.hxx136
-rw-r--r--idlc/inc/astenum.hxx45
-rw-r--r--idlc/inc/astexception.hxx35
-rw-r--r--idlc/inc/astexpression.hxx139
-rw-r--r--idlc/inc/astinterface.hxx129
-rw-r--r--idlc/inc/astinterfacemember.hxx45
-rw-r--r--idlc/inc/astmember.hxx48
-rw-r--r--idlc/inc/astmodule.hxx44
-rw-r--r--idlc/inc/astneeds.hxx41
-rw-r--r--idlc/inc/astobserves.hxx41
-rw-r--r--idlc/inc/astoperation.hxx54
-rw-r--r--idlc/inc/astparameter.hxx46
-rw-r--r--idlc/inc/astscope.hxx73
-rw-r--r--idlc/inc/astsequence.hxx49
-rw-r--r--idlc/inc/astservice.hxx61
-rw-r--r--idlc/inc/astservicemember.hxx45
-rw-r--r--idlc/inc/aststack.hxx46
-rw-r--r--idlc/inc/aststruct.hxx62
-rw-r--r--idlc/inc/aststructinstance.hxx49
-rw-r--r--idlc/inc/asttype.hxx37
-rw-r--r--idlc/inc/asttypedef.hxx44
-rw-r--r--idlc/inc/errorhandler.hxx118
-rw-r--r--idlc/inc/fehelper.hxx70
-rw-r--r--idlc/inc/idlc.hxx164
-rw-r--r--idlc/inc/idlctypes.hxx189
-rw-r--r--idlc/inc/inheritedinterface.hxx56
-rw-r--r--idlc/inc/options.hxx76
-rw-r--r--idlc/source/astconstant.cxx123
-rw-r--r--idlc/source/astdeclaration.cxx164
-rw-r--r--idlc/source/astdump.cxx420
-rw-r--r--idlc/source/astenum.cxx105
-rw-r--r--idlc/source/astexpression.cxx1327
-rw-r--r--idlc/source/astinterface.cxx399
-rw-r--r--idlc/source/astoperation.cxx115
-rw-r--r--idlc/source/astscope.cxx314
-rw-r--r--idlc/source/astservice.cxx54
-rw-r--r--idlc/source/aststack.cxx79
-rw-r--r--idlc/source/aststruct.cxx167
-rw-r--r--idlc/source/aststructinstance.cxx63
-rw-r--r--idlc/source/attributeexceptions.hxx38
-rw-r--r--idlc/source/errorhandler.cxx583
-rw-r--r--idlc/source/fehelper.cxx102
-rw-r--r--idlc/source/idlc.cxx400
-rw-r--r--idlc/source/idlccompile.cxx394
-rw-r--r--idlc/source/idlcmain.cxx164
-rw-r--r--idlc/source/idlcproduce.cxx242
-rw-r--r--idlc/source/options.cxx424
-rw-r--r--idlc/source/parser.y2737
-rw-r--r--idlc/source/scanner.l526
-rw-r--r--idlc/test/const.idl71
-rw-r--r--idlc/test/enum.idl45
-rw-r--r--idlc/test/exception.idl40
-rw-r--r--idlc/test/identifiers.idl43
-rw-r--r--idlc/test/interface.idl71
-rw-r--r--idlc/test/service.idl64
-rw-r--r--idlc/test/singleton.idl61
-rw-r--r--idlc/test/struct.idl121
-rw-r--r--idlc/test/typelookup.idl80
-rw-r--r--odk/CustomTarget_check.mk2
-rw-r--r--odk/config/cfgWin.js8
-rw-r--r--odk/docs/tools.html144
-rw-r--r--odk/settings/std.mk2
-rw-r--r--odk/util/check.pl5
-rw-r--r--offapi/UnoApi_offapi.mk1
-rw-r--r--registry/Executable_regmerge.mk29
-rw-r--r--registry/Module_registry.mk1
-rw-r--r--registry/StaticLibrary_registry_helper.mk1
-rw-r--r--registry/tools/options.cxx144
-rw-r--r--registry/tools/options.hxx57
-rw-r--r--registry/tools/regmerge.cxx183
-rw-r--r--solenv/clang-format/excludelist41
-rw-r--r--solenv/flatpak-manifest.in7
-rw-r--r--solenv/gbuild/UnoApi.mk32
-rw-r--r--solenv/qa/python/gbuildtojson.py2
-rw-r--r--udkapi/UnoApi_udkapi.mk2
-rw-r--r--unoidl/README.md3
-rw-r--r--ure/source/README4
104 files changed, 10 insertions, 12793 deletions
diff --git a/Makefile.fetch b/Makefile.fetch
index ccb3860735cb..8f9b4ba1c6af 100644
--- a/Makefile.fetch
+++ b/Makefile.fetch
@@ -215,7 +215,6 @@ $(WORKDIR)/download: $(BUILDDIR)/config_$(gb_Side).mk $(SRCDIR)/download.lst $(S
$(call fetch_Optional,SKIA,SKIA_TARBALL) \
$(call fetch_Optional,STAROFFICE,STAROFFICE_TARBALL) \
$(if $(filter WNT,$(OS)),TWAIN_DSM_TARBALL) \
- $(call fetch_Optional,UCPP,UCPP_TARBALL) \
$(call fetch_Optional,VISIO,VISIO_TARBALL) \
$(call fetch_Optional,WPD,WPD_TARBALL) \
$(call fetch_Optional,WPG,WPG_TARBALL) \
diff --git a/Repository.mk b/Repository.mk
index 5ee1546b2504..47a2f9c8202e 100644
--- a/Repository.mk
+++ b/Repository.mk
@@ -88,10 +88,8 @@ $(eval $(call gb_Helper_register_executables,NONE, \
$(eval $(call gb_Helper_register_executables_for_install,SDK,sdk, \
$(if $(filter MSC,$(COM)),$(if $(filter-out AARCH64,$(CPUNAME)),climaker)) \
cppumaker \
- idlc \
javamaker \
$(call gb_CondExeSp2bv,sp2bv) \
- $(if $(filter UCPP,$(BUILD_TYPE)),ucpp) \
$(if $(filter ODK,$(BUILD_TYPE)),unoapploader) \
unoidl-read \
unoidl-write \
@@ -249,7 +247,6 @@ endif
$(eval $(call gb_Helper_register_executables_for_install,UREBIN,ure,\
$(if $(and $(ENABLE_JAVA),$(filter-out HAIKU MACOSX WNT,$(OS)),$(filter DESKTOP,$(BUILD_TYPE))),javaldx) \
$(call gb_CondExeRegistryTools, \
- regmerge \
regview \
) \
$(call gb_CondExeUno,uno) \
@@ -907,8 +904,6 @@ $(eval $(call gb_Helper_register_packages_for_install,sdk,\
odk_html \
odk_settings \
odk_settings_generated \
- offapi_idl \
- udkapi_idl \
$(if $(ENABLE_JAVA), \
odk_javadoc \
odk_uno_loader_classes \
@@ -1162,7 +1157,6 @@ $(eval $(call gb_ExternalExecutable_register_executables,\
genccode \
gencmn \
python \
- ucpp \
xmllint \
xsltproc \
))
diff --git a/RepositoryExternal.mk b/RepositoryExternal.mk
index 2b2063483d31..938fc6bf761f 100644
--- a/RepositoryExternal.mk
+++ b/RepositoryExternal.mk
@@ -3929,12 +3929,6 @@ endef
endif
-define gb_Executable__register_idlc
-$(call gb_Executable_add_runtime_dependencies,idlc,\
- $(call gb_ExternalExecutable_get_dependencies,ucpp) \
-)
-endef
-
define gb_Executable__register_localize
$(call gb_Executable_add_runtime_dependencies,localize,\
$(foreach exec,cfgex helpex propex treex ulfex xrmex,\
@@ -4005,19 +3999,6 @@ endef
endif # SYSTEM_LIBXSLT_FOR_BUILD
-ifneq (,$(SYSTEM_UCPP))
-
-gb_ExternalExecutable__register_ucpp :=
-
-else # ! SYSTEM_UCPP
-
-define gb_ExternalExecutable__register_ucpp
-$(call gb_ExternalExecutable_set_internal,ucpp,$(INSTDIR_FOR_BUILD)/$(SDKDIRNAME)/bin/ucpp$(gb_Executable_EXT_for_build))
-
-endef
-
-endif # SYSTEM_UCPP
-
ifeq (,$(PYTHON_FOR_BUILD))
define gb_ExternalExecutable__register_python
diff --git a/RepositoryModule_host.mk b/RepositoryModule_host.mk
index 376f3d1404a8..287bd12b8323 100644
--- a/RepositoryModule_host.mk
+++ b/RepositoryModule_host.mk
@@ -94,7 +94,6 @@ $(eval $(call gb_Module_add_moduledirs,libreoffice,\
i18npool \
i18nutil \
idl \
- $(call gb_Helper_optional,DESKTOP,idlc) \
instsetoo_native \
io \
javaunohelper \
diff --git a/compilerplugins/clang/shouldreturnbool.cxx b/compilerplugins/clang/shouldreturnbool.cxx
index bc232b472e5e..fa1bd4cbdfb3 100644
--- a/compilerplugins/clang/shouldreturnbool.cxx
+++ b/compilerplugins/clang/shouldreturnbool.cxx
@@ -47,9 +47,6 @@ public:
// false +, slightly odd usage, but not wrong
if (loplugin::isSamePathname(fn, SRCDIR "/libreofficekit/qa/tilebench/tilebench.cxx"))
return;
- // uses the Unix convention of "non-zero return indicates error"
- if (loplugin::isSamePathname(fn, SRCDIR "/idlc/source/idlcproduce.cxx"))
- return;
// template magic
if (loplugin::isSamePathname(fn, SRCDIR "/vcl/source/gdi/bmpfast.cxx"))
return;
diff --git a/compilerplugins/clang/unnecessaryparen.cxx b/compilerplugins/clang/unnecessaryparen.cxx
index 29a790702c66..3b9e5f14bbbb 100644
--- a/compilerplugins/clang/unnecessaryparen.cxx
+++ b/compilerplugins/clang/unnecessaryparen.cxx
@@ -83,8 +83,6 @@ public:
// fixing this, makes the source in the .y files look horrible
if (loplugin::isSamePathname(fn, WORKDIR "/YaccTarget/unoidl/source/sourceprovider-parser.cxx"))
return false;
- if (loplugin::isSamePathname(fn, WORKDIR "/YaccTarget/idlc/source/parser.cxx"))
- return false;
return true;
}
virtual void run() override
diff --git a/compilerplugins/clang/useuniqueptr.cxx b/compilerplugins/clang/useuniqueptr.cxx
index c0ef34b2823a..cf4853f03b2b 100644
--- a/compilerplugins/clang/useuniqueptr.cxx
+++ b/compilerplugins/clang/useuniqueptr.cxx
@@ -463,9 +463,6 @@ void UseUniquePtr::CheckDeleteLocalVar(const FunctionDecl* functionDecl, const C
// complicated
if (fn == SRCDIR "/svx/source/sdr/contact/objectcontact.cxx")
return;
- // memory management in this module is a mess
- if (fn == SRCDIR "/idlc/source/aststack.cxx")
- return;
// complicated
if (fn == SRCDIR "/cui/source/customize/cfg.cxx")
return;
@@ -728,9 +725,6 @@ void UseUniquePtr::CheckLoopDelete(const FunctionDecl* functionDecl, const CXXDe
if (loplugin::hasPathnamePrefix(fn, SRCDIR "/vcl/qa/"))
return;
// linked list
- if (fn == SRCDIR "/registry/source/reflwrit.cxx")
- return;
- // linked list
if (fn == SRCDIR "/tools/source/generic/config.cxx")
return;
// linked lists
@@ -848,9 +842,6 @@ void UseUniquePtr::CheckCXXForRangeStmt(const FunctionDecl* functionDecl, const
if (!fieldDecl)
return;
- // appears to just randomly leak stuff, and it involves some lex/yacc stuff
- if (fn == SRCDIR "/idlc/source/aststack.cxx")
- return;
// complicated
if (fn == SRCDIR "/vcl/source/gdi/print.cxx")
return;
@@ -1092,9 +1083,6 @@ bool UseUniquePtr::TraverseConstructorInitializer(CXXCtorInitializer * ctorInit)
return true;
StringRef fn = getFilenameOfLocation(compiler.getSourceManager().getSpellingLoc(ctorInit->getSourceLocation()));
- // don't feel like fiddling with the yacc parser
- if (loplugin::hasPathnamePrefix(fn, SRCDIR "/idlc/"))
- return true;
// cannot change URE
if (loplugin::hasPathnamePrefix(fn, SRCDIR "/cppu/source/helper/purpenv/helper_purpenv_Environment.cxx"))
return true;
diff --git a/compilerplugins/clang/writeonlyvars.cxx b/compilerplugins/clang/writeonlyvars.cxx
index f5051c99e128..3ea5356e4071 100644
--- a/compilerplugins/clang/writeonlyvars.cxx
+++ b/compilerplugins/clang/writeonlyvars.cxx
@@ -185,9 +185,6 @@ void WriteOnlyVars::run()
// false+
if (loplugin::isSamePathname(fn, SRCDIR "/store/source/storpage.cxx"))
return;
- // yydebug?
- if (loplugin::isSamePathname(fn, SRCDIR "/idlc/source/idlccompile.cxx"))
- return;
if (fn.contains("/qa/"))
return;
if (fn.contains("/vcl/workben/"))
diff --git a/config_host.mk.in b/config_host.mk.in
index 019e1a65561b..c924c13c4832 100644
--- a/config_host.mk.in
+++ b/config_host.mk.in
@@ -678,8 +678,6 @@ export SYSTEM_REDLAND=@SYSTEM_REDLAND@
export SYSTEM_REVENGE=@SYSTEM_REVENGE@
export SYSTEM_RHINO=@SYSTEM_RHINO@
export SYSTEM_STAROFFICE=@SYSTEM_STAROFFICE@
-export SYSTEM_UCPP=@SYSTEM_UCPP@
-export SYSTEM_UCPP_IS_GCC=@SYSTEM_UCPP_IS_GCC@
export SYSTEM_VISIO=@SYSTEM_VISIO@
export SYSTEM_WPD=@SYSTEM_WPD@
export SYSTEM_WPG=@SYSTEM_WPG@
diff --git a/configure.ac b/configure.ac
index 2ff842f2b595..11e697c733f8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2214,11 +2214,6 @@ AC_ARG_WITH(system-libxml,
[Use libxml/libxslt already on system.]),,
[with_system_libxml=auto])
-AC_ARG_WITH(system-ucpp,
- AS_HELP_STRING([--with-system-ucpp],
- [Use ucpp already on system.]),,
- [])
-
AC_ARG_WITH(system-openldap,
AS_HELP_STRING([--with-system-openldap],
[Use the OpenLDAP LDAP SDK already on system.]),,
@@ -2738,11 +2733,6 @@ AC_ARG_WITH(os-version,
[For FreeBSD users, use this option to override the detected OSVERSION.]),
,)
-AC_ARG_WITH(idlc-cpp,
- AS_HELP_STRING([--with-idlc-cpp=<cpp/ucpp>],
- [Specify the C Preprocessor to use for idlc. Default is ucpp.]),
-,)
-
AC_ARG_WITH(parallelism,
AS_HELP_STRING([--with-parallelism],
[Number of jobs to run simultaneously during build. Parallel builds can
@@ -9058,40 +9048,6 @@ else
fi
dnl ===================================================================
-dnl Check for C preprocessor to use
-dnl ===================================================================
-AC_MSG_CHECKING([which C preprocessor to use in idlc])
-SYSTEM_UCPP_IS_GCC=
-if test -n "$with_idlc_cpp"; then
- AC_MSG_RESULT([$with_idlc_cpp])
- AC_PATH_PROG(SYSTEM_UCPP, $with_idlc_cpp)
- AC_MSG_CHECKING([if $with_idlc_cpp is GCC CPP])
- # ucpp will accept -v (to output version), warn about the others as unknown
- # and return 1 (due to -v)
- # gcc will accept -v (as verbose), --version (to output version) and -nostdinc
- # and return 0 (due to --version ) if all options are supported
- $SYSTEM_UCPP -v --version -nostdinc >/dev/null 2>/dev/null
- if test $? -eq 0; then
- SYSTEM_UCPP_IS_GCC=TRUE
- AC_MSG_RESULT([yes])
- else
- AC_MSG_RESULT([no])
- fi
-else
- AC_MSG_RESULT([ucpp])
- AC_MSG_CHECKING([which ucpp to use])
- if test -n "$with_system_ucpp" -a "$with_system_ucpp" != "no"; then
- AC_MSG_RESULT([external])
- AC_PATH_PROG(SYSTEM_UCPP, ucpp)
- else
- AC_MSG_RESULT([internal])
- BUILD_TYPE="$BUILD_TYPE UCPP"
- fi
-fi
-AC_SUBST(SYSTEM_UCPP)
-AC_SUBST(SYSTEM_UCPP_IS_GCC)
-
-dnl ===================================================================
dnl Check for epm (not needed for Windows)
dnl ===================================================================
AC_MSG_CHECKING([whether to enable EPM for packing])
diff --git a/download.lst b/download.lst
index 257c1248bd0e..fc18292db70a 100644
--- a/download.lst
+++ b/download.lst
@@ -240,8 +240,6 @@ export SWING_SHA256SUM := 64585ac36a81291a58269ec5347e7e3e2e8596dbacb9221015c208
export SWING_TARBALL := 35c94d2df8893241173de1d16b6034c0-swingExSrc.zip
export TWAIN_DSM_SHA256SUM := 82c818be771f242388457aa8c807e4b52aa84dc22b21c6c56184a6b4cbb085e6
export TWAIN_DSM_TARBALL := twaindsm_2.4.1.orig.tar.gz
-export UCPP_SHA256SUM := 983941d31ee8d366085cadf28db75eb1f5cb03ba1e5853b98f12f7f51c63b776
-export UCPP_TARBALL := 0168229624cfac409e766913506961a8-ucpp-1.3.2.tar.gz
export VISIO_SHA256SUM := 8faf8df870cb27b09a787a1959d6c646faa44d0d8ab151883df408b7166bea4c
export VISIO_TARBALL := libvisio-0.1.7.tar.xz
export WPD_SHA256SUM := 2465b0b662fdc5d4e3bebcdc9a79027713fb629ca2bff04a3c9251fdec42dd09
diff --git a/external/Module_external.mk b/external/Module_external.mk
index c8ad9ae110a6..ed8f4904798a 100644
--- a/external/Module_external.mk
+++ b/external/Module_external.mk
@@ -94,7 +94,6 @@ $(eval $(call gb_Module_add_moduledirs,external,\
$(call gb_Helper_optional,SKIA,skia) \
$(call gb_Helper_optional,STAROFFICE,libstaroffice) \
$(if $(filter WNT,$(OS)),twain_dsm) \
- $(call gb_Helper_optional,UCPP,ucpp) \
$(call gb_Helper_optional,VISIO,libvisio) \
$(call gb_Helper_optional,WPD,libwpd) \
$(call gb_Helper_optional,WPG,libwpg) \
diff --git a/external/ucpp/Executable_ucpp.mk b/external/ucpp/Executable_ucpp.mk
deleted file mode 100644
index a4be71c4901c..000000000000
--- a/external/ucpp/Executable_ucpp.mk
+++ /dev/null
@@ -1,33 +0,0 @@
-# -*- 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/.
-#
-
-$(eval $(call gb_Executable_Executable,ucpp))
-
-$(eval $(call gb_Executable_set_warnings_disabled,ucpp))
-
-$(eval $(call gb_Executable_use_unpacked,ucpp,ucpp))
-
-$(eval $(call gb_Executable_add_defs,ucpp,\
- -DNO_UCPP_BUF \
- -DUCPP_CONFIG \
- -DSTAND_ALONE \
-))
-
-$(eval $(call gb_Executable_add_generated_cobjects,ucpp,\
- UnpackedTarball/ucpp/assert \
- UnpackedTarball/ucpp/cpp \
- UnpackedTarball/ucpp/eval \
- UnpackedTarball/ucpp/hash \
- UnpackedTarball/ucpp/lexer \
- UnpackedTarball/ucpp/macro \
- UnpackedTarball/ucpp/mem \
- UnpackedTarball/ucpp/nhash \
-))
-
-# vim: set noet sw=4 ts=4:
diff --git a/external/ucpp/Makefile b/external/ucpp/Makefile
deleted file mode 100644
index 569ad8a0ba7a..000000000000
--- a/external/ucpp/Makefile
+++ /dev/null
@@ -1,14 +0,0 @@
-# -*- 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/.
-#
-
-module_directory:=$(dir $(realpath $(firstword $(MAKEFILE_LIST))))
-
-include $(module_directory)/../../solenv/gbuild/partial_build.mk
-
-# vim: set noet sw=4 ts=4:
diff --git a/external/ucpp/Module_ucpp.mk b/external/ucpp/Module_ucpp.mk
deleted file mode 100644
index dc4c02f5307b..000000000000
--- a/external/ucpp/Module_ucpp.mk
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- 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/.
-#
-
-$(eval $(call gb_Module_Module,ucpp))
-
-# if not cross-compiling or we need ucpp for ODK
-ifneq (,$(if $(CROSS_COMPILING),,T)$(filter ODK,$(BUILD_TYPE)))
-$(eval $(call gb_Module_add_targets,ucpp,\
- Executable_ucpp \
- UnpackedTarball_ucpp \
-))
-endif
-
-# vim: set noet sw=4 ts=4:
diff --git a/external/ucpp/README b/external/ucpp/README
deleted file mode 100644
index 9246c701a267..000000000000
--- a/external/ucpp/README
+++ /dev/null
@@ -1,3 +0,0 @@
-ucpp is a C99 preprocessor
-
-Used to be hosted at https://code.google.com/p/ucpp/ - not sure where it's gone
diff --git a/external/ucpp/UnpackedTarball_ucpp.mk b/external/ucpp/UnpackedTarball_ucpp.mk
deleted file mode 100644
index 04d7113b8513..000000000000
--- a/external/ucpp/UnpackedTarball_ucpp.mk
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- 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/.
-#
-
-$(eval $(call gb_UnpackedTarball_UnpackedTarball,ucpp))
-
-$(eval $(call gb_UnpackedTarball_set_tarball,ucpp,$(UCPP_TARBALL)))
-
-$(eval $(call gb_UnpackedTarball_set_patchlevel,ucpp,0))
-
-$(eval $(call gb_UnpackedTarball_add_patches,ucpp,\
- external/ucpp/ucpp.patch \
-))
-
-# vim: set noet sw=4 ts=4:
diff --git a/external/ucpp/ucpp.patch b/external/ucpp/ucpp.patch
deleted file mode 100644
index c9c4b92b7f79..000000000000
--- a/external/ucpp/ucpp.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- cpp.c
-+++ cpp.c
-@@ -2464,7 +2464,7 @@
- warning(-1, "unknown option '%s'", argv[i]);
- } else {
- if (filename != 0) {
-- error(-1, "spurious filename '%s'", argv[i]);
-+ error(-1, "spurious duplicate filename '%s' - vs. '%s' ", argv[i], filename);
- return 2;
- }
- filename = argv[i];
diff --git a/idlc/CustomTarget_parser_test.mk b/idlc/CustomTarget_parser_test.mk
deleted file mode 100644
index f8c7632bde67..000000000000
--- a/idlc/CustomTarget_parser_test.mk
+++ /dev/null
@@ -1,91 +0,0 @@
-# -*- 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/.
-#
-
-$(eval $(call gb_CustomTarget_CustomTarget,idlc/parser_test))
-
-# this target is phony to run it every time
-.PHONY : $(call gb_CustomTarget_get_target,idlc/parser_test)
-
-$(call gb_CustomTarget_get_target,idlc/parser_test) : \
- $(call gb_Executable_get_runtime_dependencies,idlc) \
- $(SRCDIR)/solenv/bin/exectest.pl \
- $(SRCDIR)/idlc/test/parser/attribute.tests \
- $(SRCDIR)/idlc/test/parser/constant.tests \
- $(SRCDIR)/idlc/test/parser/constructor.tests \
- $(SRCDIR)/idlc/test/parser/conversion.tests \
- $(SRCDIR)/idlc/test/parser/interfaceinheritance.tests \
- $(SRCDIR)/idlc/test/parser/methodoverload.tests \
- $(SRCDIR)/idlc/test/parser/polystruct.tests \
- $(SRCDIR)/idlc/test/parser/published.tests \
- $(SRCDIR)/idlc/test/parser/struct.tests \
- $(SRCDIR)/idlc/test/parser/typedef.tests \
- | $(call gb_CustomTarget_get_workdir,idlc/parser_test)/.dir
-ifneq ($(gb_SUPPRESS_TESTS),)
- @true
-else
- $(call gb_Helper_abbreviate_dirs,( \
- $(PERL) $(SRCDIR)/solenv/bin/exectest.pl \
- $(SRCDIR)/idlc/test/parser/attribute.tests \
- $(call gb_CustomTarget_get_workdir,idlc/parser_test)/in.idl 0 \
- $(call gb_Executable_get_command,idlc) \
- -O $(call gb_CustomTarget_get_workdir,idlc/parser_test) {} && \
- $(PERL) $(SRCDIR)/solenv/bin/exectest.pl \
- $(SRCDIR)/idlc/test/parser/constant.tests \
- $(call gb_CustomTarget_get_workdir,idlc/parser_test)/in.idl 0 \
- $(call gb_Executable_get_command,idlc) \
- -O $(call gb_CustomTarget_get_workdir,idlc/parser_test) {} && \
- $(PERL) $(SRCDIR)/solenv/bin/exectest.pl \
- $(SRCDIR)/idlc/test/parser/constructor.tests \
- $(call gb_CustomTarget_get_workdir,idlc/parser_test)/in.idl 0 \
- $(call gb_Executable_get_command,idlc) \
- -O $(call gb_CustomTarget_get_workdir,idlc/parser_test) {} && \
- $(PERL) $(SRCDIR)/solenv/bin/exectest.pl \
- $(SRCDIR)/idlc/test/parser/conversion.tests \
- $(call gb_CustomTarget_get_workdir,idlc/parser_test)/in.idl 0 \
- $(call gb_Executable_get_command,idlc) \
- -O $(call gb_CustomTarget_get_workdir,idlc/parser_test) {} && \
- $(PERL) $(SRCDIR)/solenv/bin/exectest.pl \
- $(SRCDIR)/idlc/test/parser/interfaceinheritance.tests \
- $(call gb_CustomTarget_get_workdir,idlc/parser_test)/in.idl 0 \
- $(call gb_Executable_get_command,idlc) \
- -O $(call gb_CustomTarget_get_workdir,idlc/parser_test) {} && \
- $(PERL) $(SRCDIR)/solenv/bin/exectest.pl \
- $(SRCDIR)/idlc/test/parser/methodoverload.tests \
- $(call gb_CustomTarget_get_workdir,idlc/parser_test)/in.idl 0 \
- $(call gb_Executable_get_command,idlc) \
- -O $(call gb_CustomTarget_get_workdir,idlc/parser_test) {} && \
- $(PERL) $(SRCDIR)/solenv/bin/exectest.pl \
- $(SRCDIR)/idlc/test/parser/oldstyle.tests \
- $(call gb_CustomTarget_get_workdir,idlc/parser_test)/in.idl 0 \
- $(call gb_Executable_get_command,idlc) \
- -O $(call gb_CustomTarget_get_workdir,idlc/parser_test) {} && \
- $(PERL) $(SRCDIR)/solenv/bin/exectest.pl \
- $(SRCDIR)/idlc/test/parser/polystruct.tests \
- $(call gb_CustomTarget_get_workdir,idlc/parser_test)/in.idl 0 \
- $(call gb_Executable_get_command,idlc) \
- -O $(call gb_CustomTarget_get_workdir,idlc/parser_test) {} && \
- $(PERL) $(SRCDIR)/solenv/bin/exectest.pl \
- $(SRCDIR)/idlc/test/parser/published.tests \
- $(call gb_CustomTarget_get_workdir,idlc/parser_test)/in.idl 0 \
- $(call gb_Executable_get_command,idlc) \
- -O $(call gb_CustomTarget_get_workdir,idlc/parser_test) {} && \
- $(PERL) $(SRCDIR)/solenv/bin/exectest.pl \
- $(SRCDIR)/idlc/test/parser/struct.tests \
- $(call gb_CustomTarget_get_workdir,idlc/parser_test)/in.idl 0 \
- $(call gb_Executable_get_command,idlc) \
- -O $(call gb_CustomTarget_get_workdir,idlc/parser_test) {} && \
- $(PERL) $(SRCDIR)/solenv/bin/exectest.pl \
- $(SRCDIR)/idlc/test/parser/typedef.tests \
- $(call gb_CustomTarget_get_workdir,idlc/parser_test)/in.idl 0 \
- $(call gb_Executable_get_command,idlc) \
- -O $(call gb_CustomTarget_get_workdir,idlc/parser_test) {}) \
- > $@.log 2>&1 || (cat $@.log && false))
-endif
-
-# vim: set noet sw=4 ts=4:
diff --git a/idlc/Executable_idlc.mk b/idlc/Executable_idlc.mk
deleted file mode 100644
index 8af0c40f111a..000000000000
--- a/idlc/Executable_idlc.mk
+++ /dev/null
@@ -1,81 +0,0 @@
-# -*- 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/.
-#
-
-$(eval $(call gb_Executable_Executable,idlc))
-
-$(eval $(call gb_Executable_set_include,idlc,\
- -I$(SRCDIR)/idlc/inc \
- -I$(SRCDIR)/idlc/source \
- $$(INCLUDE) \
-))
-
-$(eval $(call gb_Executable_use_externals,idlc,\
- boost_headers \
-))
-
-$(eval $(call gb_Executable_use_libraries,idlc,\
- reg \
- $(if $(filter TRUE,$(DISABLE_DYNLOADING)),store) \
- sal \
- salhelper \
-))
-
-$(eval $(call gb_Executable_add_grammars,idlc,\
- idlc/source/parser \
-))
-
-$(eval $(call gb_Executable_add_scanners,idlc,\
- idlc/source/scanner \
-))
-
-ifneq (,$(SYSTEM_UCPP))
-
-$(eval $(call gb_Executable_add_defs,idlc,\
- -DSYSTEM_UCPP \
- -DUCPP=\"file://$(SYSTEM_UCPP)\" \
-))
-
-ifneq ($(SYSTEM_UCPP_IS_GCC),)
-$(eval $(call gb_Executable_add_defs,idlc,\
- -DSYSTEM_UCPP_IS_GCC \
-))
-endif
-
-endif
-
-$(eval $(call gb_Executable_add_exception_objects,idlc,\
- idlc/source/idlcmain \
- idlc/source/idlc \
- idlc/source/idlccompile \
- idlc/source/idlcproduce \
- idlc/source/errorhandler \
- idlc/source/options \
- idlc/source/fehelper \
- idlc/source/astdeclaration \
- idlc/source/astscope \
- idlc/source/aststack \
- idlc/source/astdump \
- idlc/source/astinterface \
- idlc/source/aststruct \
- idlc/source/aststructinstance \
- idlc/source/astoperation \
- idlc/source/astconstant \
- idlc/source/astenum \
- idlc/source/astexpression \
- idlc/source/astservice \
-))
-
-# Without this, e.g. 'make clean; make CustomTarget_idlc/parser_test' may fail on Windows localized
-# to something other than listed in Impl_getTextEncodingData, because osl_getThreadTextEncoding()
-# returns Windows ACP, calling FullTextEncodingData ctor which loads the not-yet-built library
-$(call gb_Executable_add_runtime_dependencies,idlc, \
- $(call gb_CondLibSalTextenc,$(call gb_Library_get_target,sal_textenc)) \
-)
-
-# vim:set noet sw=4 ts=4:
diff --git a/idlc/Makefile b/idlc/Makefile
deleted file mode 100644
index 0997e628485b..000000000000
--- a/idlc/Makefile
+++ /dev/null
@@ -1,14 +0,0 @@
-# -*- 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/.
-#
-
-module_directory:=$(dir $(realpath $(firstword $(MAKEFILE_LIST))))
-
-include $(module_directory)/../solenv/gbuild/partial_build.mk
-
-# vim: set noet sw=4 ts=4:
diff --git a/idlc/Module_idlc.mk b/idlc/Module_idlc.mk
deleted file mode 100644
index a20d105cd829..000000000000
--- a/idlc/Module_idlc.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-# -*- 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/.
-#
-
-$(eval $(call gb_Module_Module,idlc))
-
-# if not cross-compiling or we need this for ODK
-ifneq (,$(if $(CROSS_COMPILING),,T)$(filter ODK,$(BUILD_TYPE)))
-
-$(eval $(call gb_Module_add_targets,idlc,\
- Executable_idlc \
-))
-
-$(eval $(call gb_Module_add_check_targets,idlc,\
- CustomTarget_parser_test \
-))
-
-endif
-
-# vim:set noet sw=4 ts=4:
diff --git a/idlc/README.md b/idlc/README.md
deleted file mode 100644
index 621a767b36ea..000000000000
--- a/idlc/README.md
+++ /dev/null
@@ -1,7 +0,0 @@
-# UNO IDL Compiler (idlc)
-
-Contains the UNO IDL compiler: `idlc`, depends on preprocessor: `ucpp`
-
-This compiler generates binary RDB fragments that can be assembled
-into a RDB (UNO type library) with the `regmerge` tool, as is done
-primarily in the `offapi` and `udkapi` directories.
diff --git a/idlc/inc/astattribute.hxx b/idlc/inc/astattribute.hxx
deleted file mode 100644
index b9a799f92db3..000000000000
--- a/idlc/inc/astattribute.hxx
+++ /dev/null
@@ -1,107 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#ifndef INCLUDED_IDLC_INC_ASTATTRIBUTE_HXX
-#define INCLUDED_IDLC_INC_ASTATTRIBUTE_HXX
-
-#include "astdeclaration.hxx"
-#include "astscope.hxx"
-
-#include <registry/types.hxx>
-#include <rtl/ustring.hxx>
-
-namespace typereg { class Writer; }
-
-class AstAttribute final : public AstDeclaration, public AstScope {
-public:
- AstAttribute(
- sal_uInt32 flags, AstType const * type, OString const & name,
- AstScope * scope):
- AstDeclaration(NT_attribute, name, scope),
- AstScope(NT_attribute), m_flags(flags), m_pType(type)
- {}
-
- AstAttribute(NodeType nodeType, sal_uInt32 flags, AstType const * pType, const OString& name, AstScope* pScope)
- : AstDeclaration(nodeType, name, pScope), AstScope(nodeType)
- , m_flags(flags)
- , m_pType(pType)
- {}
-
- void setExceptions(
- OUString const * getDoc, DeclList const * getExc,
- OUString const * setDoc, DeclList const * setExc)
- {
- if (getDoc != nullptr) {
- m_getDocumentation = *getDoc;
- }
- if (getExc != nullptr) {
- m_getExceptions = *getExc;
- }
- if (setDoc != nullptr) {
- m_setDocumentation = *setDoc;
- }
- if (setExc != nullptr) {
- m_setExceptions = *setExc;
- }
- }
-
- DeclList::size_type getGetExceptionCount() const
- { return m_getExceptions.size(); }
-
- DeclList::size_type getSetExceptionCount() const
- { return m_setExceptions.size(); }
-
- bool isReadonly() const
- { return ((m_flags & AF_READONLY) == AF_READONLY); }
- bool isOptional() const
- { return ((m_flags & AF_OPTIONAL) == AF_OPTIONAL); }
- bool isBound() const
- { return ((m_flags & AF_BOUND) == AF_BOUND); }
- bool isMayBeVoid() const
- { return ((m_flags & AF_MAYBEVOID) == AF_MAYBEVOID); }
- bool isConstrained() const
- { return ((m_flags & AF_CONSTRAINED) == AF_CONSTRAINED); }
- bool isTransient() const
- { return ((m_flags & AF_TRANSIENT) == AF_TRANSIENT); }
- bool isMayBeAmbiguous() const
- { return ((m_flags & AF_MAYBEAMBIGUOUS) == AF_MAYBEAMBIGUOUS); }
- bool isMayBeDefault() const
- { return ((m_flags & AF_MAYBEDEFAULT) == AF_MAYBEDEFAULT); }
- bool isRemoveable() const
- { return ((m_flags & AF_REMOVABLE) == AF_REMOVABLE); }
-
- void dumpBlob(
- typereg::Writer & rBlob, sal_uInt16 index, sal_uInt16 * methodIndex) const;
-
-private:
- void dumpExceptions(
- typereg::Writer & writer, OUString const & documentation,
- DeclList const & exceptions, RTMethodMode flags,
- sal_uInt16 * methodIndex) const;
-
- const sal_uInt32 m_flags;
- AstType const * m_pType;
- OUString m_getDocumentation;
- DeclList m_getExceptions;
- OUString m_setDocumentation;
- DeclList m_setExceptions;
-};
-
-#endif // INCLUDED_IDLC_INC_ASTATTRIBUTE_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/inc/astbasetype.hxx b/idlc/inc/astbasetype.hxx
deleted file mode 100644
index 0b488c8006fd..000000000000
--- a/idlc/inc/astbasetype.hxx
+++ /dev/null
@@ -1,50 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#pragma once
-
-#include "asttype.hxx"
-#include "astexpression.hxx"
-
-
-class AstBaseType final : public AstType
-{
-public:
- AstBaseType(const ExprType type, const OString& name, AstScope* pScope)
- : AstType(NT_predefined, name, pScope)
- , m_exprType(type)
- {}
-
- virtual bool isUnsigned() const override {
- switch (m_exprType) {
- case ET_ushort:
- case ET_ulong:
- case ET_uhyper:
- return true;
- default:
- return false;
- }
- }
-
- ExprType getExprType() const
- { return m_exprType; }
-private:
- const ExprType m_exprType;
-};
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/inc/astconstant.hxx b/idlc/inc/astconstant.hxx
deleted file mode 100644
index fb8b417f4073..000000000000
--- a/idlc/inc/astconstant.hxx
+++ /dev/null
@@ -1,50 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#ifndef INCLUDED_IDLC_INC_ASTCONSTANT_HXX
-#define INCLUDED_IDLC_INC_ASTCONSTANT_HXX
-
-#include "astdeclaration.hxx"
-#include "astexpression.hxx"
-
-namespace typereg { class Writer; }
-
-class AstConstant final : public AstDeclaration
-{
-public:
- AstConstant(const ExprType type, const NodeType nodeType,
- AstExpression* pExpr, const OString& name, AstScope* pScope);
- AstConstant(const ExprType type, AstExpression* pExpr,
- const OString& name, AstScope* pScope);
- virtual ~AstConstant() override;
-
- AstExpression* getConstValue()
- { return m_pConstValue; }
- ExprType getConstValueType() const
- { return m_constValueType; }
-
- bool dumpBlob(
- typereg::Writer & rBlob, sal_uInt16 index, bool published);
-private:
- AstExpression* m_pConstValue;
- const ExprType m_constValueType;
-};
-
-#endif // INCLUDED_IDLC_INC_ASTCONSTANT_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/inc/astconstants.hxx b/idlc/inc/astconstants.hxx
deleted file mode 100644
index 6add23a45359..000000000000
--- a/idlc/inc/astconstants.hxx
+++ /dev/null
@@ -1,35 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#ifndef INCLUDED_IDLC_INC_ASTCONSTANTS_HXX
-#define INCLUDED_IDLC_INC_ASTCONSTANTS_HXX
-
-#include "astmodule.hxx"
-
-class AstConstants final : public AstModule
-{
-public:
- AstConstants(const OString& name, AstScope* pScope)
- : AstModule(NT_constants, name, pScope)
- {
- }
-};
-
-#endif // INCLUDED_IDLC_INC_ASTCONSTANTS_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/inc/astdeclaration.hxx b/idlc/inc/astdeclaration.hxx
deleted file mode 100644
index 0707dbc57bb0..000000000000
--- a/idlc/inc/astdeclaration.hxx
+++ /dev/null
@@ -1,136 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#ifndef INCLUDED_IDLC_INC_ASTDECLARATION_HXX
-#define INCLUDED_IDLC_INC_ASTDECLARATION_HXX
-
-#include "idlc.hxx"
-#include <registry/registry.hxx>
-
-class AstScope;
-
-// Enum defining the different kinds of Ast nodes
-enum NodeType
-{
- NT_service, // Denotes a service
- NT_interface_member, // Denotes an interface which is exported from object
- NT_service_member, // Denotes a service which is exported from object
- NT_observes, // Denotes an observed interface
- NT_needs, // Denotes a needed service
- NT_module, // Denotes a module
- NT_root, // Denotes the root of AST
- NT_interface, // Denotes an interface
- NT_constants, // Denotes a constant group
- NT_const, // Denotes a constant
- NT_exception, // Denotes an exception
- NT_attribute, // Denotes an attribute
- NT_property, // Denotes a property
- NT_operation, // Denotes an operation
- NT_parameter, // Denotes an op. parameter
- NT_struct, // Denotes either a plain struct type, or a
- // polymorphic struct type template
- NT_type_parameter, // Denotes a type parameter of a polymorphic struct
- // type template
- NT_instantiated_struct, // Denotes an instantiated polymorphic struct type
- NT_member, // Denotes a member in structure, exception
- NT_enum, // Denotes an enumeration
- NT_enum_val, // Denotes an enum. value
- NT_sequence, // Denotes an IDL sequence
- NT_typedef, // Denotes a typedef
- NT_predefined, // Denotes a predefined type
- NT_singleton // Denotes a singleton
-};
-
-class AstDeclaration
-{
-public:
- // Constructors
- AstDeclaration(NodeType type, const OString& name, AstScope* pScope);
- virtual ~AstDeclaration();
-
- AstDeclaration(AstDeclaration const &) = default;
- AstDeclaration(AstDeclaration &&) = default;
- AstDeclaration & operator =(AstDeclaration const &) = default;
- AstDeclaration & operator =(AstDeclaration &&) = default;
-
- // Data access
- const OString& getLocalName() const
- { return m_localName; }
- const OString& getScopedName() const
- { return m_scopedName; }
- const OString& getFullName() const
- { return m_fullName; }
- virtual const char* getRelativName() const
- { return m_fullName.getStr()+1; }
- AstScope* getScope()
- { return m_pScope; }
- const AstScope* getScope() const
- { return m_pScope; }
- NodeType getNodeType() const
- { return m_nodeType; }
- bool isInMainfile() const
- { return m_bInMainFile; }
- void setInMainfile(bool bInMainfile)
- { m_bInMainFile = bInMainfile; }
- bool isImported() const
- { return m_bImported; }
- void setImported(bool bImported)
- { m_bImported = bImported; }
- sal_Int32 getLineNumber() const
- { return m_lineNumber; }
- void setLineNumber(sal_Int32 lineNumber)
- { m_lineNumber = lineNumber; }
- const OString& getFileName() const
- { return m_fileName; }
- void setFileName(const OString& rFileName)
- { m_fileName = rFileName; }
- const OUString& getDocumentation() const
- { return m_documentation; }
- void setDocumentation(const OUString& rDocumentation)
- { m_documentation = rDocumentation; }
-
- virtual bool isType() const;
-
- bool hasAncestor(AstDeclaration* pDecl);
-
- void setPublished() { m_bPublished = true; }
- bool isPublished() const { return m_bPublished; }
-
- virtual bool dump(RegistryKey& rKey);
-
- bool isPredefined() const { return m_bPredefined; }
- void setPredefined(bool bPredefined);
-
-protected:
- OString m_localName;
- OString m_scopedName; // full qualified name
- OString m_fullName; // full qualified name with '/' as separator
- AstScope* m_pScope;
- NodeType m_nodeType;
- bool m_bImported; // imported ?
- bool m_bInMainFile; // defined in main file
- bool m_bPublished;
- bool m_bPredefined;
- sal_Int32 m_lineNumber; // line number defined in
- OString m_fileName; // fileName defined in
- OUString m_documentation; // fileName defined in
-};
-
-#endif // INCLUDED_IDLC_INC_ASTDECLARATION_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/inc/astenum.hxx b/idlc/inc/astenum.hxx
deleted file mode 100644
index dc89d430adb2..000000000000
--- a/idlc/inc/astenum.hxx
+++ /dev/null
@@ -1,45 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#ifndef INCLUDED_IDLC_INC_ASTENUM_HXX
-#define INCLUDED_IDLC_INC_ASTENUM_HXX
-
-#include "asttype.hxx"
-#include "astscope.hxx"
-#include "astconstant.hxx"
-
-class AstEnum final : public AstType, public AstScope
-{
-public:
- AstEnum(const OString& name, AstScope* pScope);
-
- virtual ~AstEnum() override;
-
- sal_Int32 getEnumValueCount() { return m_enumValueCount++; }
-
- AstConstant* checkValue(AstExpression* pExpr);
-
- virtual bool dump(RegistryKey& rKey) override;
-
-private:
- sal_Int32 m_enumValueCount;
-};
-
-#endif // INCLUDED_IDLC_INC_ASTENUM_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/inc/astexception.hxx b/idlc/inc/astexception.hxx
deleted file mode 100644
index 6c2d549bc9a2..000000000000
--- a/idlc/inc/astexception.hxx
+++ /dev/null
@@ -1,35 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#ifndef INCLUDED_IDLC_INC_ASTEXCEPTION_HXX
-#define INCLUDED_IDLC_INC_ASTEXCEPTION_HXX
-
-#include "aststruct.hxx"
-
-class AstException final : public AstStruct
-{
-public:
- AstException(const OString& name, AstException const* pBaseType, AstScope* pScope)
- : AstStruct(NT_exception, name, pBaseType, pScope)
- {
- }
-};
-
-#endif // INCLUDED_IDLC_INC_ASTEXCEPTION_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/inc/astexpression.hxx b/idlc/inc/astexpression.hxx
deleted file mode 100644
index 05d20baa51cd..000000000000
--- a/idlc/inc/astexpression.hxx
+++ /dev/null
@@ -1,139 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#ifndef INCLUDED_IDLC_INC_ASTEXPRESSION_HXX
-#define INCLUDED_IDLC_INC_ASTEXPRESSION_HXX
-
-#include <sal/config.h>
-
-#include <memory>
-
-#include "idlc.hxx"
-#include <optional>
-
-// Enum to define all the different operators to combine expressions
-enum class ExprComb
-{
- Add, // '+'
- Minus, // '-'
- Mul, // '*'
- Div, // '/'
- Mod, // '%'
- Or, // '|'
- Xor, // '^'
- And, // '&'
- Left, // '<<'
- Right, // '>>'
- UPlus, // unary '+'
- UMinus, // unary '-'
- NONE, // No operator (missing)
- Symbol // a symbol (function or constant name)
-};
-
-// Enum to define expression type
-enum ExprType
-{
- ET_short, // Expression value is short
- ET_ushort, // Expression value is unsigned short
- ET_long, // Expression value is long
- ET_ulong, // Expression value is unsigned long
- ET_hyper, // Expression value is hyper (64 bit)
- ET_uhyper, // Expression value is unsigned hyper
- ET_float, // Expression value is 32-bit float
- ET_double, // Expression value is 64-bit float
- ET_char, // Expression value is char
- ET_byte, // Expression value is byte
- ET_boolean, // Expression value is boolean
- ET_string, // Expression value is char *
- ET_any, // Expression value is any of above
- ET_void, // Expression value is void (absent)
- ET_type, // Expression value is type
- ET_none // Expression value is missing
-};
-
-// Structure to describe value of constant expression and its type
-struct AstExprValue
-{
- union
- {
- sal_uInt8 byval; // Contains byte expression value
- sal_Int16 sval; // Contains short expression value
- sal_uInt16 usval; // Contains unsigned short expr value
- sal_Int32 lval; // Contains long expression value
- sal_uInt32 ulval; // Contains unsigned long expr value
- sal_Int64 hval; // Contains hyper expression value
- sal_uInt64 uhval; // Contains unsigned hyper expr value
- bool bval; // Contains boolean expression value
- float fval; // Contains 32-bit float expr value
- double dval; // Contains 64-bit float expr value
- } u;
- ExprType et;
-};
-
-const char* exprTypeToString(ExprType t);
-
-class AstExpression final
-{
-public:
- // Constructor(s)
- AstExpression(ExprComb c, AstExpression *pExpr1, AstExpression *pExpr2);
-
- AstExpression(sal_Int32 l);
- AstExpression(sal_Int32 l, ExprType et);
- AstExpression(sal_Int64 h);
- AstExpression(sal_uInt64 uh);
- AstExpression(double d);
- AstExpression(OString* scopedName);
-
- ~AstExpression();
-
- // Data Accessors
- AstExprValue* getExprValue()
- { return m_exprValue.get(); }
-
- // Evaluation and value coercion
- bool coerce(ExprType type);
-
- // Evaluate then store value inside this AstExpression
- void evaluate();
-
- // Compare LONG AstExpression values
- bool compareLong(AstExpression *pExpr);
-
- OString toString();
-private:
- // Evaluate different sets of operators
- std::unique_ptr<AstExprValue> eval_bin_op();
- std::unique_ptr<AstExprValue> eval_bit_op();
- std::unique_ptr<AstExprValue> eval_un_op();
- std::unique_ptr<AstExprValue> eval_symbol();
-
- ExprComb m_combOperator;
- std::unique_ptr<AstExpression>
- m_subExpr1;
- std::unique_ptr<AstExpression>
- m_subExpr2;
- std::unique_ptr<AstExprValue>
- m_exprValue;
- std::optional<OString>
- m_xSymbolicName;
-};
-
-#endif // INCLUDED_IDLC_INC_ASTEXPRESSION_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/inc/astinterface.hxx b/idlc/inc/astinterface.hxx
deleted file mode 100644
index 03c5f22f5f37..000000000000
--- a/idlc/inc/astinterface.hxx
+++ /dev/null
@@ -1,129 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#ifndef INCLUDED_IDLC_INC_ASTINTERFACE_HXX
-#define INCLUDED_IDLC_INC_ASTINTERFACE_HXX
-
-#include "asttype.hxx"
-#include "astscope.hxx"
-#include "inheritedinterface.hxx"
-
-#include <map>
-#include <vector>
-
-class AstInterface : public AstType
- , public AstScope
-{
-public:
- typedef std::vector< InheritedInterface > InheritedInterfaces;
-
- struct DoubleMemberDeclaration {
- AstDeclaration const * first;
- AstDeclaration const * second;
- };
-
- typedef std::vector< DoubleMemberDeclaration > DoubleMemberDeclarations;
-
- struct DoubleDeclarations {
- std::vector< AstInterface const * > interfaces;
- DoubleMemberDeclarations members;
- };
-
- AstInterface(
- const OString& name, AstInterface const * pInherits,
- AstScope* pScope);
- virtual ~AstInterface() override;
-
- AstInterface(AstInterface const &) = default;
- AstInterface(AstInterface &&) = default;
- AstInterface & operator =(AstInterface const &) = default;
- AstInterface & operator =(AstInterface &&) = default;
-
- InheritedInterfaces const & getAllInheritedInterfaces() const
- { return m_inheritedInterfaces; }
-
- bool hasMandatoryInheritedInterfaces() const
- { return m_mandatoryInterfaces > 0; }
-
- void setDefined() { m_bIsDefined = true; }
- bool isDefined() const
- { return m_bIsDefined; }
-
- bool usesSingleInheritance() const { return m_bSingleInheritance; }
-
- DoubleDeclarations checkInheritedInterfaceClashes(
- AstInterface const * ifc, bool optional) const;
-
- void addInheritedInterface(
- AstType const * ifc, bool optional,
- OUString const & documentation);
-
- DoubleMemberDeclarations checkMemberClashes(
- AstDeclaration const * member) const;
-
- void addMember(AstDeclaration /*TODO: const*/ * member);
-
- void forwardDefined(AstInterface const & def);
-
- virtual bool dump(RegistryKey& rKey) override;
-
-private:
- enum InterfaceKind {
- INTERFACE_INDIRECT_OPTIONAL, INTERFACE_DIRECT_OPTIONAL,
- INTERFACE_INDIRECT_MANDATORY, INTERFACE_DIRECT_MANDATORY };
-
- struct VisibleMember {
- explicit VisibleMember(AstDeclaration const * theMandatory = nullptr):
- mandatory(theMandatory) {}
-
- typedef std::map< OString, AstDeclaration const * > Optionals;
-
- AstDeclaration const * mandatory;
- Optionals optionals;
- };
-
- typedef std::map< OString, InterfaceKind > VisibleInterfaces;
- typedef std::map< OString, VisibleMember > VisibleMembers;
-
- void checkInheritedInterfaceClashes(
- DoubleDeclarations & doubleDeclarations,
- std::set< OString > & seenInterfaces, AstInterface const * ifc,
- bool direct, bool optional, bool mainOptional) const;
-
- void checkMemberClashes(
- DoubleMemberDeclarations & doubleMembers, AstDeclaration const * member,
- bool checkOptional) const;
-
- void addVisibleInterface(
- AstInterface const * ifc, bool direct, bool optional);
-
- void addOptionalVisibleMembers(AstInterface const * ifc);
-
- bool increment(sal_uInt16 * counter, char const * sort) const;
-
- InheritedInterfaces m_inheritedInterfaces;
- InheritedInterfaces::size_type m_mandatoryInterfaces;
- bool m_bIsDefined;
- bool m_bSingleInheritance;
- VisibleInterfaces m_visibleInterfaces;
- VisibleMembers m_visibleMembers;
-};
-
-#endif // INCLUDED_IDLC_INC_ASTINTERFACE_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/inc/astinterfacemember.hxx b/idlc/inc/astinterfacemember.hxx
deleted file mode 100644
index 0e290e1875d7..000000000000
--- a/idlc/inc/astinterfacemember.hxx
+++ /dev/null
@@ -1,45 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#ifndef INCLUDED_IDLC_INC_ASTINTERFACEMEMBER_HXX
-#define INCLUDED_IDLC_INC_ASTINTERFACEMEMBER_HXX
-
-#include "astinterface.hxx"
-
-class AstInterfaceMember final : public AstDeclaration
-{
-public:
- AstInterfaceMember(const sal_uInt32 flags, AstInterface* pRealInterface,
- const OString& name, AstScope* pScope)
- : AstDeclaration(NT_interface_member, name, pScope)
- , m_flags(flags)
- , m_pRealInterface(pRealInterface)
- {}
-
- AstInterface* getRealInterface()
- { return m_pRealInterface; }
- bool isOptional() const
- { return ((m_flags & AF_OPTIONAL) == AF_OPTIONAL); }
-private:
- const sal_uInt32 m_flags;
- AstInterface* m_pRealInterface;
-};
-
-#endif // INCLUDED_IDLC_INC_ASTINTERFACEMEMBER_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/inc/astmember.hxx b/idlc/inc/astmember.hxx
deleted file mode 100644
index 43597d125d87..000000000000
--- a/idlc/inc/astmember.hxx
+++ /dev/null
@@ -1,48 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#ifndef INCLUDED_IDLC_INC_ASTMEMBER_HXX
-#define INCLUDED_IDLC_INC_ASTMEMBER_HXX
-
-#include "astdeclaration.hxx"
-
-class AstScope;
-class AstType;
-
-class AstMember: public AstDeclaration {
-public:
- AstMember(
- AstType const * pType, OString const & name, AstScope * pScope):
- AstDeclaration(NT_member, name, pScope), m_pType(pType) {}
-
- AstType const * getType() const { return m_pType; }
-
-protected:
- AstMember(
- NodeType type, AstType const * pType, OString const & name,
- AstScope * pScope):
- AstDeclaration(type, name, pScope), m_pType(pType) {}
-
-private:
- AstType const * m_pType;
-};
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/inc/astmodule.hxx b/idlc/inc/astmodule.hxx
deleted file mode 100644
index 6178cfbb63da..000000000000
--- a/idlc/inc/astmodule.hxx
+++ /dev/null
@@ -1,44 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#ifndef INCLUDED_IDLC_INC_ASTMODULE_HXX
-#define INCLUDED_IDLC_INC_ASTMODULE_HXX
-
-#include "astdeclaration.hxx"
-#include "astscope.hxx"
-
-class AstModule : public AstDeclaration, public AstScope
-{
-public:
- AstModule(const OString& name, AstScope* pScope)
- : AstDeclaration(NT_module, name, pScope)
- , AstScope(NT_module)
- {
- }
- AstModule(NodeType type, const OString& name, AstScope* pScope)
- : AstDeclaration(type, name, pScope)
- , AstScope(type)
- {
- }
-
- virtual bool dump(RegistryKey& rKey) override;
-};
-
-#endif // INCLUDED_IDLC_INC_ASTMODULE_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/inc/astneeds.hxx b/idlc/inc/astneeds.hxx
deleted file mode 100644
index 13d2dbbef197..000000000000
--- a/idlc/inc/astneeds.hxx
+++ /dev/null
@@ -1,41 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#ifndef INCLUDED_IDLC_INC_ASTNEEDS_HXX
-#define INCLUDED_IDLC_INC_ASTNEEDS_HXX
-
-#include "astservice.hxx"
-
-class AstNeeds final : public AstDeclaration
-{
-public:
- AstNeeds(AstService* pRealService, const OString& name, AstScope* pScope)
- : AstDeclaration(NT_needs, name, pScope)
- , m_pRealService(pRealService)
- {
- }
-
- AstService* getRealService() { return m_pRealService; }
-
-private:
- AstService* m_pRealService;
-};
-
-#endif // INCLUDED_IDLC_INC_ASTNEEDS_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/inc/astobserves.hxx b/idlc/inc/astobserves.hxx
deleted file mode 100644
index 11bb5a6770b3..000000000000
--- a/idlc/inc/astobserves.hxx
+++ /dev/null
@@ -1,41 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#ifndef INCLUDED_IDLC_INC_ASTOBSERVES_HXX
-#define INCLUDED_IDLC_INC_ASTOBSERVES_HXX
-
-#include "astinterface.hxx"
-
-class AstObserves final : public AstDeclaration
-{
-public:
- AstObserves(AstInterface* pRealInterface, const OString& name, AstScope* pScope)
- : AstDeclaration(NT_observes, name, pScope)
- , m_pRealInterface(pRealInterface)
- {
- }
-
- AstInterface* getRealInterface() { return m_pRealInterface; }
-
-private:
- AstInterface* m_pRealInterface;
-};
-
-#endif // INCLUDED_IDLC_INC_ASTOBSERVES_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/inc/astoperation.hxx b/idlc/inc/astoperation.hxx
deleted file mode 100644
index e3e0335c968e..000000000000
--- a/idlc/inc/astoperation.hxx
+++ /dev/null
@@ -1,54 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#ifndef INCLUDED_IDLC_INC_ASTOPERATION_HXX
-#define INCLUDED_IDLC_INC_ASTOPERATION_HXX
-
-#include "astdeclaration.hxx"
-#include "astscope.hxx"
-
-namespace typereg { class Writer; }
-
-class AstType;
-
-class AstOperation final : public AstDeclaration
- , public AstScope
-{
-public:
- AstOperation(AstType const * pReturnType, const OString& name, AstScope* pScope)
- : AstDeclaration(NT_operation, name, pScope)
- , AstScope(NT_operation)
- , m_pReturnType(pReturnType)
- {}
-
- bool isVariadic() const;
-
- bool isConstructor() const { return m_pReturnType == nullptr; }
-
- void setExceptions(DeclList const * pExceptions);
-
- void dumpBlob(typereg::Writer & rBlob, sal_uInt16 index);
-
-private:
- AstType const * m_pReturnType;
- DeclList m_exceptions;
-};
-
-#endif // INCLUDED_IDLC_INC_ASTOPERATION_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/inc/astparameter.hxx b/idlc/inc/astparameter.hxx
deleted file mode 100644
index cfee3426079b..000000000000
--- a/idlc/inc/astparameter.hxx
+++ /dev/null
@@ -1,46 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#ifndef INCLUDED_IDLC_INC_ASTPARAMETER_HXX
-#define INCLUDED_IDLC_INC_ASTPARAMETER_HXX
-
-#include "astmember.hxx"
-
-enum Direction { DIR_IN, DIR_OUT, DIR_INOUT };
-
-class AstParameter final : public AstMember {
-public:
- AstParameter(
- Direction direction, bool rest, AstType const * type,
- OString const & name, AstScope * scope):
- AstMember(NT_parameter, type, name, scope), m_direction(direction),
- m_rest(rest) {}
-
- Direction getDirection() const { return m_direction; }
-
- bool isRest() const { return m_rest; }
-
-private:
- Direction m_direction;
- bool m_rest;
-};
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/inc/astscope.hxx b/idlc/inc/astscope.hxx
deleted file mode 100644
index be7b03828c14..000000000000
--- a/idlc/inc/astscope.hxx
+++ /dev/null
@@ -1,73 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#ifndef INCLUDED_IDLC_INC_ASTSCOPE_HXX
-#define INCLUDED_IDLC_INC_ASTSCOPE_HXX
-
-#include <sal/config.h>
-
-#include <string_view>
-#include "idlc.hxx"
-#include "astdeclaration.hxx"
-#include "astexpression.hxx"
-
-class AstExpression;
-
-class AstScope
-{
-public:
- AstScope(NodeType nodeType);
- virtual ~AstScope();
-
- AstScope(AstScope const&) = default;
- AstScope(AstScope&&) = default;
- AstScope& operator=(AstScope const&) = default;
- AstScope& operator=(AstScope&&) = default;
-
- NodeType getScopeNodeType() const { return m_nodeType; }
-
- AstDeclaration* addDeclaration(AstDeclaration* pDecl);
-
- sal_uInt32 nMembers() const { return static_cast<sal_uInt32>(m_declarations.size()); }
- DeclList::const_iterator getIteratorBegin() const { return m_declarations.begin(); }
- DeclList::const_iterator getIteratorEnd() const { return m_declarations.end(); }
- sal_uInt16 getNodeCount(NodeType nType) const;
-
- // Name look up mechanism
- AstDeclaration* lookupByName(const OString& scopedName);
- // Look up the identifier 'name' specified only in the local scope
- AstDeclaration* lookupByNameLocal(std::string_view name) const;
-
- AstDeclaration* lookupInInherited(const OString& scopedName) const;
-
- // Look up a predefined type by its ExprType
- AstDeclaration* lookupPrimitiveType(ExprType type);
-
- AstDeclaration* lookupForAdd(AstDeclaration const* pDecl) const;
-
-protected:
- AstDeclaration const* getLast() const { return m_declarations.back(); }
-
-private:
- DeclList m_declarations;
- NodeType m_nodeType;
-};
-
-#endif // INCLUDED_IDLC_INC_ASTSCOPE_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/inc/astsequence.hxx b/idlc/inc/astsequence.hxx
deleted file mode 100644
index e8a2850e23f4..000000000000
--- a/idlc/inc/astsequence.hxx
+++ /dev/null
@@ -1,49 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#ifndef INCLUDED_IDLC_INC_ASTSEQUENCE_HXX
-#define INCLUDED_IDLC_INC_ASTSEQUENCE_HXX
-
-#include "asttype.hxx"
-
-class AstSequence final : public AstType
-{
-public:
- AstSequence(AstType const* pMemberType, AstScope* pScope)
- : AstType(NT_sequence, OString::Concat("[]") + pMemberType->getScopedName(), pScope)
- , m_pMemberType(pMemberType)
- {
- }
-
- AstType const* getMemberType() const { return m_pMemberType; }
-
- virtual bool isUnsigned() const override
- {
- return m_pMemberType != nullptr && m_pMemberType->isUnsigned();
- }
-
- virtual const char* getRelativName() const override;
-
-private:
- AstType const* m_pMemberType;
- mutable std::optional<OString> m_xRelativName;
-};
-
-#endif // INCLUDED_IDLC_INC_ASTSEQUENCE_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/inc/astservice.hxx b/idlc/inc/astservice.hxx
deleted file mode 100644
index 4ad769cd5e70..000000000000
--- a/idlc/inc/astservice.hxx
+++ /dev/null
@@ -1,61 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#ifndef INCLUDED_IDLC_INC_ASTSERVICE_HXX
-#define INCLUDED_IDLC_INC_ASTSERVICE_HXX
-
-#include "astdeclaration.hxx"
-#include "astscope.hxx"
-
-class AstService final : public AstDeclaration
- , public AstScope
-{
-public:
- AstService(const OString& name, AstScope* pScope)
- : AstDeclaration(NT_service, name, pScope)
- , AstScope(NT_service)
- , m_singleInterfaceBasedService(false)
- , m_defaultConstructor(false)
- {}
- AstService(const NodeType type, const OString& name, AstScope* pScope)
- : AstDeclaration(type, name, pScope)
- , AstScope(type)
- , m_singleInterfaceBasedService(false)
- , m_defaultConstructor(false)
- {}
-
- virtual bool dump(RegistryKey& rKey) override;
-
- void setSingleInterfaceBasedService()
- { m_singleInterfaceBasedService = true; }
-
- void setDefaultConstructor(bool b) { m_defaultConstructor = b; }
-
- bool isSingleInterfaceBasedService() const
- { return m_singleInterfaceBasedService; }
-
- bool checkLastConstructor() const;
-
-private:
- bool m_singleInterfaceBasedService;
- bool m_defaultConstructor;
-};
-
-#endif // INCLUDED_IDLC_INC_ASTSERVICE_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/inc/astservicemember.hxx b/idlc/inc/astservicemember.hxx
deleted file mode 100644
index 380449b25529..000000000000
--- a/idlc/inc/astservicemember.hxx
+++ /dev/null
@@ -1,45 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#ifndef INCLUDED_IDLC_INC_ASTSERVICEMEMBER_HXX
-#define INCLUDED_IDLC_INC_ASTSERVICEMEMBER_HXX
-
-#include "astservice.hxx"
-
-class AstServiceMember final : public AstDeclaration
-{
-public:
- AstServiceMember(const sal_uInt32 flags, AstService* pRealService,
- const OString& name, AstScope* pScope)
- : AstDeclaration(NT_service_member, name, pScope)
- , m_flags(flags)
- , m_pRealService(pRealService)
- {}
-
- AstService* getRealService()
- { return m_pRealService; }
- bool isOptional() const
- { return ((m_flags & AF_OPTIONAL) == AF_OPTIONAL); }
-private:
- const sal_uInt32 m_flags;
- AstService* m_pRealService;
-};
-
-#endif // INCLUDED_IDLC_INC_ASTSERVICEMEMBER_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/inc/aststack.hxx b/idlc/inc/aststack.hxx
deleted file mode 100644
index d36bd4e48e40..000000000000
--- a/idlc/inc/aststack.hxx
+++ /dev/null
@@ -1,46 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#pragma once
-
-#include <sal/types.h>
-#include <vector>
-
-class AstScope;
-
-class AstStack final
-{
-public:
- AstStack();
- ~AstStack();
-
- sal_uInt32 depth() const { return m_stack.size(); }
- AstScope* top();
- AstScope* bottom();
- AstScope* nextToTop();
- AstScope* topNonNull();
- AstStack* push(AstScope* pScope);
- void pop();
- void clear();
-
-private:
- std::vector<AstScope*> m_stack;
-};
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/inc/aststruct.hxx b/idlc/inc/aststruct.hxx
deleted file mode 100644
index 5e037d1b5a72..000000000000
--- a/idlc/inc/aststruct.hxx
+++ /dev/null
@@ -1,62 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#ifndef INCLUDED_IDLC_INC_ASTSTRUCT_HXX
-#define INCLUDED_IDLC_INC_ASTSTRUCT_HXX
-
-#include <sal/config.h>
-
-#include <string_view>
-
-#include "asttype.hxx"
-#include "astscope.hxx"
-#include "idlctypes.hxx"
-
-class AstStruct;
-
-class AstStruct : public AstType
- , public AstScope
-{
-public:
- AstStruct(
- const OString& name,
- std::vector< OString > const & typeParameters,
- AstStruct const* pBaseType, AstScope* pScope);
-
- AstStruct(const NodeType type,
- const OString& name,
- AstStruct const* pBaseType,
- AstScope* pScope);
- virtual ~AstStruct() override;
-
- std::size_t getTypeParameterCount() const
- { return m_typeParameters.size(); }
-
- AstDeclaration const * findTypeParameter(std::string_view name) const;
-
- virtual bool isType() const override;
-
- virtual bool dump(RegistryKey& rKey) override;
-private:
- AstStruct const* m_pBaseType;
- std::vector<std::unique_ptr<AstDeclaration>> m_typeParameters;
-};
-
-#endif // INCLUDED_IDLC_INC_ASTSTRUCT_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/inc/aststructinstance.hxx b/idlc/inc/aststructinstance.hxx
deleted file mode 100644
index 1357aa351970..000000000000
--- a/idlc/inc/aststructinstance.hxx
+++ /dev/null
@@ -1,49 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#ifndef INCLUDED_IDLC_INC_ASTSTRUCTINSTANCE_HXX
-#define INCLUDED_IDLC_INC_ASTSTRUCTINSTANCE_HXX
-
-#include "asttype.hxx"
-#include "idlctypes.hxx"
-
-class AstScope;
-
-class AstStructInstance final : public AstType {
-public:
- AstStructInstance(
- AstType const * typeTemplate, DeclList const * typeArguments,
- AstScope * scope);
-
- AstType const * getTypeTemplate() const { return m_typeTemplate; }
-
- DeclList::const_iterator getTypeArgumentsBegin() const
- { return m_typeArguments.begin(); }
-
- DeclList::const_iterator getTypeArgumentsEnd() const
- { return m_typeArguments.end(); }
-
-private:
- AstType const * m_typeTemplate;
- DeclList m_typeArguments;
-};
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/inc/asttype.hxx b/idlc/inc/asttype.hxx
deleted file mode 100644
index 8627429cd01a..000000000000
--- a/idlc/inc/asttype.hxx
+++ /dev/null
@@ -1,37 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#ifndef INCLUDED_IDLC_INC_ASTTYPE_HXX
-#define INCLUDED_IDLC_INC_ASTTYPE_HXX
-
-#include "astdeclaration.hxx"
-
-class AstType : public AstDeclaration
-{
-public:
- AstType(const NodeType type, const OString& name, AstScope* pScope)
- : AstDeclaration(type, name, pScope)
- {
- }
-
- virtual bool isUnsigned() const { return false; }
-};
-
-#endif // INCLUDED_IDLC_INC_ASTTYPE_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/inc/asttypedef.hxx b/idlc/inc/asttypedef.hxx
deleted file mode 100644
index 427d63307ba6..000000000000
--- a/idlc/inc/asttypedef.hxx
+++ /dev/null
@@ -1,44 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#ifndef INCLUDED_IDLC_INC_ASTTYPEDEF_HXX
-#define INCLUDED_IDLC_INC_ASTTYPEDEF_HXX
-
-#include "asttype.hxx"
-
-class AstTypeDef final : public AstType
-{
-public:
- AstTypeDef(
- AstType const * baseType, OString const & name, AstScope * scope):
- AstType(NT_typedef, name, scope), m_pBaseType(baseType) {}
-
- AstType const * getBaseType() const
- { return m_pBaseType; }
-
- virtual bool isUnsigned() const override
- { return m_pBaseType != nullptr && m_pBaseType->isUnsigned(); }
-
- virtual bool dump(RegistryKey& rKey) override;
-private:
- AstType const * m_pBaseType;
-};
-
-#endif // INCLUDED_IDLC_INC_ASTTYPEDEF_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/inc/errorhandler.hxx b/idlc/inc/errorhandler.hxx
deleted file mode 100644
index 9b49f5df441a..000000000000
--- a/idlc/inc/errorhandler.hxx
+++ /dev/null
@@ -1,118 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#ifndef INCLUDED_IDLC_INC_ERRORHANDLER_HXX
-#define INCLUDED_IDLC_INC_ERRORHANDLER_HXX
-
-#include "astdeclaration.hxx"
-#include "astexpression.hxx"
-#include "astenum.hxx"
-
-enum class ErrorCode
-{
- SyntaxError, // Syntax error in IDL input
- // More details will be gleaned from examining
- // the parse state
- RedefScope, // Redefinition inside defining scope
- CoercionFailure, // Coercion failure
- ScopeConflict, // Between fwd declare and full declare
- IllegalAdd, // Illegal add action
- IllegalRaises, // Error in "raises" clause
- CantInherit, // Cannot inherit from non-interface
- IdentNotFound, // Identifier not found
- CannotInheritFromForward, // Cannot inherit from fwd decl interface
- ExpectedConstant, // We got something else...
- Eval, // Error in evaluating expression
- ForwardDeclLookup, // Tried to lookup in fwd declared intf
- RecursiveType, // Illegal recursive use of type
- NotAType, // Not a type
- InterfaceMemberLookup, // interface is not defined or a fwd declaration not exists
- ServiceMemberLookup,
- DefinedAttributeFlag,
- WrongAttributeKeyword,
- MissingAttributeKeyword,
- BadAttributeFlags,
- ExpectedOptional,
- MixedInheritance,
- DoubleInheritance,
- DoubleMember,
- ConstructorParameterNotIn,
- ConstructorRestParameterNotFirst,
- RestParameterNotLast,
- RestParameterNotAny,
- MethodHasRestParameter,
- ReadOnlyAttributeSetExceptions,
- UnsignedTypeArgument,
- WrongNumberOfTypeArguments,
- InstantiatedStructTypeTypedef,
- IdenticalTypeParameters,
- StructTypeTemplateWithBase,
- PublishedForward,
- PublishedusesUnpublished,
- SimilarConstructors
-};
-
-enum class WarningCode
-{
- WrongNamingConvention // type or identifier doesn't fulfill the UNO naming convention
-};
-
-class ErrorHandler
-{
-public:
- // Report errors with varying numbers of arguments
- static void error0(ErrorCode e);
- static void error1(ErrorCode e, AstDeclaration const * d);
- static void error2(
- ErrorCode e, AstDeclaration const * d1, AstDeclaration const * d2);
- static void error3(ErrorCode e, AstDeclaration const * d1, AstDeclaration const * d2, AstDeclaration const * d3);
-
- // Warning
- static void warning0(WarningCode e, const char* warningmsg);
-
- // Report a syntax error in IDL input
- static void syntaxError(ParseState state, sal_Int32 lineNumber, const char* errmsg);
-
- // Report an unsuccessful coercion attempt
- static void coercionError(AstExpression *pExpr, ExprType et);
-
- // Report a failed name lookup attempt
- static void lookupError(const OString& n);
- // Report a failed name lookup attempt
- static void lookupError(ErrorCode e, const OString& n, AstDeclaration const * pScope);
-
-
- // Report a type error
- static void noTypeError(AstDeclaration const * pDecl);
-
- static void inheritanceError(NodeType nodeType, const OString* name, AstDeclaration const * pDecl);
-
- static void flagError(ErrorCode e, sal_uInt32 flag);
-
- static void forwardLookupError(const AstDeclaration* pForward, const OString& name);
-
- static void constantExpected(AstDeclaration const * pDecl, const OString& name);
-
- static void evalError(AstExpression* pExpr);
-
- static bool checkPublished(AstDeclaration const * decl, bool bOptional=false);
-};
-
-#endif // INCLUDED_IDLC_INC_ERRORHANDLER_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/inc/fehelper.hxx b/idlc/inc/fehelper.hxx
deleted file mode 100644
index be401defcaa1..000000000000
--- a/idlc/inc/fehelper.hxx
+++ /dev/null
@@ -1,70 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#ifndef INCLUDED_IDLC_INC_FEHELPER_HXX
-#define INCLUDED_IDLC_INC_FEHELPER_HXX
-
-#include "asttype.hxx"
-#include "astinterface.hxx"
-
-#include <vector>
-
-class FeDeclarator final
-{
-public:
- FeDeclarator(const OString& name);
- ~FeDeclarator();
- const OString& getName() const
- { return m_name; }
- bool checkType(AstDeclaration const * pType) const;
- static AstType const * compose(AstDeclaration const * pDecl);
-private:
- OString m_name;
-};
-
-typedef ::std::list< FeDeclarator* > FeDeclList;
-
-class FeInheritanceHeader final
-{
-public:
- FeInheritanceHeader(
- NodeType nodeType, OString* pName, OString const * pInherits,
- std::vector< OString > const * typeParameters);
-
- NodeType getNodeType() const
- { return m_nodeType; }
- OString* getName()
- { return m_pName.get(); }
- AstDeclaration* getInherits()
- { return m_pInherits; }
-
- std::vector< OString > const & getTypeParameters() const
- { return m_typeParameters; }
-
-private:
- void initializeInherits(OString const * pinherits);
-
- NodeType m_nodeType;
- std::unique_ptr<OString> m_pName;
- AstDeclaration* m_pInherits;
- std::vector< OString > m_typeParameters;
-};
-
-#endif // INCLUDED_IDLC_INC_FEHELPER_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/inc/idlc.hxx b/idlc/inc/idlc.hxx
deleted file mode 100644
index 1be11b1457da..000000000000
--- a/idlc/inc/idlc.hxx
+++ /dev/null
@@ -1,164 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#pragma once
-
-#include "idlctypes.hxx"
-#include "aststack.hxx"
-#include "options.hxx"
-#include <memory>
-#include <string_view>
-
-#ifdef SAL_UNX
-#define SEPARATOR '/'
-#define PATH_SEPARATOR "/"
-#else
-#define SEPARATOR '\\'
-#define PATH_SEPARATOR "\\"
-#endif
-
-class AstInterface;
-class AstModule;
-class AstType;
-class Options;
-class ErrorHandler;
-
-class Idlc final
-{
-public:
- Idlc(Options* pOptions);
- ~Idlc();
-
- void init();
-
- bool dumpDeps(std::string_view rDepFile,
- OString const& rTarget);
-
- Options* getOptions()
- { return m_pOptions; }
- AstStack* scopes()
- { return m_pScopes.get(); }
- AstModule* getRoot()
- { return m_pRoot.get(); }
- const OString& getFileName() const
- { return m_fileName; }
- void setFileName(const OString& fileName)
- { m_fileName = fileName; addInclude(fileName); }
- const OString& getMainFileName() const
- { return m_mainFileName; }
- void setMainFileName(const OString& mainFileName)
- { m_mainFileName = mainFileName; }
- const OString& getRealFileName() const
- { return m_realFileName; }
- void setRealFileName(const OString& realFileName)
- { m_realFileName = realFileName; }
- const OString& getDocumentation()
- {
- m_bIsDocValid = false;
- return m_documentation;
- }
- void setDocumentation(const OString& documentation)
- {
- m_documentation = documentation;
- m_bIsDocValid = true;
- }
- OUString processDocumentation();
- bool isInMainFile() const
- { return m_bIsInMainfile; }
- void setInMainfile(bool bInMainfile)
- { m_bIsInMainfile = bInMainfile; }
- sal_uInt32 getErrorCount() const
- { return m_errorCount; }
- void incErrorCount()
- { m_errorCount++; }
- sal_uInt32 getWarningCount() const
- { return m_warningCount; }
- void incWarningCount()
- { m_warningCount++; }
- sal_uInt32 getLineNumber() const
- { return m_lineNumber; }
- sal_uInt32 getOffsetStart() const
- { return m_offsetStart; }
- sal_uInt32 getOffsetEnd() const
- { return m_offsetEnd; }
- void setOffset( sal_uInt32 start, sal_uInt32 end)
- { m_offsetStart = start; m_offsetEnd = end; }
- void setLineNumber(sal_uInt32 lineNumber)
- { m_lineNumber = lineNumber; }
- void incLineNumber()
- { m_lineNumber++; }
- ParseState getParseState() const
- { return m_parseState; }
- void setParseState(ParseState parseState)
- { m_parseState = parseState; }
-
- void addInclude(const OString& inc)
- { m_includes.insert(inc); }
-
- void setPublished(bool published) { m_published = published; }
- bool isPublished() const { return m_published; }
-
- void reset();
-private:
- Options* m_pOptions;
- std::unique_ptr<AstStack> m_pScopes;
- std::unique_ptr<AstModule> m_pRoot;
- OString m_fileName;
- OString m_mainFileName;
- OString m_realFileName;
- OString m_documentation;
- bool m_bIsDocValid;
- bool m_bGenerateDoc;
- bool m_bIsInMainfile;
- bool m_published;
- sal_uInt32 m_errorCount;
- sal_uInt32 m_warningCount;
- sal_uInt32 m_lineNumber;
- sal_uInt32 m_offsetStart;
- sal_uInt32 m_offsetEnd;
- ParseState m_parseState;
- std::set< OString > m_includes;
-};
-
-
-typedef ::std::pair< OString, OString > sPair_t;
-sal_Int32 compileFile(const OString * pathname);
- // a null pathname means stdin
-sal_Int32 produceFile(const OString& filenameBase,
- sPair_t const*const pDepFile);
- // filenameBase is filename without ".idl"
-void removeIfExists(std::string_view pathname);
-
-bool copyFile(const OString* source, const OString& target);
- // a null source means stdin
-
-bool isFileUrl(std::string_view fileName);
-OString convertToAbsoluteSystemPath(const OString& fileName);
-OString convertToFileUrl(const OString& fileName);
-
-Idlc* idlc();
-Idlc* setIdlc(Options* pOptions);
-
-AstDeclaration const * resolveTypedefs(AstDeclaration const * type);
-
-AstDeclaration const * deconstructAndResolveTypedefs(
- AstDeclaration const * type, sal_Int32 * rank);
-
-AstInterface const * resolveInterfaceTypedefs(AstType const * type);
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/inc/idlctypes.hxx b/idlc/inc/idlctypes.hxx
deleted file mode 100644
index a2dadfee178a..000000000000
--- a/idlc/inc/idlctypes.hxx
+++ /dev/null
@@ -1,189 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#pragma once
-
-#include <stdio.h>
-
-#include <list>
-#include <set>
-#include <string>
-#include <unordered_map>
-#include <vector>
-
-#include <sal/types.h>
-#include <rtl/ustring.hxx>
-
-
-class AstDeclaration;
-
-typedef std::list< AstDeclaration* > DeclList;
-
-class AstScope;
-AstDeclaration* scopeAsDecl(AstScope* pScope);
-AstScope* declAsScope(AstDeclaration* pDecl);
-
-// flags used for attributes, properties and services
-#define AF_INVALID 0x0000
-#define AF_READONLY 0x0001
-#define AF_OPTIONAL 0x0002
-#define AF_MAYBEVOID 0x0004
-#define AF_BOUND 0x0008
-#define AF_CONSTRAINED 0x0010
-#define AF_TRANSIENT 0x0020
-#define AF_MAYBEAMBIGUOUS 0x0040
-#define AF_MAYBEDEFAULT 0x0080
-#define AF_REMOVABLE 0x0100
-#define AF_ATTRIBUTE 0x0200
-#define AF_PROPERTY 0x0400
-
-enum ParseState
-{
- PS_NoState,
- PS_TypeDeclSeen, // Seen complete typedef declaration
- PS_ConstantDeclSeen, // Seen complete const declaration
- PS_ExceptionDeclSeen, // Seen complete exception declaration
- PS_InterfaceDeclSeen, // Seen complete interface declaration
- PS_ServiceDeclSeen, // Seen complete service declaration
- PS_SingletonDeclSeen, // Seen complete singleton declaration
- PS_ModuleDeclSeen, // Seen complete module declaration
- PS_AttributeDeclSeen, // Seen complete attribute declaration
- PS_PropertyDeclSeen, // Seen complete property declaration
- PS_OperationDeclSeen, // Seen complete operation declaration
- PS_InterfaceInheritanceDeclSeen, // Seen complete interface inheritance decl
- PS_ConstantsDeclSeen, // Seen complete constants declaration
-
- PS_ServiceSeen, // Seen a SERVICE keyword
- PS_ServiceIDSeen, // Seen the service ID
- PS_ServiceSqSeen, // '{' seen for service
- PS_ServiceQsSeen, // '}' seen for service
- PS_ServiceBodySeen, // Seen complete service body
- PS_ServiceMemberSeen, // Seen a service member
- PS_ServiceIFHeadSeen, // Seen an interface member header
- PS_ServiceSHeadSeen, // Seen a service member header
-
- PS_SingletonSeen, // Seen a SINGLETON keyword
- PS_SingletonIDSeen, // Seen the singleton ID
- PS_SingletonSqSeen, // '{' seen for singleton
- PS_SingletonQsSeen, // '}' seen for singleton
- PS_SingletonBodySeen, // Seen complete singleton body
-
- PS_ModuleSeen, // Seen a MODULE keyword
- PS_ModuleIDSeen, // Seen the module ID
- PS_ModuleSqSeen, // '{' seen for module
- PS_ModuleQsSeen, // '}' seen for module
- PS_ModuleBodySeen, // Seen complete module body
-
- PS_ConstantsSeen, // Seen a CONSTANTS keyword
- PS_ConstantsIDSeen, // Seen the constants ID
- PS_ConstantsSqSeen, // '{' seen for constants
- PS_ConstantsQsSeen, // '}' seen for constants
- PS_ConstantsBodySeen, // Seen complete constants body
-
- PS_InterfaceSeen, // Seen an INTERFACE keyword
- PS_InterfaceIDSeen, // Seen the interface ID
- PS_InterfaceHeadSeen, // Seen the interface head
- PS_InheritSpecSeen, // Seen a complete inheritance spec
- PS_ForwardDeclSeen, // Forward interface decl seen
- PS_InterfaceSqSeen, // '{' seen for interface
- PS_InterfaceQsSeen, // '}' seen for interface
- PS_InterfaceBodySeen, // Seen an interface body
- PS_InheritColonSeen, // Seen ':' in inheritance list
-
- PS_SNListCommaSeen, // Seen ',' in list of scoped names
- PS_ScopedNameSeen, // Seen a complete scoped name
- PS_SN_IDSeen, // Seen an identifier as part of a scoped name
- PS_ScopeDelimSeen, // Seen a scope delim as party of a scoped name
-
- PS_ConstSeen, // Seen a CONST keyword
- PS_ConstTypeSeen, // Parsed the type of a constant
- PS_ConstIDSeen, // Seen the constant ID
- PS_ConstAssignSeen, // Seen the '='
- PS_ConstExprSeen, // Seen the constant value expression
-
- PS_TypedefSeen, // Seen a TYPEDEF keyword
- PS_TypeSpecSeen, // Seen a complete type specification
- PS_DeclaratorsSeen, // Seen a complete list of declarators
-
- PS_StructSeen, // Seen a STRUCT keyword
- PS_StructHeaderSeen, // Seen struct header
- PS_StructIDSeen, // Seen the struct ID
- PS_StructSqSeen, // '{' seen for struct
- PS_StructQsSeen, // '}' seen for struct
- PS_StructBodySeen, // Seen complete body of struct decl
-
- PS_MemberTypeSeen, // Seen type of struct or except member
- PS_MemberDeclsSeen, // Seen decls of struct or except members
- PS_MemberDeclsCompleted,// Completed one struct or except member to ';'
-
- PS_EnumSeen, // Seen an ENUM keyword
- PS_EnumIDSeen, // Seen the enum ID
- PS_EnumSqSeen, // Seen '{' for enum
- PS_EnumQsSeen, // Seen '}' for enum
- PS_EnumBodySeen, // Seen complete enum body
- PS_EnumCommaSeen, // Seen ',' in list of enumerators
-
- PS_SequenceSeen, // Seen a SEQUENCE keyword
- PS_SequenceSqSeen, // Seen '<' for sequence
- PS_SequenceQsSeen, // Seen '>' for sequence
- PS_SequenceTypeSeen, // Seen type decl for sequence
-
- PS_FlagHeaderSeen, // Seen the attribute|property|interface member head
- PS_AttrSeen, // Seen ATTRIBUTE keyword
- PS_AttrTypeSeen, // Seen type decl for attribute
- PS_AttrCompleted, // Seen complete attribute declaration
- PS_ReadOnlySeen, // Seen READONLY keyword
- PS_OptionalSeen, // Seen OPTIONAL keyword
- PS_MayBeVoidSeen, // Seen MAYBEVOID yword
- PS_BoundSeen, // Seen BOUND keyword
- PS_ConstrainedSeen, // Seen CONSTRAINED keyword
- PS_TransientSeen, // Seen TRANSIENT keyword
- PS_MayBeAmbiguousSeen, // Seen MAYBEAMBIGUOUS keyword
- PS_MayBeDefaultSeen, // Seen MAYBEDEFAULT keyword
- PS_RemoveableSeen, // Seen REMOVABLE keyword
-
- PS_PropertySeen, // Seen PROPERTY keyword
- PS_PropertyTypeSeen, // Seen type decl for property
- PS_PropertyCompleted, // Seen complete property declaration
-
- PS_ExceptSeen, // Seen EXCEPTION keyword
- PS_ExceptHeaderSeen, // Seen exception header keyword
- PS_ExceptIDSeen, // Seen exception identifier
- PS_ExceptSqSeen, // Seen '{' for exception
- PS_ExceptQsSeen, // Seen '}' for exception
- PS_ExceptBodySeen, // Seen complete exception body
-
- PS_OpTypeSeen, // Seen operation return type
- PS_OpIDSeen, // Seen operation ID
- PS_OpParsCompleted, // Completed operation param list
- PS_OpSqSeen, // Seen '(' for operation
- PS_OpQsSeen, // Seen ')' for operation
- PS_OpParCommaSeen, // Seen ',' in list of op params
- PS_OpParDirSeen, // Seen parameter direction
- PS_OpParTypeSeen, // Seen parameter type
- PS_OpParDeclSeen, // Seen parameter declaration
-
- PS_RaiseSeen, // Seen RAISES keyword
- PS_RaiseSqSeen, // Seen '(' for RAISES
- PS_RaiseQsSeen, // Seen ')' for RAISES
-
- PS_DeclsCommaSeen, // Seen ',' in declarators list
- PS_DeclsDeclSeen // Seen complete decl in decls list
-};
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/inc/inheritedinterface.hxx b/idlc/inc/inheritedinterface.hxx
deleted file mode 100644
index 16462b4da16d..000000000000
--- a/idlc/inc/inheritedinterface.hxx
+++ /dev/null
@@ -1,56 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#ifndef INCLUDED_IDLC_INC_INHERITEDINTERFACE_HXX
-#define INCLUDED_IDLC_INC_INHERITEDINTERFACE_HXX
-
-#include "idlc.hxx"
-
-#include <rtl/ustring.hxx>
-#include <utility>
-
-class AstInterface;
-class AstType;
-
-class InheritedInterface {
-public:
- InheritedInterface(
- AstType const * theInterface, bool theOptional,
- OUString theDocumentation):
- interface(theInterface), optional(theOptional),
- documentation(std::move(theDocumentation)) {}
-
- AstType const * getInterface() const { return interface; }
-
- AstInterface const * getResolved() const
- { return resolveInterfaceTypedefs(interface); }
-
- bool isOptional() const { return optional; }
-
- const OUString& getDocumentation() const { return documentation; }
-
-private:
- AstType const * interface;
- bool optional;
- OUString documentation;
-};
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/inc/options.hxx b/idlc/inc/options.hxx
deleted file mode 100644
index c3a0949b3d2f..000000000000
--- a/idlc/inc/options.hxx
+++ /dev/null
@@ -1,76 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#ifndef INCLUDED_IDLC_INC_OPTIONS_HXX
-#define INCLUDED_IDLC_INC_OPTIONS_HXX
-
-#include "idlctypes.hxx"
-#include <utility>
-
-typedef std::unordered_map< OString, OString > OptionMap;
-
-class IllegalArgument
-{
-public:
- IllegalArgument(OString msg) : m_message(std::move(msg)) {}
-
- OString m_message;
-};
-
-
-class Options
-{
-public:
- explicit Options(char const * progname);
- ~Options();
-
- static bool checkArgument(std::vector< std::string > & rArgs, char const * arg, size_t len);
- static bool checkCommandFile(std::vector< std::string > & rArgs, char const * filename);
-
- /// @throws IllegalArgument
- bool initOptions(std::vector< std::string > & rArgs);
- /// @throws IllegalArgument
- static bool badOption(char const * reason, std::string const & rArg);
- bool setOption(char const * option, std::string const & rArg);
-
- OString prepareHelp() const;
- OString prepareVersion() const;
-
- const OString& getProgramName() const { return m_program;}
- bool isValid(const OString& option) const;
- /// @throws IllegalArgument
- const OString& getOption(const OString& option);
-
- const std::vector< OString >& getInputFiles() const { return m_inputFiles; }
- bool readStdin() const { return m_stdin; }
- bool verbose() const { return m_verbose; }
- bool quiet() const { return m_quiet; }
-
-protected:
- OString m_program;
- std::vector< OString > m_inputFiles;
- bool m_stdin;
- bool m_verbose;
- bool m_quiet;
- OptionMap m_options;
-};
-
-#endif // INCLUDED_IDLC_INC_OPTIONS_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/source/astconstant.cxx b/idlc/source/astconstant.cxx
deleted file mode 100644
index 54d235fa32ed..000000000000
--- a/idlc/source/astconstant.cxx
+++ /dev/null
@@ -1,123 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <astconstant.hxx>
-#include <astscope.hxx>
-
-#include <registry/writer.hxx>
-
-AstConstant::AstConstant(const ExprType type,
- const NodeType nodeType,
- AstExpression* pExpr,
- const OString& name,
- AstScope* pScope)
- : AstDeclaration(nodeType, name, pScope)
- , m_pConstValue(pExpr)
- , m_constValueType(type)
-{
-}
-
-AstConstant::AstConstant(const ExprType type,
- AstExpression* pExpr,
- const OString& name,
- AstScope* pScope)
- : AstDeclaration(NT_const, name, pScope)
- , m_pConstValue(pExpr)
- , m_constValueType(type)
-{
-}
-
-AstConstant::~AstConstant()
-{
-
-}
-
-bool AstConstant::dumpBlob(
- typereg::Writer & rBlob, sal_uInt16 index, bool published)
-{
- RTConstValue aConst;
-
- AstExprValue *exprVal = getConstValue()->getExprValue();
- switch (getConstValueType())
- {
- case ET_short:
- aConst.m_type = RT_TYPE_INT16;
- aConst.m_value.aShort = exprVal->u.sval;
- break;
- case ET_ushort:
- aConst.m_type = RT_TYPE_UINT16;
- aConst.m_value.aUShort = exprVal->u.usval;
- break;
- case ET_long:
- aConst.m_type = RT_TYPE_INT32;
- aConst.m_value.aLong = exprVal->u.lval;
- break;
- case ET_ulong:
- aConst.m_type = RT_TYPE_UINT32;
- aConst.m_value.aULong = exprVal->u.ulval;
- break;
- case ET_hyper:
- aConst.m_type = RT_TYPE_INT64;
- aConst.m_value.aHyper = exprVal->u.hval;
- break;
- case ET_uhyper:
- aConst.m_type = RT_TYPE_UINT64;
- aConst.m_value.aUHyper = exprVal->u.uhval;
- break;
- case ET_float:
- aConst.m_type = RT_TYPE_FLOAT;
- aConst.m_value.aFloat = exprVal->u.fval;
- break;
- case ET_double:
- aConst.m_type = RT_TYPE_DOUBLE;
- aConst.m_value.aDouble = exprVal->u.dval;
- break;
- case ET_byte:
- aConst.m_type = RT_TYPE_BYTE;
- aConst.m_value.aByte = exprVal->u.byval;
- break;
- case ET_boolean:
- aConst.m_type = RT_TYPE_BOOL;
- aConst.m_value.aBool = exprVal->u.bval;
- break;
- default:
- {
- fprintf(stderr, "%s: exprtype to const type: cannot convert ExprType\n",
- idlc()->getOptions()->getProgramName().getStr());
- return false;
- }
- }
-
- OString name = getLocalName();
-
- OUString type;
- if ( getNodeType() != NT_enum_val )
- {
- type = OStringToOUString(exprTypeToString(getConstValueType()), RTL_TEXTENCODING_UTF8);
- }
-
- rBlob.setFieldData(
- index, getDocumentation(), OUString(),
- RTFieldAccess::CONST | (published ? RTFieldAccess::PUBLISHED : RTFieldAccess::NONE),
- OStringToOUString(name, RTL_TEXTENCODING_UTF8), type, aConst);
-
- return true;
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/source/astdeclaration.cxx b/idlc/source/astdeclaration.cxx
deleted file mode 100644
index 980e7dd2b36a..000000000000
--- a/idlc/source/astdeclaration.cxx
+++ /dev/null
@@ -1,164 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <astdeclaration.hxx>
-#include <astscope.hxx>
-#include <rtl/strbuf.hxx>
-#include <o3tl/string_view.hxx>
-#include <osl/diagnose.h>
-
-constexpr OStringLiteral sGlobal("::");
-
-static OString convertName(std::string_view name)
-{
- OStringBuffer nameBuffer(name.size()+1);
- sal_Int32 nIndex = 0;
- do
- {
- std::string_view token( o3tl::getToken(name, 0, ':', nIndex ) );
- if( !token.empty() )
- {
- nameBuffer.append('/');
- nameBuffer.append( token );
- }
- } while( nIndex != -1 );
- return nameBuffer.makeStringAndClear();
-}
-
-AstDeclaration::AstDeclaration(NodeType type, const OString& name, AstScope* pScope)
- : m_localName(name)
- , m_pScope(pScope)
- , m_nodeType(type)
- , m_bImported(false)
- , m_bInMainFile(false)
- , m_bPredefined(false)
- , m_lineNumber(0)
-{
- if ( m_pScope )
- {
- AstDeclaration* pDecl = scopeAsDecl(m_pScope);
- if (pDecl)
- {
- m_scopedName = pDecl->getScopedName();
- if (!m_scopedName.isEmpty())
- m_scopedName += sGlobal;
- m_scopedName += m_localName;
- }
- } else
- {
- m_scopedName = m_localName;
- }
- m_fullName = convertName(m_scopedName);
-
- if ( idlc()->getFileName() == idlc()->getRealFileName() )
- {
- m_fileName = idlc()->getMainFileName();
- m_bInMainFile = true;
- } else
- {
- m_fileName = idlc()->getFileName();
- m_bImported = true;
- }
-
- m_documentation = idlc()->processDocumentation();
-
- m_bPublished = idlc()->isPublished();
-}
-
-
-AstDeclaration::~AstDeclaration()
-{
-
-}
-
-void AstDeclaration::setPredefined(bool bPredefined)
-{
- m_bPredefined = bPredefined;
- if ( m_bPredefined )
- {
- m_fileName.clear();
- m_bInMainFile = false;
- }
-}
-
-bool AstDeclaration::isType() const {
- switch (m_nodeType) {
- case NT_interface:
- case NT_instantiated_struct:
- case NT_enum:
- case NT_sequence:
- case NT_typedef:
- case NT_predefined:
- case NT_type_parameter:
- return true;
-
- default:
- OSL_ASSERT(m_nodeType != NT_struct); // see AstStruct::isType
- return false;
- }
-}
-
-bool AstDeclaration::hasAncestor(AstDeclaration* pDecl)
-{
- if (this == pDecl)
- return true;
- if ( !m_pScope )
- return false;
- return scopeAsDecl(m_pScope)->hasAncestor(pDecl);
-}
-
-bool AstDeclaration::dump(RegistryKey& rKey)
-{
- AstScope* pScope = declAsScope(this);
- if ( !pScope )
- return true;
-
- bool bRet = true;
- DeclList::const_iterator iter = pScope->getIteratorBegin();
- DeclList::const_iterator end = pScope->getIteratorEnd();
- AstDeclaration* pDecl = nullptr;
- while ( iter != end && bRet)
- {
- pDecl = *iter;
- if ( pDecl->isInMainfile() )
- {
- switch ( pDecl->getNodeType() )
- {
- case NT_module:
- case NT_constants:
- case NT_interface:
- case NT_struct:
- case NT_exception:
- case NT_enum:
- case NT_typedef:
- case NT_service:
- case NT_singleton:
- bRet = pDecl->dump(rKey);
- break;
- default:
- break;
- }
- }
-
- ++iter;
- }
- return bRet;
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/source/astdump.cxx b/idlc/source/astdump.cxx
deleted file mode 100644
index 79613e137fb9..000000000000
--- a/idlc/source/astdump.cxx
+++ /dev/null
@@ -1,420 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <astmodule.hxx>
-#include <asttypedef.hxx>
-#include <astservice.hxx>
-#include <astconstant.hxx>
-#include <astattribute.hxx>
-#include <astinterfacemember.hxx>
-#include <astservicemember.hxx>
-#include <astobserves.hxx>
-#include <astneeds.hxx>
-#include <astsequence.hxx>
-#include <astoperation.hxx>
-
-#include <osl/diagnose.h>
-
-#include <registry/version.h>
-#include <registry/writer.hxx>
-
-bool AstModule::dump(RegistryKey& rKey)
-{
- RegistryKey localKey;
- if ( getNodeType() == NT_root )
- {
- localKey = rKey;
- }else
- {
- if (rKey.createKey( OStringToOUString(getFullName(), RTL_TEXTENCODING_UTF8 ), localKey) != RegError::NO_ERROR)
- {
- fprintf(stderr, "%s: warning, could not create key '%s' in '%s'\n",
- idlc()->getOptions()->getProgramName().getStr(),
- getFullName().getStr(), OUStringToOString(rKey.getRegistryName(), RTL_TEXTENCODING_UTF8).getStr());
- return false;
- }
- }
-
- sal_uInt16 nConst = getNodeCount(NT_const);
-
- if ( nConst > 0 )
- {
- RTTypeClass typeClass = RT_TYPE_MODULE;
- if ( getNodeType() == NT_constants )
- typeClass = RT_TYPE_CONSTANTS;
-
- typereg::Writer aBlob(
- m_bPublished ? TYPEREG_VERSION_1 : TYPEREG_VERSION_0,
- getDocumentation(), "", typeClass,
- m_bPublished,
- OStringToOUString(getRelativName(), RTL_TEXTENCODING_UTF8), 0,
- nConst, 0, 0);
-
- DeclList::const_iterator iter = getIteratorBegin();
- DeclList::const_iterator end = getIteratorEnd();
- sal_uInt16 index = 0;
- while ( iter != end )
- {
- AstDeclaration* pDecl = *iter;
- if ( pDecl->getNodeType() == NT_const &&
- pDecl->isInMainfile() )
- {
- static_cast<AstConstant*>(pDecl)->dumpBlob(
- aBlob, index++,
- getNodeType() == NT_module && pDecl->isPublished());
- }
- ++iter;
- }
-
- sal_uInt32 aBlobSize;
- void const * pBlob = aBlob.getBlob(&aBlobSize);
-
- if (localKey.setValue("", RegValueType::BINARY,
- const_cast<RegValue>(pBlob), aBlobSize) != RegError::NO_ERROR)
- {
- fprintf(stderr, "%s: warning, could not set value of key \"%s\" in %s\n",
- idlc()->getOptions()->getProgramName().getStr(),
- getFullName().getStr(), OUStringToOString(localKey.getRegistryName(), RTL_TEXTENCODING_UTF8).getStr());
- return false;
- }
- } else
- {
- RTTypeClass typeClass = RT_TYPE_MODULE;
- if ( getNodeType() == NT_constants )
- typeClass = RT_TYPE_CONSTANTS;
-
- typereg::Writer aBlob(
- m_bPublished ? TYPEREG_VERSION_1 : TYPEREG_VERSION_0,
- getDocumentation(), "", typeClass, m_bPublished,
- OStringToOUString(getRelativName(), RTL_TEXTENCODING_UTF8), 0, 0, 0,
- 0);
-
- sal_uInt32 aBlobSize;
- void const * pBlob = aBlob.getBlob(&aBlobSize);
-
- if ( getNodeType() != NT_root )
- {
- if (localKey.setValue("", RegValueType::BINARY,
- const_cast<RegValue>(pBlob), aBlobSize) != RegError::NO_ERROR)
- {
- fprintf(stderr, "%s: warning, could not set value of key \"%s\" in %s\n",
- idlc()->getOptions()->getProgramName().getStr(),
- getFullName().getStr(), OUStringToOString(localKey.getRegistryName(), RTL_TEXTENCODING_UTF8).getStr());
- return false;
- }
- }
- }
- if ( getNodeType() == NT_root )
- {
- localKey.releaseKey();
- }
- return AstDeclaration::dump(rKey);
-}
-
-bool AstTypeDef::dump(RegistryKey& rKey)
-{
- RegistryKey localKey;
- if (rKey.createKey( OStringToOUString(getFullName(), RTL_TEXTENCODING_UTF8 ), localKey) != RegError::NO_ERROR)
- {
- fprintf(stderr, "%s: warning, could not create key '%s' in '%s'\n",
- idlc()->getOptions()->getProgramName().getStr(),
- getFullName().getStr(), OUStringToOString(rKey.getRegistryName(), RTL_TEXTENCODING_UTF8).getStr());
- return false;
- }
-
- typereg::Writer aBlob(
- m_bPublished ? TYPEREG_VERSION_1 : TYPEREG_VERSION_0,
- getDocumentation(), "", RT_TYPE_TYPEDEF, m_bPublished,
- OStringToOUString(getRelativName(), RTL_TEXTENCODING_UTF8), 1, 0, 0, 0);
- aBlob.setSuperTypeName(
- 0,
- OStringToOUString(
- getBaseType()->getRelativName(), RTL_TEXTENCODING_UTF8));
-
- sal_uInt32 aBlobSize;
- void const * pBlob = aBlob.getBlob(&aBlobSize);
-
- if (localKey.setValue("", RegValueType::BINARY, const_cast<RegValue>(pBlob), aBlobSize) != RegError::NO_ERROR)
- {
- fprintf(stderr, "%s: warning, could not set value of key \"%s\" in %s\n",
- idlc()->getOptions()->getProgramName().getStr(),
- getFullName().getStr(), OUStringToOString(localKey.getRegistryName(), RTL_TEXTENCODING_UTF8).getStr());
- return false;
- }
-
- return true;
-}
-
-bool AstService::dump(RegistryKey& rKey)
-{
- typereg_Version version = m_bPublished
- ? TYPEREG_VERSION_1 : TYPEREG_VERSION_0;
- OString superName;
- sal_uInt16 constructors = 0;
- sal_uInt16 properties = 0;
- sal_uInt16 references = 0;
- for (DeclList::const_iterator i(getIteratorBegin()); i != getIteratorEnd();
- ++i)
- {
- switch ((*i)->getNodeType()) {
- case NT_interface:
- case NT_typedef:
- version = TYPEREG_VERSION_1;
- OSL_ASSERT(superName.isEmpty());
- superName = (*i)->getRelativName();
- break;
-
- case NT_operation:
- OSL_ASSERT(getNodeType() == NT_service);
- ++constructors;
- break;
-
- case NT_property:
- OSL_ASSERT(getNodeType() == NT_service);
- ++properties;
- break;
-
- case NT_service_member:
- if (getNodeType() == NT_singleton) {
- OSL_ASSERT(superName.isEmpty());
- superName = static_cast<AstServiceMember *>(*i)->
- getRealService()->getRelativName();
- break;
- }
- [[fallthrough]];
- case NT_interface_member:
- case NT_observes:
- case NT_needs:
- OSL_ASSERT(getNodeType() == NT_service);
- ++references;
- break;
-
- default:
- OSL_ASSERT(false);
- break;
- }
- }
- OSL_ASSERT(constructors == 0 || !m_defaultConstructor);
- if (m_defaultConstructor) {
- constructors = 1;
- }
- RegistryKey localKey;
- if (rKey.createKey(
- OStringToOUString(getFullName(), RTL_TEXTENCODING_UTF8),
- localKey) != RegError::NO_ERROR) {
- fprintf(
- stderr, "%s: warning, could not create key '%s' in '%s'\n",
- idlc()->getOptions()->getProgramName().getStr(),
- getFullName().getStr(),
- OUStringToOString(
- rKey.getRegistryName(), RTL_TEXTENCODING_UTF8).getStr());
- return false;
- }
- typereg::Writer writer(
- version, getDocumentation(), "",
- getNodeType() == NT_singleton ? RT_TYPE_SINGLETON : RT_TYPE_SERVICE,
- m_bPublished,
- OStringToOUString(getRelativName(), RTL_TEXTENCODING_UTF8),
- superName.isEmpty() ? 0 : 1, properties, constructors,
- references);
- if (!superName.isEmpty()) {
- writer.setSuperTypeName(
- 0, OStringToOUString(superName, RTL_TEXTENCODING_UTF8));
- }
- sal_uInt16 constructorIndex = 0;
- sal_uInt16 propertyIndex = 0;
- sal_uInt16 referenceIndex = 0;
- for (DeclList::const_iterator i(getIteratorBegin()); i != getIteratorEnd(); ++i)
- {
- switch ((*i)->getNodeType()) {
- case NT_operation:
- static_cast<AstOperation *>(*i)->dumpBlob(writer, constructorIndex++);
- break;
-
- case NT_property:
- static_cast<AstAttribute *>(*i)->dumpBlob(writer, propertyIndex++, nullptr);
- break;
-
- case NT_interface_member:
- {
- AstInterfaceMember * decl = static_cast<AstInterfaceMember *>(*i);
- writer.setReferenceData(
- referenceIndex++, decl->getDocumentation(), RTReferenceType::SUPPORTS,
- (decl->isOptional() ? RTFieldAccess::OPTIONAL : RTFieldAccess::INVALID),
- OStringToOUString( decl->getRealInterface()->getRelativName(),
- RTL_TEXTENCODING_UTF8));
- break;
- }
-
- case NT_service_member:
- if (getNodeType() == NT_service)
- {
- AstServiceMember * decl = static_cast<AstServiceMember *>(*i);
- writer.setReferenceData(referenceIndex++, decl->getDocumentation(), RTReferenceType::EXPORTS,
- (decl->isOptional() ? RTFieldAccess::OPTIONAL : RTFieldAccess::INVALID),
- OStringToOUString(decl->getRealService()->getRelativName(),
- RTL_TEXTENCODING_UTF8));
- }
- break;
-
- case NT_observes:
- {
- AstObserves * decl = static_cast<AstObserves *>(*i);
- writer.setReferenceData(referenceIndex++, decl->getDocumentation(), RTReferenceType::OBSERVES,
- RTFieldAccess::INVALID,
- OStringToOUString( decl->getRealInterface()->getRelativName(),
- RTL_TEXTENCODING_UTF8));
- break;
- }
-
- case NT_needs:
- {
- AstNeeds * decl = static_cast<AstNeeds *>(*i);
- writer.setReferenceData( referenceIndex++, decl->getDocumentation(), RTReferenceType::NEEDS,
- RTFieldAccess::INVALID,
- OStringToOUString( decl->getRealService()->getRelativName(),
- RTL_TEXTENCODING_UTF8));
- break;
- }
-
- default:
- OSL_ASSERT( (*i)->getNodeType() == NT_interface || (*i)->getNodeType() == NT_typedef);
- break;
- }
- }
- if (m_defaultConstructor) {
- writer.setMethodData(
- constructorIndex++, "", RTMethodMode::TWOWAY,
- "", "void",
- 0, 0);
- }
- sal_uInt32 size;
- void const * blob = writer.getBlob(&size);
- if (localKey.setValue(
- "", RegValueType::BINARY, const_cast< void * >(blob),
- size) != RegError::NO_ERROR)
- {
- fprintf(
- stderr, "%s: warning, could not set value of key \"%s\" in %s\n",
- idlc()->getOptions()->getProgramName().getStr(),
- getFullName().getStr(),
- OUStringToOString(
- localKey.getRegistryName(), RTL_TEXTENCODING_UTF8).getStr());
- return false;
- }
- return true;
-}
-
-void AstAttribute::dumpBlob(
- typereg::Writer & rBlob, sal_uInt16 index, sal_uInt16 * methodIndex) const
-{
- RTFieldAccess accessMode = RTFieldAccess::INVALID;
-
- if (isReadonly())
- {
- accessMode |= RTFieldAccess::READONLY;
- } else
- {
- accessMode |= RTFieldAccess::READWRITE;
- }
- if (isOptional())
- {
- accessMode |= RTFieldAccess::OPTIONAL;
- }
- if (isBound())
- {
- accessMode |= RTFieldAccess::BOUND;
- }
- if (isMayBeVoid())
- {
- accessMode |= RTFieldAccess::MAYBEVOID;
- }
- if (isConstrained())
- {
- accessMode |= RTFieldAccess::CONSTRAINED;
- }
- if (isTransient())
- {
- accessMode |= RTFieldAccess::TRANSIENT;
- }
- if (isMayBeAmbiguous())
- {
- accessMode |= RTFieldAccess::MAYBEAMBIGUOUS;
- }
- if (isMayBeDefault())
- {
- accessMode |= RTFieldAccess::MAYBEDEFAULT;
- }
- if (isRemoveable())
- {
- accessMode |= RTFieldAccess::REMOVABLE;
- }
-
- OUString name(OStringToOUString(getLocalName(), RTL_TEXTENCODING_UTF8));
- rBlob.setFieldData(
- index, getDocumentation(), OUString(), accessMode, name,
- OStringToOUString(m_pType->getRelativName(), RTL_TEXTENCODING_UTF8),
- RTConstValue());
- dumpExceptions(
- rBlob, m_getDocumentation, m_getExceptions, RTMethodMode::ATTRIBUTE_GET,
- methodIndex);
- dumpExceptions(
- rBlob, m_setDocumentation, m_setExceptions, RTMethodMode::ATTRIBUTE_SET,
- methodIndex);
-}
-
-void AstAttribute::dumpExceptions(
- typereg::Writer & writer, OUString const & documentation,
- DeclList const & exceptions, RTMethodMode flags, sal_uInt16 * methodIndex) const
-{
- if (exceptions.empty())
- return;
-
- OSL_ASSERT(methodIndex != nullptr);
- sal_uInt16 idx = (*methodIndex)++;
- // exceptions.size() <= SAL_MAX_UINT16 already checked in
- // AstInterface::dump:
- writer.setMethodData(
- idx, documentation, flags,
- OStringToOUString(getLocalName(), RTL_TEXTENCODING_UTF8),
- "void", 0,
- static_cast< sal_uInt16 >(exceptions.size()));
- sal_uInt16 exceptionIndex = 0;
- for (auto const& elem : exceptions)
- {
- writer.setMethodExceptionTypeName(
- idx, exceptionIndex++,
- OStringToOUString(
- elem->getRelativName(), RTL_TEXTENCODING_UTF8));
- }
-}
-
-const char* AstSequence::getRelativName() const
-{
- if ( !m_xRelativName )
- {
- m_xRelativName = OString("[]");
- AstDeclaration const * pType = resolveTypedefs( m_pMemberType );
- *m_xRelativName += pType->getRelativName();
- }
-
- return m_xRelativName->getStr();
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/source/astenum.cxx b/idlc/source/astenum.cxx
deleted file mode 100644
index 7dff49d36c06..000000000000
--- a/idlc/source/astenum.cxx
+++ /dev/null
@@ -1,105 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <sal/config.h>
-
-#include <algorithm>
-
-#include <astenum.hxx>
-
-#include <registry/version.h>
-#include <registry/writer.hxx>
-
-AstEnum::AstEnum(const OString& name, AstScope* pScope)
- : AstType(NT_enum, name, pScope)
- , AstScope(NT_enum)
- , m_enumValueCount(0)
-{
-}
-
-AstEnum::~AstEnum()
-{
-}
-
-AstConstant* AstEnum::checkValue(AstExpression* pExpr)
-{
- DeclList::const_iterator iter = getIteratorBegin();
- DeclList::const_iterator end = getIteratorEnd();
-
- iter = std::find_if(iter, end, [&pExpr](AstDeclaration* pDecl) {
- return static_cast<AstConstant*>(pDecl)->getConstValue()->compareLong(pExpr); });
-
- if (iter != end)
- return static_cast<AstConstant*>(*iter);
-
- if ( pExpr->getExprValue()->u.lval > m_enumValueCount )
- m_enumValueCount = pExpr->getExprValue()->u.lval + 1;
-
- return nullptr;
-}
-
-bool AstEnum::dump(RegistryKey& rKey)
-{
- RegistryKey localKey;
- if (rKey.createKey( OStringToOUString(getFullName(), RTL_TEXTENCODING_UTF8 ), localKey) != RegError::NO_ERROR)
- {
- fprintf(stderr, "%s: warning, could not create key '%s' in '%s'\n",
- idlc()->getOptions()->getProgramName().getStr(),
- getFullName().getStr(), OUStringToOString(rKey.getRegistryName(), RTL_TEXTENCODING_UTF8).getStr());
- return false;
- }
-
- sal_uInt16 nConst = getNodeCount(NT_enum_val);
- if ( nConst <= 0 )
- return true;
-
- typereg::Writer aBlob(
- m_bPublished ? TYPEREG_VERSION_1 : TYPEREG_VERSION_0,
- getDocumentation(), "", RT_TYPE_ENUM, m_bPublished,
- OStringToOUString(getRelativName(), RTL_TEXTENCODING_UTF8), 0,
- nConst, 0, 0);
-
- DeclList::const_iterator iter = getIteratorBegin();
- DeclList::const_iterator end = getIteratorEnd();
- sal_uInt16 index = 0;
- while ( iter != end )
- {
- AstDeclaration* pDecl = *iter;
- if ( pDecl->getNodeType() == NT_enum_val )
- static_cast<AstConstant*>(pDecl)->dumpBlob(aBlob, index++, false);
-
- ++iter;
- }
-
- sal_uInt32 aBlobSize;
- void const * pBlob = aBlob.getBlob(&aBlobSize);
-
- if (localKey.setValue("", RegValueType::BINARY,
- const_cast<RegValue>(pBlob), aBlobSize) != RegError::NO_ERROR)
- {
- fprintf(stderr, "%s: warning, could not set value of key \"%s\" in %s\n",
- idlc()->getOptions()->getProgramName().getStr(),
- getFullName().getStr(), OUStringToOString(localKey.getRegistryName(), RTL_TEXTENCODING_UTF8).getStr());
- return false;
- }
-
- return true;
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/source/astexpression.cxx b/idlc/source/astexpression.cxx
deleted file mode 100644
index 1afa91dbf8b4..000000000000
--- a/idlc/source/astexpression.cxx
+++ /dev/null
@@ -1,1327 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <astexpression.hxx>
-#include <astconstant.hxx>
-#include <astscope.hxx>
-#include <errorhandler.hxx>
-
-#include <o3tl/float_int_conversion.hxx>
-#include <osl/diagnose.h>
-
-#include <limits.h>
-#include <float.h>
-#include <memory>
-
-AstExpression::AstExpression(ExprComb c, AstExpression* pExpr1, AstExpression* pExpr2)
- : m_combOperator(c)
- , m_subExpr1(pExpr1)
- , m_subExpr2(pExpr2)
-{
-}
-
-AstExpression::AstExpression(sal_Int32 l)
- : m_combOperator(ExprComb::NONE)
-{
- m_exprValue.reset(new AstExprValue);
- m_exprValue->et = ET_long;
- m_exprValue->u.lval = l;
-}
-
-AstExpression::AstExpression(sal_Int32 l, ExprType et)
- : m_combOperator(ExprComb::NONE)
-{
- m_exprValue.reset(new AstExprValue);
- m_exprValue->et = et;
- m_exprValue->u.lval = l;
-}
-
-AstExpression::AstExpression(sal_Int64 h)
- : m_combOperator(ExprComb::NONE)
-{
- m_exprValue.reset(new AstExprValue);
- m_exprValue->et = ET_hyper;
- m_exprValue->u.hval = h;
-}
-
-AstExpression::AstExpression(sal_uInt64 uh)
- : m_combOperator(ExprComb::NONE)
-{
- m_exprValue.reset(new AstExprValue);
- m_exprValue->et = ET_uhyper;
- m_exprValue->u.uhval = uh;
-}
-
-AstExpression::AstExpression(double d)
- : m_combOperator(ExprComb::NONE)
-{
- m_exprValue.reset(new AstExprValue);
- m_exprValue->et = ET_double;
- m_exprValue->u.dval = d;
-}
-
-AstExpression::AstExpression(OString* scopedName)
- : m_combOperator(ExprComb::Symbol)
-{
- if (scopedName)
- m_xSymbolicName = *scopedName;
-}
-
-AstExpression::~AstExpression() {}
-
-/*
- * Perform the coercion from the given AstExprValue to the requested
- * ExprType. Return an AstExprValue if successful, NULL if failed.
- * must be done for hyper, uhyper
- */
-static bool coerce_value(AstExprValue* ev, ExprType t)
-{
- if (ev == nullptr)
- return false;
-
- switch (t)
- {
- case ET_short:
- switch (ev->et)
- {
- case ET_short:
- return true;
- case ET_ushort:
- {
- if (ev->u.usval > SAL_MAX_INT16)
- return false;
- auto tmp = static_cast<sal_Int16>(ev->u.usval);
- ev->u.sval = tmp;
- ev->et = ET_short;
- return true;
- }
- case ET_long:
- {
- if (ev->u.lval < SAL_MIN_INT16 || ev->u.lval > SAL_MAX_INT16)
- return false;
- auto tmp = static_cast<sal_Int16>(ev->u.lval);
- ev->u.sval = tmp;
- ev->et = ET_short;
- return true;
- }
- case ET_ulong:
- {
- if (ev->u.ulval > SAL_MAX_INT16)
- return false;
- auto tmp = static_cast<sal_Int16>(ev->u.ulval);
- ev->u.sval = tmp;
- ev->et = ET_short;
- return true;
- }
- case ET_hyper:
- {
- if (ev->u.hval < SAL_MIN_INT16 || ev->u.hval > SAL_MAX_INT16)
- return false;
- auto tmp = static_cast<sal_Int16>(ev->u.hval);
- ev->u.sval = tmp;
- ev->et = ET_short;
- return true;
- }
- case ET_uhyper:
- {
- if (ev->u.uhval > SAL_MAX_INT16)
- return false;
- auto tmp = static_cast<sal_Int16>(ev->u.uhval);
- ev->u.sval = tmp;
- ev->et = ET_short;
- return true;
- }
- case ET_boolean:
- {
- auto tmp = static_cast<sal_Int16>(ev->u.bval);
- ev->u.sval = tmp;
- ev->et = ET_short;
- return true;
- }
- case ET_float:
- {
- if (!(o3tl::convertsToAtLeast(o3tl::roundAway(ev->u.fval), SAL_MIN_INT16)
- && o3tl::convertsToAtMost(o3tl::roundAway(ev->u.fval), SAL_MAX_INT16)))
- {
- return false;
- }
- auto tmp = static_cast<sal_Int16>(ev->u.fval);
- ev->u.sval = tmp;
- ev->et = ET_short;
- return true;
- }
- case ET_double:
- {
- if (!(o3tl::convertsToAtLeast(o3tl::roundAway(ev->u.dval), SAL_MIN_INT16)
- && o3tl::convertsToAtMost(o3tl::roundAway(ev->u.dval), SAL_MAX_INT16)))
- {
- return false;
- }
- auto tmp = static_cast<sal_Int16>(ev->u.dval);
- ev->u.sval = tmp;
- ev->et = ET_short;
- return true;
- }
- case ET_byte:
- {
- auto tmp = static_cast<sal_Int16>(ev->u.byval);
- ev->u.sval = tmp;
- ev->et = ET_short;
- return true;
- }
- default:
- OSL_ASSERT(false);
- return false;
- }
- case ET_ushort:
- switch (ev->et)
- {
- case ET_short:
- {
- if (ev->u.sval < 0)
- return false;
- auto tmp = static_cast<sal_uInt16>(ev->u.sval);
- ev->u.usval = tmp;
- ev->et = ET_ushort;
- return true;
- }
- case ET_ushort:
- return true;
- case ET_long:
- {
- if (ev->u.lval < 0 || ev->u.lval > SAL_MAX_UINT16)
- return false;
- auto tmp = static_cast<sal_uInt16>(ev->u.lval);
- ev->u.usval = tmp;
- ev->et = ET_ushort;
- return true;
- }
- case ET_ulong:
- {
- if (ev->u.ulval > SAL_MAX_UINT16)
- return false;
- auto tmp = static_cast<sal_uInt16>(ev->u.ulval);
- ev->u.usval = tmp;
- ev->et = ET_ushort;
- return true;
- }
- case ET_hyper:
- {
- if (ev->u.hval < 0 || ev->u.hval > SAL_MAX_UINT16)
- return false;
- auto tmp = static_cast<sal_uInt16>(ev->u.hval);
- ev->u.usval = tmp;
- ev->et = ET_ushort;
- return true;
- }
- case ET_uhyper:
- {
- if (ev->u.uhval > SAL_MAX_UINT16)
- return false;
- auto tmp = static_cast<sal_uInt16>(ev->u.uhval);
- ev->u.usval = tmp;
- ev->et = ET_ushort;
- return true;
- }
- case ET_boolean:
- {
- auto tmp = static_cast<sal_uInt16>(ev->u.bval);
- ev->u.usval = tmp;
- ev->et = ET_short;
- return true;
- }
- case ET_float:
- {
- if (ev->u.fval < 0.0
- || !o3tl::convertsToAtMost(o3tl::roundAway(ev->u.fval), SAL_MAX_UINT16))
- {
- return false;
- }
- auto tmp = static_cast<sal_uInt16>(ev->u.fval);
- ev->u.usval = tmp;
- ev->et = ET_short;
- return true;
- }
- case ET_double:
- {
- if (ev->u.dval < 0.0
- || !o3tl::convertsToAtMost(o3tl::roundAway(ev->u.dval), SAL_MAX_UINT16))
- {
- return false;
- }
- auto tmp = static_cast<sal_uInt16>(ev->u.dval);
- ev->u.usval = tmp;
- ev->et = ET_short;
- return true;
- }
- case ET_byte:
- {
- auto tmp = static_cast<sal_uInt16>(ev->u.byval);
- ev->u.usval = tmp;
- ev->et = ET_ushort;
- return true;
- }
- default:
- OSL_ASSERT(false);
- return false;
- }
- case ET_long:
- switch (ev->et)
- {
- case ET_short:
- {
- auto tmp = static_cast<sal_Int32>(ev->u.sval);
- ev->u.lval = tmp;
- ev->et = ET_long;
- return true;
- }
- case ET_ushort:
- {
- auto tmp = static_cast<sal_Int32>(ev->u.usval);
- ev->u.lval = tmp;
- ev->et = ET_long;
- return true;
- }
- case ET_long:
- return true;
- case ET_ulong:
- {
- if (ev->u.ulval > SAL_MAX_INT32)
- return false;
- auto tmp = static_cast<sal_Int32>(ev->u.ulval);
- ev->u.lval = tmp;
- ev->et = ET_long;
- return true;
- }
- case ET_hyper:
- {
- if (ev->u.hval < SAL_MIN_INT32 || ev->u.hval > SAL_MAX_INT32)
- return false;
- auto tmp = static_cast<sal_Int32>(ev->u.hval);
- ev->u.lval = tmp;
- ev->et = ET_long;
- return true;
- }
- case ET_uhyper:
- {
- if (ev->u.uhval > SAL_MAX_INT32)
- return false;
- auto tmp = static_cast<sal_Int32>(ev->u.uhval);
- ev->u.lval = tmp;
- ev->et = ET_long;
- return true;
- }
- case ET_boolean:
- {
- auto tmp = static_cast<sal_Int32>(ev->u.bval);
- ev->u.lval = tmp;
- ev->et = ET_long;
- return true;
- }
- case ET_float:
- {
- if (!(o3tl::convertsToAtLeast(o3tl::roundAway(ev->u.fval), SAL_MIN_INT32)
- && o3tl::convertsToAtMost(o3tl::roundAway(ev->u.fval), SAL_MAX_INT32)))
- {
- return false;
- }
- auto tmp = static_cast<sal_Int32>(ev->u.fval);
- ev->u.lval = tmp;
- ev->et = ET_long;
- return true;
- }
- case ET_double:
- {
- if (!(o3tl::convertsToAtLeast(o3tl::roundAway(ev->u.dval), SAL_MIN_INT32)
- && o3tl::convertsToAtMost(o3tl::roundAway(ev->u.dval), SAL_MAX_INT32)))
- {
- return false;
- }
- auto tmp = static_cast<sal_Int32>(ev->u.dval);
- ev->u.lval = tmp;
- ev->et = ET_long;
- return true;
- }
- case ET_byte:
- {
- auto tmp = static_cast<sal_Int32>(ev->u.byval);
- ev->u.lval = tmp;
- ev->et = ET_long;
- return true;
- }
- default:
- OSL_ASSERT(false);
- return false;
- }
- case ET_ulong:
- switch (ev->et)
- {
- case ET_short:
- {
- if (ev->u.sval < 0)
- return false;
- auto tmp = static_cast<sal_uInt32>(ev->u.sval);
- ev->u.ulval = tmp;
- ev->et = ET_ulong;
- return true;
- }
- case ET_ushort:
- {
- auto tmp = static_cast<sal_uInt32>(ev->u.usval);
- ev->u.ulval = tmp;
- ev->et = ET_ulong;
- return true;
- }
- case ET_long:
- {
- if (ev->u.lval < 0)
- return false;
- auto tmp = static_cast<sal_uInt32>(ev->u.lval);
- ev->u.ulval = tmp;
- ev->et = ET_ulong;
- return true;
- }
- case ET_ulong:
- return true;
- case ET_hyper:
- {
- if (ev->u.hval < 0 || ev->u.hval > SAL_MAX_UINT32)
- return false;
- auto tmp = static_cast<sal_uInt32>(ev->u.hval);
- ev->u.lval = tmp;
- ev->et = ET_ulong;
- return true;
- }
- case ET_uhyper:
- {
- if (ev->u.uhval > SAL_MAX_UINT32)
- return false;
- auto tmp = static_cast<sal_uInt32>(ev->u.uhval);
- ev->u.ulval = tmp;
- ev->et = ET_ulong;
- return true;
- }
- case ET_boolean:
- {
- auto tmp = static_cast<sal_uInt32>(ev->u.bval);
- ev->u.ulval = tmp;
- ev->et = ET_ulong;
- return true;
- }
- case ET_float:
- {
- if (ev->u.fval < 0.0
- || !o3tl::convertsToAtMost(o3tl::roundAway(ev->u.fval), SAL_MAX_UINT32))
- {
- return false;
- }
- auto tmp = static_cast<sal_uInt32>(ev->u.fval);
- ev->u.ulval = tmp;
- ev->et = ET_ulong;
- return true;
- }
- case ET_double:
- {
- if (ev->u.dval < 0.0
- || !o3tl::convertsToAtMost(o3tl::roundAway(ev->u.dval), SAL_MAX_UINT32))
- {
- return false;
- }
- auto tmp = static_cast<sal_uInt32>(ev->u.dval);
- ev->u.ulval = tmp;
- ev->et = ET_ulong;
- return true;
- }
- case ET_byte:
- {
- auto tmp = static_cast<sal_uInt32>(ev->u.byval);
- ev->u.ulval = tmp;
- ev->et = ET_ulong;
- return true;
- }
- default:
- OSL_ASSERT(false);
- return false;
- }
- case ET_hyper:
- switch (ev->et)
- {
- case ET_short:
- {
- auto tmp = static_cast<sal_Int64>(ev->u.sval);
- ev->u.hval = tmp;
- ev->et = ET_hyper;
- return true;
- }
- case ET_ushort:
- {
- auto tmp = static_cast<sal_Int64>(ev->u.usval);
- ev->u.hval = tmp;
- ev->et = ET_hyper;
- return true;
- }
- case ET_long:
- {
- auto tmp = static_cast<sal_Int64>(ev->u.lval);
- ev->u.hval = tmp;
- ev->et = ET_hyper;
- return true;
- }
- case ET_ulong:
- {
- auto tmp = static_cast<sal_Int64>(ev->u.ulval);
- ev->u.hval = tmp;
- ev->et = ET_hyper;
- return true;
- }
- case ET_hyper:
- return true;
- case ET_uhyper:
- {
- if (ev->u.uhval > SAL_MAX_INT64)
- return false;
- auto tmp = static_cast<sal_Int64>(ev->u.uhval);
- ev->u.hval = tmp;
- ev->et = ET_long;
- return true;
- }
- case ET_boolean:
- {
- auto tmp = static_cast<sal_Int64>(ev->u.bval);
- ev->u.hval = tmp;
- ev->et = ET_hyper;
- return true;
- }
- case ET_float:
- {
- if (!(o3tl::convertsToAtLeast(o3tl::roundAway(ev->u.fval), SAL_MIN_INT64)
- && o3tl::convertsToAtMost(o3tl::roundAway(ev->u.fval), SAL_MAX_INT64)))
- {
- return false;
- }
- auto tmp = static_cast<sal_Int64>(ev->u.fval);
- ev->u.hval = tmp;
- ev->et = ET_hyper;
- return true;
- }
- case ET_double:
- {
- if (!(o3tl::convertsToAtLeast(o3tl::roundAway(ev->u.dval), SAL_MIN_INT64)
- && o3tl::convertsToAtMost(o3tl::roundAway(ev->u.dval), SAL_MAX_INT64)))
- {
- return false;
- }
- auto tmp = static_cast<sal_Int64>(ev->u.dval);
- ev->u.hval = tmp;
- ev->et = ET_hyper;
- return true;
- }
- case ET_byte:
- {
- auto tmp = static_cast<sal_Int64>(ev->u.byval);
- ev->u.hval = tmp;
- ev->et = ET_hyper;
- return true;
- }
- default:
- OSL_ASSERT(false);
- return false;
- }
- case ET_uhyper:
- switch (ev->et)
- {
- case ET_short:
- {
- if (ev->u.sval < 0)
- return false;
- auto tmp = static_cast<sal_uInt64>(ev->u.sval);
- ev->u.uhval = tmp;
- ev->et = ET_uhyper;
- return true;
- }
- case ET_ushort:
- {
- auto tmp = static_cast<sal_uInt64>(ev->u.usval);
- ev->u.uhval = tmp;
- ev->et = ET_uhyper;
- return true;
- }
- case ET_long:
- {
- if (ev->u.lval < 0)
- return false;
- auto tmp = static_cast<sal_uInt64>(ev->u.lval);
- ev->u.uhval = tmp;
- ev->et = ET_uhyper;
- return true;
- }
- case ET_ulong:
- {
- auto tmp = static_cast<sal_uInt64>(ev->u.ulval);
- ev->u.uhval = tmp;
- ev->et = ET_uhyper;
- return true;
- }
- case ET_hyper:
- {
- if (ev->u.hval < 0)
- return false;
- auto tmp = static_cast<sal_uInt64>(ev->u.hval);
- ev->u.uhval = tmp;
- ev->et = ET_uhyper;
- return true;
- }
- case ET_uhyper:
- return true;
- case ET_boolean:
- {
- auto tmp = static_cast<sal_uInt64>(ev->u.bval);
- ev->u.uhval = tmp;
- ev->et = ET_uhyper;
- return true;
- }
- case ET_float:
- {
- if (ev->u.fval < 0.0
- || !o3tl::convertsToAtMost(o3tl::roundAway(ev->u.fval), SAL_MAX_UINT64))
- {
- return false;
- }
- auto tmp = static_cast<sal_uInt64>(ev->u.fval);
- ev->u.uhval = tmp;
- ev->et = ET_uhyper;
- return true;
- }
- case ET_double:
- {
- if (ev->u.dval < 0.0
- || !o3tl::convertsToAtMost(o3tl::roundAway(ev->u.dval), SAL_MAX_UINT64))
- {
- return false;
- }
- auto tmp = static_cast<sal_uInt64>(ev->u.dval);
- ev->u.uhval = tmp;
- ev->et = ET_uhyper;
- return true;
- }
- case ET_byte:
- {
- auto tmp = static_cast<sal_uInt64>(ev->u.byval);
- ev->u.uhval = tmp;
- ev->et = ET_uhyper;
- return true;
- }
- default:
- OSL_ASSERT(false);
- return false;
- }
- case ET_boolean:
- switch (ev->et)
- {
- case ET_short:
- ev->u.bval = ev->u.sval != 0;
- ev->et = ET_boolean;
- return true;
- case ET_ushort:
- ev->u.bval = ev->u.usval != 0;
- ev->et = ET_boolean;
- return true;
- case ET_long:
- ev->u.bval = ev->u.lval != 0;
- ev->et = ET_boolean;
- return true;
- case ET_ulong:
- ev->u.bval = ev->u.ulval != 0;
- ev->et = ET_boolean;
- return true;
- case ET_hyper:
- ev->u.bval = ev->u.hval != 0;
- ev->et = ET_boolean;
- return true;
- case ET_uhyper:
- ev->u.bval = ev->u.uhval != 0;
- ev->et = ET_boolean;
- return true;
- case ET_boolean:
- return true;
- case ET_float:
- ev->u.bval = ev->u.fval != 0.0;
- ev->et = ET_boolean;
- return true;
- case ET_double:
- ev->u.bval = ev->u.dval != 0.0;
- ev->et = ET_boolean;
- return true;
- case ET_byte:
- ev->u.bval = ev->u.byval != 0;
- ev->et = ET_boolean;
- return true;
- default:
- OSL_ASSERT(false);
- return false;
- }
- case ET_float:
- switch (ev->et)
- {
- case ET_short:
- {
- auto tmp = static_cast<float>(ev->u.sval);
- ev->u.fval = tmp;
- ev->et = ET_float;
- return true;
- }
- case ET_ushort:
- {
- auto tmp = static_cast<float>(ev->u.usval);
- ev->u.fval = tmp;
- ev->et = ET_float;
- return true;
- }
- case ET_long:
- {
- auto tmp = static_cast<float>(ev->u.lval);
- ev->u.fval = tmp;
- ev->et = ET_float;
- return true;
- }
- case ET_ulong:
- {
- auto tmp = static_cast<float>(ev->u.ulval);
- ev->u.fval = tmp;
- ev->et = ET_float;
- return true;
- }
- case ET_hyper:
- {
- auto tmp = static_cast<float>(ev->u.hval);
- ev->u.fval = tmp;
- ev->et = ET_float;
- return true;
- }
- case ET_uhyper:
- {
- if (static_cast<float>(ev->u.ulval) > FLT_MAX)
- return false;
- auto tmp = static_cast<float>(ev->u.ulval);
- ev->u.fval = tmp;
- ev->et = ET_float;
- return true;
- }
- case ET_boolean:
- ev->u.fval = ev->u.bval ? 1.0f : 0.0f;
- ev->et = ET_float;
- return true;
- case ET_float:
- return true;
- case ET_double:
- {
- if (static_cast<float>(ev->u.dval) > FLT_MAX
- || static_cast<float>(ev->u.dval) < -FLT_MAX)
- return false;
- auto tmp = static_cast<float>(ev->u.dval);
- ev->u.fval = tmp;
- ev->et = ET_float;
- return true;
- }
- case ET_byte:
- {
- auto tmp = static_cast<float>(ev->u.byval);
- ev->u.fval = tmp;
- ev->et = ET_float;
- return true;
- }
- default:
- OSL_ASSERT(false);
- return false;
- }
- case ET_double:
- switch (ev->et)
- {
- case ET_short:
- {
- auto tmp = static_cast<double>(ev->u.sval);
- ev->u.dval = tmp;
- ev->et = ET_double;
- return true;
- }
- case ET_ushort:
- {
- auto tmp = static_cast<double>(ev->u.usval);
- ev->u.dval = tmp;
- ev->et = ET_double;
- return true;
- }
- case ET_long:
- {
- auto tmp = static_cast<double>(ev->u.lval);
- ev->u.dval = tmp;
- ev->et = ET_double;
- return true;
- }
- case ET_ulong:
- {
- auto tmp = static_cast<double>(ev->u.ulval);
- ev->u.dval = tmp;
- ev->et = ET_double;
- return true;
- }
- case ET_hyper:
- {
- auto tmp = static_cast<double>(ev->u.hval);
- ev->u.dval = tmp;
- ev->et = ET_double;
- return true;
- }
- case ET_uhyper:
- {
- if (ev->u.dval > FLT_MAX || ev->u.dval < -FLT_MAX)
- return false;
- auto tmp = static_cast<double>(ev->u.ulval);
- ev->u.dval = tmp;
- ev->et = ET_double;
- return true;
- }
- case ET_boolean:
- ev->u.dval = ev->u.bval ? 1.0 : 0.0;
- ev->et = ET_double;
- return true;
- case ET_float:
- {
- auto tmp = static_cast<double>(ev->u.fval);
- ev->u.dval = tmp;
- ev->et = ET_double;
- return true;
- }
- case ET_double:
- return true;
- case ET_byte:
- {
- auto tmp = static_cast<double>(ev->u.byval);
- ev->u.dval = tmp;
- ev->et = ET_double;
- return true;
- }
- default:
- OSL_ASSERT(false);
- return false;
- }
- case ET_byte:
- switch (ev->et)
- {
- case ET_short:
- {
- if (ev->u.sval < SAL_MIN_INT8 || ev->u.sval > SAL_MAX_UINT8)
- return false;
- auto tmp = static_cast<unsigned char>(ev->u.sval);
- ev->u.byval = tmp;
- ev->et = ET_byte;
- return true;
- }
- case ET_ushort:
- {
- if (ev->u.usval > SAL_MAX_UINT8)
- return false;
- auto tmp = static_cast<unsigned char>(ev->u.usval);
- ev->u.byval = tmp;
- ev->et = ET_byte;
- return true;
- }
- case ET_long:
- {
- if (ev->u.lval < SAL_MIN_INT8 || ev->u.lval > SAL_MAX_UINT8)
- return false;
- auto tmp = static_cast<unsigned char>(ev->u.lval);
- ev->u.byval = tmp;
- ev->et = ET_byte;
- return true;
- }
- case ET_ulong:
- {
- if (ev->u.ulval > SAL_MAX_UINT8)
- return false;
- auto tmp = static_cast<unsigned char>(ev->u.ulval);
- ev->u.byval = tmp;
- ev->et = ET_byte;
- return true;
- }
- case ET_hyper:
- {
- if (ev->u.hval < SAL_MIN_INT8 || ev->u.hval > SAL_MAX_UINT8)
- return false;
- auto tmp = static_cast<unsigned char>(ev->u.hval);
- ev->u.byval = tmp;
- ev->et = ET_byte;
- return true;
- }
- case ET_uhyper:
- {
- if (ev->u.uhval > SAL_MAX_UINT8)
- return false;
- auto tmp = static_cast<unsigned char>(ev->u.uhval);
- ev->u.byval = tmp;
- ev->et = ET_byte;
- return true;
- }
- case ET_boolean:
- ev->u.byval = ev->u.bval ? 1 : 0;
- ev->et = ET_byte;
- return true;
- case ET_float:
- {
- if (!(o3tl::convertsToAtLeast(o3tl::roundAway(ev->u.fval), SAL_MIN_INT8)
- && o3tl::convertsToAtMost(o3tl::roundAway(ev->u.fval), SAL_MAX_UINT8)))
- {
- return false;
- }
- auto tmp = static_cast<unsigned char>(static_cast<sal_Int32>(ev->u.fval));
- ev->u.byval = tmp;
- ev->et = ET_byte;
- return true;
- }
- case ET_double:
- {
- if (!(o3tl::convertsToAtLeast(o3tl::roundAway(ev->u.dval), SAL_MIN_INT8)
- && o3tl::convertsToAtMost(o3tl::roundAway(ev->u.dval), SAL_MAX_UINT8)))
- {
- return false;
- }
- auto tmp = static_cast<unsigned char>(static_cast<sal_Int32>(ev->u.dval));
- ev->u.byval = tmp;
- ev->et = ET_byte;
- return true;
- }
- case ET_byte:
- return true;
- default:
- OSL_ASSERT(false);
- return false;
- }
- default:
- OSL_ASSERT(false);
- return false;
- }
-}
-
-bool AstExpression::coerce(ExprType t)
-{
- /*
- * Is it already of the right type?
- */
- if (m_exprValue != nullptr && m_exprValue->et == t)
- return true;
- /*
- * OK, must coerce
- *
- * First, evaluate it, then try to coerce result type
- * If already evaluated, return the result
- */
- evaluate();
- if (m_exprValue == nullptr)
- return false;
-
- if (!coerce_value(m_exprValue.get(), t))
- m_exprValue.reset();
-
- return m_exprValue != nullptr;
-}
-
-bool AstExpression::compareLong(AstExpression* pExpr)
-{
- bool bRet = false;
- if (m_combOperator != pExpr->m_combOperator)
- return bRet;
- evaluate();
- pExpr->evaluate();
- if (m_exprValue == nullptr || pExpr->getExprValue() == nullptr)
- return bRet;
- if (m_exprValue->et != pExpr->getExprValue()->et)
- return bRet;
- switch (m_exprValue->et)
- {
- case ET_long:
- bRet = m_exprValue->u.lval == pExpr->getExprValue()->u.lval;
- break;
- default:
- OSL_ASSERT(false);
- bRet = false;
- break;
- }
- return bRet;
-}
-
-void AstExpression::evaluate()
-{
- /*
- * Already evaluated?
- */
- if (m_exprValue != nullptr)
- return;
- /*
- * OK, must evaluate operator
- */
- switch (m_combOperator)
- {
- case ExprComb::Add:
- case ExprComb::Minus:
- case ExprComb::Mul:
- case ExprComb::Div:
- case ExprComb::Mod:
- m_exprValue = eval_bin_op();
- break;
- case ExprComb::Or:
- case ExprComb::Xor:
- case ExprComb::And:
- case ExprComb::Left:
- case ExprComb::Right:
- m_exprValue = eval_bit_op();
- break;
- case ExprComb::UPlus:
- case ExprComb::UMinus:
- m_exprValue = eval_un_op();
- break;
- case ExprComb::Symbol:
- m_exprValue = eval_symbol();
- break;
- case ExprComb::NONE:
- break;
- }
-}
-
-std::unique_ptr<AstExprValue> AstExpression::eval_bin_op()
-{
- ExprType eType = ET_double;
-
- if (m_combOperator == ExprComb::Mod)
- eType = ET_hyper;
-
- if (m_subExpr1 == nullptr || m_subExpr2 == nullptr)
- return nullptr;
- m_subExpr1->evaluate();
- if (m_subExpr1->getExprValue() == nullptr)
- return nullptr;
- if (!m_subExpr1->coerce(eType))
- return nullptr;
- m_subExpr2->evaluate();
- if (m_subExpr2->getExprValue() == nullptr)
- return nullptr;
- if (!m_subExpr2->coerce(eType))
- return nullptr;
-
- std::unique_ptr<AstExprValue> retval(new AstExprValue);
- retval->et = eType;
-
- switch (m_combOperator)
- {
- case ExprComb::Mod:
- if (m_subExpr2->getExprValue()->u.hval == 0)
- return nullptr;
- retval->u.hval
- = m_subExpr1->getExprValue()->u.hval % m_subExpr2->getExprValue()->u.hval;
- break;
- case ExprComb::Add:
- retval->u.dval
- = m_subExpr1->getExprValue()->u.dval + m_subExpr2->getExprValue()->u.dval;
- break;
- case ExprComb::Minus:
- retval->u.dval
- = m_subExpr1->getExprValue()->u.dval - m_subExpr2->getExprValue()->u.dval;
- break;
- case ExprComb::Mul:
- retval->u.dval
- = m_subExpr1->getExprValue()->u.dval * m_subExpr2->getExprValue()->u.dval;
- break;
- case ExprComb::Div:
- if (m_subExpr2->getExprValue()->u.dval == 0.0)
- return nullptr;
- retval->u.dval
- = m_subExpr1->getExprValue()->u.dval / m_subExpr2->getExprValue()->u.dval;
- break;
- default:
- return nullptr;
- }
-
- return retval;
-}
-
-std::unique_ptr<AstExprValue> AstExpression::eval_bit_op()
-{
- if (m_subExpr1 == nullptr || m_subExpr2 == nullptr)
- return nullptr;
- m_subExpr1->evaluate();
- if (m_subExpr1->getExprValue() == nullptr)
- return nullptr;
- if (!m_subExpr1->coerce(ET_long))
- return nullptr;
- m_subExpr2->evaluate();
- if (m_subExpr2->getExprValue() == nullptr)
- return nullptr;
- if (!m_subExpr2->coerce(ET_long))
- return nullptr;
-
- std::unique_ptr<AstExprValue> retval(new AstExprValue);
- retval->et = ET_long;
-
- switch (m_combOperator)
- {
- case ExprComb::Or:
- retval->u.lval
- = m_subExpr1->getExprValue()->u.lval | m_subExpr2->getExprValue()->u.lval;
- break;
- case ExprComb::Xor:
- retval->u.lval
- = m_subExpr1->getExprValue()->u.lval ^ m_subExpr2->getExprValue()->u.lval;
- break;
- case ExprComb::And:
- retval->u.lval
- = m_subExpr1->getExprValue()->u.lval & m_subExpr2->getExprValue()->u.lval;
- break;
- case ExprComb::Left:
- retval->u.lval = m_subExpr1->getExprValue()->u.lval
- << m_subExpr2->getExprValue()->u.lval;
- break;
- case ExprComb::Right:
- retval->u.lval
- = m_subExpr1->getExprValue()->u.lval >> m_subExpr2->getExprValue()->u.lval;
- break;
- default:
- return nullptr;
- }
-
- return retval;
-}
-
-std::unique_ptr<AstExprValue> AstExpression::eval_un_op()
-{
- if (m_subExpr1 == nullptr)
- return nullptr;
- m_subExpr1->evaluate();
- if (m_subExpr1->getExprValue() == nullptr)
- return nullptr;
- if (!m_subExpr1->coerce(ET_double))
- return nullptr;
-
- std::unique_ptr<AstExprValue> retval(new AstExprValue);
- retval->et = ET_double;
-
- switch (m_combOperator)
- {
- case ExprComb::UPlus:
- retval->u.lval = m_subExpr1->getExprValue()->u.lval;
- break;
- case ExprComb::UMinus:
- retval->u.lval = -(m_subExpr1->getExprValue()->u.lval);
- break;
- default:
- return nullptr;
- }
-
- return retval;
-}
-
-std::unique_ptr<AstExprValue> AstExpression::eval_symbol()
-{
- AstScope* pScope = nullptr;
- AstDeclaration* pDecl;
- AstConstant* pConst;
-
- /*
- * Is there a symbol stored?
- */
- if (!m_xSymbolicName)
- {
- ErrorHandler::evalError(this);
- return nullptr;
- }
- /*
- * Get current scope for lookup
- */
- if (idlc()->scopes()->depth() > 0)
- pScope = idlc()->scopes()->topNonNull();
- if (!pScope)
- {
- ErrorHandler::lookupError(*m_xSymbolicName);
- return nullptr;
- }
- /*
- * Do lookup
- */
- pDecl = pScope->lookupByName(*m_xSymbolicName);
- if (pDecl == nullptr)
- {
- ErrorHandler::lookupError(*m_xSymbolicName);
- return nullptr;
- }
- /*
- * Is it a constant?
- */
- if (pDecl->getNodeType() != NT_const && pDecl->getNodeType() != NT_enum_val)
- {
- ErrorHandler::constantExpected(pDecl, *m_xSymbolicName);
- return nullptr;
- }
- if (!ErrorHandler::checkPublished(pDecl))
- {
- return nullptr;
- }
- /*
- * OK, now evaluate the constant we just got, to produce its value
- */
- pConst = static_cast<AstConstant*>(pDecl);
- pConst->getConstValue()->evaluate();
- auto const val = pConst->getConstValue()->getExprValue();
- return val == nullptr ? nullptr : std::make_unique<AstExprValue>(*val);
-}
-
-OString AstExpression::toString()
-{
- OString exprStr;
- if (m_combOperator == ExprComb::Symbol)
- return m_xSymbolicName ? *m_xSymbolicName : OString("<Undefined Name>");
-
- if (m_exprValue)
- {
- switch (m_exprValue->et)
- {
- case ET_short:
- return OString::number(m_exprValue->u.sval);
- case ET_ushort:
- return OString::number(m_exprValue->u.usval);
- case ET_long:
- return OString::number(m_exprValue->u.lval);
- case ET_ulong:
- return OString::number(m_exprValue->u.ulval);
- case ET_hyper:
- return OString::number(m_exprValue->u.hval);
- case ET_uhyper:
- return OString::number(m_exprValue->u.uhval);
- case ET_float:
- return OString::number(m_exprValue->u.fval);
- case ET_double:
- return OString::number(m_exprValue->u.dval);
- case ET_byte:
- return OString::number(m_exprValue->u.byval);
- case ET_boolean:
- if (m_exprValue->u.lval == 0)
- return "FALSE";
- else
- return "TRUE";
- default:
- OSL_ASSERT(false);
- return OString();
- }
- }
-
- switch (m_combOperator)
- {
- case ExprComb::UPlus:
- exprStr += "+";
- break;
- case ExprComb::UMinus:
- exprStr += "-";
- break;
- default:
- break;
- }
- if (m_subExpr1)
- exprStr += m_subExpr1->toString();
- switch (m_combOperator)
- {
- case ExprComb::Add:
- exprStr += " + ";
- break;
- case ExprComb::Minus:
- exprStr += " - ";
- break;
- case ExprComb::Mul:
- exprStr += " * ";
- break;
- case ExprComb::Div:
- exprStr += " / ";
- break;
- case ExprComb::Mod:
- exprStr += " % ";
- break;
- case ExprComb::Or:
- exprStr += " | ";
- break;
- case ExprComb::Xor:
- exprStr += " ^ ";
- break;
- case ExprComb::And:
- exprStr += " & ";
- break;
- case ExprComb::Left:
- exprStr += " << ";
- break;
- case ExprComb::Right:
- exprStr += " >> ";
- break;
- default:
- break;
- }
-
- if (m_subExpr2)
- exprStr += m_subExpr2->toString();
-
- return exprStr;
-}
-
-// Convert the type of an AST_Expression to a char *
-const char* exprTypeToString(ExprType t)
-{
- switch (t)
- {
- case ET_short:
- return "short";
- case ET_ushort:
- return "unsigned short";
- case ET_long:
- return "long";
- case ET_ulong:
- return "unsigned long";
- case ET_hyper:
- return "hyper";
- case ET_uhyper:
- return "unsigned hyper";
- case ET_float:
- return "float";
- case ET_double:
- return "double";
- case ET_char:
- return "char";
- case ET_byte:
- return "byte";
- case ET_boolean:
- return "boolean";
- case ET_string:
- return "string";
- case ET_any:
- return "any";
- case ET_type:
- return "type";
- case ET_void:
- return "void";
- case ET_none:
- return "none";
- }
-
- return "unknown";
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/source/astinterface.cxx b/idlc/source/astinterface.cxx
deleted file mode 100644
index 50e24d1fd667..000000000000
--- a/idlc/source/astinterface.cxx
+++ /dev/null
@@ -1,399 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <astinterface.hxx>
-#include <astattribute.hxx>
-#include <astoperation.hxx>
-#include <idlc.hxx>
-
-#include <registry/version.h>
-#include <registry/writer.hxx>
-
-#include <osl/diagnose.h>
-
-AstInterface::AstInterface(const OString& name,
- AstInterface const * pInherits,
- AstScope* pScope)
- : AstType(NT_interface, name, pScope)
- , AstScope(NT_interface)
- , m_mandatoryInterfaces(0)
- , m_bIsDefined(false)
- , m_bSingleInheritance(pInherits != nullptr)
-{
- if (pInherits != nullptr) {
- addInheritedInterface(pInherits, false, OUString());
- }
-}
-
-AstInterface::~AstInterface()
-{
-}
-
-AstInterface::DoubleDeclarations AstInterface::checkInheritedInterfaceClashes(
- AstInterface const * ifc, bool optional) const
-{
- DoubleDeclarations doubleDecls;
- std::set< OString > seen;
- checkInheritedInterfaceClashes(
- doubleDecls, seen, ifc, true, optional, optional);
- return doubleDecls;
-}
-
-void AstInterface::addInheritedInterface(
- AstType const * ifc, bool optional, OUString const & documentation)
-{
- m_inheritedInterfaces.emplace_back(ifc, optional, documentation);
- if (!optional) {
- ++m_mandatoryInterfaces;
- }
- AstInterface const * resolved = resolveInterfaceTypedefs(ifc);
- addVisibleInterface(resolved, true, optional);
- if (optional) {
- addOptionalVisibleMembers(resolved);
- }
-}
-
-AstInterface::DoubleMemberDeclarations AstInterface::checkMemberClashes(
- AstDeclaration const * member) const
-{
- DoubleMemberDeclarations doubleMembers;
- checkMemberClashes(doubleMembers, member, true);
- return doubleMembers;
-}
-
-void AstInterface::addMember(AstDeclaration /*TODO: const*/ * member) {
- addDeclaration(member);
- m_visibleMembers.emplace(member->getLocalName(), VisibleMember(member));
-}
-
-void AstInterface::forwardDefined(AstInterface const & def)
-{
- setImported(def.isImported());
- setInMainfile(def.isInMainfile());
- setLineNumber(def.getLineNumber());
- setFileName(def.getFileName());
- setDocumentation(def.getDocumentation());
- m_inheritedInterfaces = def.m_inheritedInterfaces;
- m_mandatoryInterfaces = def.m_mandatoryInterfaces;
- m_bIsDefined = true;
-}
-
-bool AstInterface::dump(RegistryKey& rKey)
-{
- if ( !isDefined() )
- return true;
-
- RegistryKey localKey;
- if (rKey.createKey( OStringToOUString(getFullName(), RTL_TEXTENCODING_UTF8 ), localKey) != RegError::NO_ERROR)
- {
- fprintf(stderr, "%s: warning, could not create key '%s' in '%s'\n",
- idlc()->getOptions()->getProgramName().getStr(),
- getFullName().getStr(), OUStringToOString(rKey.getRegistryName(), RTL_TEXTENCODING_UTF8).getStr());
- return false;
- }
-
- if (m_mandatoryInterfaces > SAL_MAX_UINT16
- || m_inheritedInterfaces.size() - m_mandatoryInterfaces
- > SAL_MAX_UINT16)
- {
- fprintf(
- stderr, "%s: interface %s has too many direct base interfaces\n",
- idlc()->getOptions()->getProgramName().getStr(),
- getScopedName().getStr());
- return false;
- }
- sal_uInt16 nBaseTypes = static_cast< sal_uInt16 >(m_mandatoryInterfaces);
- sal_uInt16 nAttributes = 0;
- sal_uInt16 nMethods = 0;
- sal_uInt16 nReferences = static_cast< sal_uInt16 >(
- m_inheritedInterfaces.size() - m_mandatoryInterfaces);
- typereg_Version version
- = (nBaseTypes <= 1 && nReferences == 0 && !m_bPublished
- ? TYPEREG_VERSION_0 : TYPEREG_VERSION_1);
- for (DeclList::const_iterator i(getIteratorBegin()); i != getIteratorEnd();
- ++i)
- {
- switch ((*i)->getNodeType()) {
- case NT_attribute:
- {
- if (!increment(&nAttributes, "attributes")) {
- return false;
- }
- AstAttribute * attr = static_cast<AstAttribute *>(*i);
- if (attr->isBound()) {
- version = TYPEREG_VERSION_1;
- }
- DeclList::size_type getCount = attr->getGetExceptionCount();
- if (getCount > SAL_MAX_UINT16) {
- fprintf(
- stderr,
- ("%s: raises clause of getter for attribute %s of"
- " interface %s is too long\n"),
- idlc()->getOptions()->getProgramName().getStr(),
- (*i)->getLocalName().getStr(),
- getScopedName().getStr());
- return false;
- }
- if (getCount > 0) {
- version = TYPEREG_VERSION_1;
- if (!increment(&nMethods, "attributes")) {
- return false;
- }
- }
- DeclList::size_type setCount = attr->getSetExceptionCount();
- if (setCount > SAL_MAX_UINT16) {
- fprintf(
- stderr,
- ("%s: raises clause of setter for attribute %s of"
- " interface %s is too long\n"),
- idlc()->getOptions()->getProgramName().getStr(),
- (*i)->getLocalName().getStr(),
- getScopedName().getStr());
- return false;
- }
- if (setCount > 0) {
- version = TYPEREG_VERSION_1;
- if (!increment(&nMethods, "attributes")) {
- return false;
- }
- }
- break;
- }
-
- case NT_operation:
- if (!increment(&nMethods, "methods")) {
- return false;
- }
- break;
-
- default:
- OSL_ASSERT(false);
- break;
- }
- }
-
- typereg::Writer aBlob(
- version, getDocumentation(), "", RT_TYPE_INTERFACE, m_bPublished,
- OStringToOUString(getRelativName(), RTL_TEXTENCODING_UTF8), nBaseTypes,
- nAttributes, nMethods, nReferences);
-
- sal_uInt16 superTypeIndex = 0;
- sal_uInt16 referenceIndex = 0;
- for (auto const& elem : m_inheritedInterfaces)
- {
- if (elem.isOptional()) {
- aBlob.setReferenceData(
- referenceIndex++, elem.getDocumentation(), RTReferenceType::SUPPORTS,
- RTFieldAccess::OPTIONAL,
- OStringToOUString(
- elem.getInterface()->getRelativName(),
- RTL_TEXTENCODING_UTF8));
- } else {
- aBlob.setSuperTypeName(
- superTypeIndex++,
- OStringToOUString(
- elem.getInterface()->getRelativName(),
- RTL_TEXTENCODING_UTF8));
- }
- }
-
- sal_uInt16 attributeIndex = 0;
- sal_uInt16 methodIndex = 0;
- for (DeclList::const_iterator i(getIteratorBegin()); i != getIteratorEnd();
- ++i)
- {
- switch ((*i)->getNodeType()) {
- case NT_attribute:
- static_cast<AstAttribute *>(*i)->dumpBlob(
- aBlob, attributeIndex++, &methodIndex);
- break;
-
- case NT_operation:
- static_cast<AstOperation *>(*i)->dumpBlob(aBlob, methodIndex++);
- break;
-
- default:
- OSL_ASSERT(false);
- break;
- }
- }
-
- sal_uInt32 aBlobSize;
- void const * pBlob = aBlob.getBlob(&aBlobSize);
-
- if (localKey.setValue("", RegValueType::BINARY, const_cast<RegValue>(pBlob), aBlobSize) != RegError::NO_ERROR)
- {
- fprintf(stderr, "%s: warning, could not set value of key \"%s\" in %s\n",
- idlc()->getOptions()->getProgramName().getStr(),
- getFullName().getStr(), OUStringToOString(localKey.getRegistryName(), RTL_TEXTENCODING_UTF8).getStr());
- return false;
- }
-
- return true;
-}
-
-void AstInterface::checkInheritedInterfaceClashes(
- DoubleDeclarations & doubleDeclarations,
- std::set< OString > & seenInterfaces, AstInterface const * ifc,
- bool direct, bool optional, bool mainOptional) const
-{
- if (!(direct || optional
- || seenInterfaces.insert(ifc->getScopedName()).second))
- return;
-
- VisibleInterfaces::const_iterator visible(
- m_visibleInterfaces.find(ifc->getScopedName()));
- if (visible != m_visibleInterfaces.end()) {
- switch (visible->second) {
- case INTERFACE_INDIRECT_OPTIONAL:
- if (direct && optional) {
- doubleDeclarations.interfaces.push_back(ifc);
- return;
- }
- break;
-
- case INTERFACE_DIRECT_OPTIONAL:
- if (direct || !mainOptional) {
- doubleDeclarations.interfaces.push_back(ifc);
- }
- return;
-
- case INTERFACE_INDIRECT_MANDATORY:
- if (direct) {
- doubleDeclarations.interfaces.push_back(ifc);
- }
- return;
-
- case INTERFACE_DIRECT_MANDATORY:
- if (direct || (!optional && !mainOptional)) {
- doubleDeclarations.interfaces.push_back(ifc);
- }
- return;
- }
- }
- if (!direct && optional)
- return;
-
- for (DeclList::const_iterator i(ifc->getIteratorBegin());
- i != ifc->getIteratorEnd(); ++i)
- {
- checkMemberClashes(
- doubleDeclarations.members, *i, !mainOptional);
- }
- for (auto const& elem : ifc->m_inheritedInterfaces)
- {
- checkInheritedInterfaceClashes(
- doubleDeclarations, seenInterfaces, elem.getResolved(),
- false, elem.isOptional(), mainOptional);
- }
-}
-
-void AstInterface::checkMemberClashes(
- DoubleMemberDeclarations & doubleMembers, AstDeclaration const * member,
- bool checkOptional) const
-{
- VisibleMembers::const_iterator i(
- m_visibleMembers.find(member->getLocalName()));
- if (i == m_visibleMembers.end())
- return;
-
- if (i->second.mandatory != nullptr) {
- if (i->second.mandatory->getScopedName() != member->getScopedName())
- {
- DoubleMemberDeclaration d;
- d.first = i->second.mandatory;
- d.second = member;
- doubleMembers.push_back(d);
- }
- } else if (checkOptional) {
- for (auto const& elem : i->second.optionals)
- {
- if (elem.second->getScopedName() != member->getScopedName()) {
- DoubleMemberDeclaration d;
- d.first = elem.second;
- d.second = member;
- doubleMembers.push_back(d);
- }
- }
- }
-}
-
-void AstInterface::addVisibleInterface(
- AstInterface const * ifc, bool direct, bool optional)
-{
- InterfaceKind kind = optional
- ? direct ? INTERFACE_DIRECT_OPTIONAL : INTERFACE_INDIRECT_OPTIONAL
- : direct ? INTERFACE_DIRECT_MANDATORY : INTERFACE_INDIRECT_MANDATORY;
- std::pair< VisibleInterfaces::iterator, bool > result(
- m_visibleInterfaces.emplace(ifc->getScopedName(), kind));
- bool seen = !result.second
- && result.first->second >= INTERFACE_INDIRECT_MANDATORY;
- if (!result.second && kind > result.first->second) {
- result.first->second = kind;
- }
- if (optional || seen)
- return;
-
- for (DeclList::const_iterator i(ifc->getIteratorBegin());
- i != ifc->getIteratorEnd(); ++i)
- {
- m_visibleMembers.emplace(
- (*i)->getLocalName(), VisibleMember(*i));
- }
- for (auto const& elem : ifc->m_inheritedInterfaces)
- {
- addVisibleInterface(elem.getResolved(), false, elem.isOptional());
- }
-}
-
-void AstInterface::addOptionalVisibleMembers(AstInterface const * ifc) {
- for (DeclList::const_iterator i(ifc->getIteratorBegin());
- i != ifc->getIteratorEnd(); ++i)
- {
- VisibleMembers::iterator visible(
- m_visibleMembers.find((*i)->getLocalName()));
- if (visible == m_visibleMembers.end()) {
- visible = m_visibleMembers.emplace(
- (*i)->getLocalName(), VisibleMember()).first;
- }
- if (visible->second.mandatory == nullptr) {
- visible->second.optionals.emplace(ifc->getScopedName(), *i);
- }
- }
- for (auto const& elem : ifc->m_inheritedInterfaces)
- {
- if (!elem.isOptional()) {
- addOptionalVisibleMembers(elem.getResolved());
- }
- }
-}
-
-bool AstInterface::increment(sal_uInt16 * counter, char const * sort) const {
- if (*counter == SAL_MAX_UINT16) {
- fprintf(
- stderr, "%s: interface %s has too many direct %s\n",
- idlc()->getOptions()->getProgramName().getStr(),
- getScopedName().getStr(), sort);
- return false;
- }
- ++*counter;
- return true;
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/source/astoperation.cxx b/idlc/source/astoperation.cxx
deleted file mode 100644
index 4dea37576b24..000000000000
--- a/idlc/source/astoperation.cxx
+++ /dev/null
@@ -1,115 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <astoperation.hxx>
-#include <asttype.hxx>
-#include <astbasetype.hxx>
-#include <astparameter.hxx>
-#include <errorhandler.hxx>
-
-#include <registry/writer.hxx>
-
-void AstOperation::setExceptions(DeclList const * pExceptions)
-{
- if (pExceptions != nullptr) {
- m_exceptions = *pExceptions;
- }
-}
-
-bool AstOperation::isVariadic() const {
- DeclList::const_iterator i(getIteratorEnd());
- return i != getIteratorBegin()
- && static_cast< AstParameter const * >(*(--i))->isRest();
-}
-
-void AstOperation::dumpBlob(typereg::Writer & rBlob, sal_uInt16 index)
-{
- sal_uInt16 nParam = getNodeCount(NT_parameter);
- sal_uInt16 nExcep = static_cast<sal_uInt16>(m_exceptions.size());
-
- OUString returnTypeName;
- if (m_pReturnType == nullptr) {
- returnTypeName = "void";
- } else {
- returnTypeName = OStringToOUString(
- m_pReturnType->getRelativName(), RTL_TEXTENCODING_UTF8);
- }
- rBlob.setMethodData(
- index, getDocumentation(), RTMethodMode::TWOWAY,
- OStringToOUString(getLocalName(), RTL_TEXTENCODING_UTF8),
- returnTypeName, nParam, nExcep);
-
- if ( nParam )
- {
- DeclList::const_iterator iter = getIteratorBegin();
- DeclList::const_iterator end = getIteratorEnd();
- RTParamMode paramMode;
- sal_uInt16 paramIndex = 0;
- while ( iter != end )
- {
- AstDeclaration* pDecl = *iter;
- if ( pDecl->getNodeType() == NT_parameter )
- {
- AstParameter* pParam = static_cast<AstParameter*>(pDecl);
- switch (pParam->getDirection())
- {
- case DIR_IN :
- paramMode = RT_PARAM_IN;
- break;
- case DIR_OUT :
- paramMode = RT_PARAM_OUT;
- break;
- case DIR_INOUT :
- paramMode = RT_PARAM_INOUT;
- break;
- default:
- paramMode = RT_PARAM_INVALID;
- break;
- }
- if (pParam->isRest()) {
- paramMode = static_cast< RTParamMode >(
- paramMode | RT_PARAM_REST);
- }
-
- rBlob.setMethodParameterData(
- index, paramIndex++, paramMode,
- OStringToOUString(
- pDecl->getLocalName(), RTL_TEXTENCODING_UTF8),
- OStringToOUString(
- pParam->getType()->getRelativName(),
- RTL_TEXTENCODING_UTF8));
- }
- ++iter;
- }
- }
-
- if ( nExcep )
- {
- sal_uInt16 exceptIndex = 0;
- for (auto const& exception : m_exceptions)
- {
- rBlob.setMethodExceptionTypeName(
- index, exceptIndex++,
- OStringToOUString(
- exception->getRelativName(), RTL_TEXTENCODING_UTF8));
- }
- }
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/source/astscope.cxx b/idlc/source/astscope.cxx
deleted file mode 100644
index f8309a766ef3..000000000000
--- a/idlc/source/astscope.cxx
+++ /dev/null
@@ -1,314 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <sal/config.h>
-
-#include <algorithm>
-#include <string_view>
-
-#include <astscope.hxx>
-#include <astbasetype.hxx>
-#include <astinterface.hxx>
-#include <errorhandler.hxx>
-#include <o3tl/string_view.hxx>
-#include <osl/diagnose.h>
-
-
-static bool isGlobal(std::string_view scopedName)
-{
- return scopedName.empty() || o3tl::starts_with(scopedName, ":");
-}
-
-AstScope::AstScope(NodeType nodeType)
- : m_nodeType(nodeType)
-{
-
-}
-
-AstScope::~AstScope()
-{
-
-}
-
-AstDeclaration* AstScope::addDeclaration(AstDeclaration* pDecl)
-{
- AstDeclaration* pDeclaration = nullptr;
-
- if ((pDeclaration = lookupForAdd(pDecl)) != nullptr)
- {
- if ( pDecl->hasAncestor(pDeclaration) )
- {
- ErrorHandler::error2(ErrorCode::RedefScope, pDecl, pDeclaration);
- return nullptr;
- }
- if ( (pDecl->getNodeType() == pDeclaration->getNodeType()) &&
- (pDecl->getNodeType() == NT_sequence
- || pDecl->getNodeType() == NT_instantiated_struct) )
- {
- return pDeclaration;
- }
- if ( (pDeclaration->getNodeType() == NT_interface)
- && (pDecl->getNodeType() == NT_interface)
- && !(static_cast<AstInterface*>(pDeclaration)->isDefined()) )
- {
- m_declarations.push_back(pDecl);
- return pDecl;
- }
- if ( (NT_service == m_nodeType) &&
- ( ((pDecl->getNodeType() == NT_interface_member)
- && (pDeclaration->getNodeType() == NT_interface)) ||
- ((pDecl->getNodeType() == NT_service_member)
- && (pDeclaration->getNodeType() == NT_service)) )
- )
- {
- m_declarations.push_back(pDecl);
- return pDecl;
- }
-
- ErrorHandler::error2(ErrorCode::RedefScope, scopeAsDecl(this), pDecl);
- return nullptr;
- }
-
- m_declarations.push_back(pDecl);
- return pDecl;
-}
-
-sal_uInt16 AstScope::getNodeCount(NodeType nodeType) const
-{
- return static_cast<sal_uInt16>(std::count_if(getIteratorBegin(), getIteratorEnd(),
- [&nodeType](const AstDeclaration* pDecl) { return pDecl->getNodeType() == nodeType; }));
-}
-
-AstDeclaration* AstScope::lookupByName(const OString& scopedName)
-{
- AstDeclaration* pDecl = nullptr;
- AstScope* pScope = nullptr;
- if (scopedName.isEmpty())
- return nullptr;
-
- // If name starts with "::" start look up in global scope
- if ( isGlobal(scopedName) )
- {
- pDecl = scopeAsDecl(this);
- if ( !pDecl )
- return nullptr;
-
- pScope = pDecl->getScope();
- // If this is the global scope ...
- if ( !pScope )
- {
- // look up the scopedName part after "::"
- OString subName = scopedName.copy(2);
- pDecl = lookupByName(subName);
- return pDecl;
- //return pScope->lookupByName();
- }
- // OK, not global scope yet, so simply iterate with parent scope
- pDecl = pScope->lookupByName(scopedName);
- return pDecl;
- }
-
- // The name does not start with "::"
- // Look up in the local scope and start with the first scope
- sal_Int32 nIndex = scopedName.indexOf(':');
- OString firstScope = nIndex > 0 ? scopedName.copy(0, nIndex) : scopedName;
- bool bFindFirstScope = true;
- pDecl = lookupByNameLocal(firstScope);
- if ( !pDecl )
- {
- bFindFirstScope = false;
-
- // OK, not found. Go down parent scope chain
- pDecl = scopeAsDecl(this);
- if ( pDecl )
- {
- pScope = pDecl->getScope();
- if ( pScope )
- pDecl = pScope->lookupByName(scopedName);
- else
- pDecl = nullptr;
-
- // Special case for scope which is an interface. We
- // have to look in the inherited interfaces as well.
- if ( !pDecl && m_nodeType == NT_interface )
- pDecl = lookupInInherited(scopedName);
- }
- }
-
- if ( !bFindFirstScope || (firstScope == scopedName) )
- return pDecl;
-
- sal_Int32 i = 0;
- sal_Int32 nOffset = 2;
- do
- {
- pScope = declAsScope(pDecl);
- if( pScope )
- {
- pDecl = pScope->lookupByNameLocal(o3tl::getToken(scopedName, nOffset, ':', i ));
- nOffset = 1;
- }
- if( !pDecl )
- break;
- } while( i != -1 );
-
- if ( !pDecl )
- {
- // last try if is not the global scope and the scopeName isn't specify global too
- pDecl = scopeAsDecl(this);
- if ( pDecl && !pDecl->getLocalName().isEmpty() )
- {
- pScope = pDecl->getScope();
- if ( pScope )
- pDecl = pScope->lookupByName(scopedName);
- } else
- {
- pDecl = nullptr;
- }
- }
-
- return pDecl;
-}
-
-AstDeclaration* AstScope::lookupByNameLocal(std::string_view name) const
-{
- for (auto const& declaration : m_declarations)
- {
- if ( declaration->getLocalName() == name )
- return declaration;
- }
- return nullptr;
-}
-
-AstDeclaration* AstScope::lookupInInherited(const OString& scopedName) const
-{
- const AstInterface* pInterface = dynamic_cast<const AstInterface*>(this);
-
- if ( !pInterface )
- return nullptr;
-
- // Can't look in an interface which was not yet defined
- if ( !pInterface->getScope() )
- {
- ErrorHandler::forwardLookupError(pInterface, scopedName);
- }
-
- // OK, loop through inherited interfaces. Stop when you find it
- for (auto const& elem : pInterface->getAllInheritedInterfaces())
- {
- AstInterface const * resolved = elem.getResolved();
- AstDeclaration* pDecl = resolved->lookupByNameLocal(scopedName);
- if ( pDecl )
- return pDecl;
- pDecl = resolved->lookupInInherited(scopedName);
- if ( pDecl )
- return pDecl;
- }
- // Not found
- return nullptr;
-}
-
-AstDeclaration* AstScope::lookupPrimitiveType(ExprType type)
-{
- AstDeclaration* pDecl = nullptr;
- AstScope* pScope = nullptr;
- OString typeName;
- pDecl = scopeAsDecl(this);
- if ( !pDecl )
- return nullptr;
- pScope = pDecl->getScope();
- if ( pScope)
- return pScope->lookupPrimitiveType(type);
-
- switch (type)
- {
- case ET_none:
- OSL_ASSERT(false);
- break;
- case ET_short:
- typeName = OString("short");
- break;
- case ET_ushort:
- typeName = OString("unsigned short");
- break;
- case ET_long:
- typeName = OString("long");
- break;
- case ET_ulong:
- typeName = OString("unsigned long");
- break;
- case ET_hyper:
- typeName = OString("hyper");
- break;
- case ET_uhyper:
- typeName = OString("unsigned hyper");
- break;
- case ET_float:
- typeName = OString("float");
- break;
- case ET_double:
- typeName = OString("double");
- break;
- case ET_char:
- typeName = OString("char");
- break;
- case ET_byte:
- typeName = OString("byte");
- break;
- case ET_boolean:
- typeName = OString("boolean");
- break;
- case ET_any:
- typeName = OString("any");
- break;
- case ET_void:
- typeName = OString("void");
- break;
- case ET_type:
- typeName = OString("type");
- break;
- case ET_string:
- typeName = OString("string");
- break;
- }
-
- pDecl = lookupByNameLocal(typeName);
-
- if ( pDecl && (pDecl->getNodeType() == NT_predefined) )
- {
- AstBaseType* pBaseType = static_cast<AstBaseType*>(pDecl);
-
- if ( pBaseType->getExprType() == type )
- return pDecl;
- }
-
- return nullptr;
-}
-
-AstDeclaration* AstScope::lookupForAdd(AstDeclaration const * pDecl) const
-{
- if ( !pDecl )
- return nullptr;
-
- AstDeclaration* pRetDecl = lookupByNameLocal(pDecl->getLocalName());
-
- return pRetDecl;
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/source/astservice.cxx b/idlc/source/astservice.cxx
deleted file mode 100644
index c90ded6b4d7a..000000000000
--- a/idlc/source/astservice.cxx
+++ /dev/null
@@ -1,54 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-
-#include <sal/config.h>
-
-#include <astmember.hxx>
-#include <astoperation.hxx>
-#include <astservice.hxx>
-#include <asttype.hxx>
-
-bool AstService::checkLastConstructor() const {
- AstOperation const * last = static_cast< AstOperation const * >(getLast());
- for (DeclList::const_iterator i(getIteratorBegin()); i != getIteratorEnd();
- ++i)
- {
- if (*i != last && (*i)->getNodeType() == NT_operation) {
- AstOperation const * ctor = static_cast< AstOperation * >(*i);
- if (ctor->isVariadic() && last->isVariadic()) {
- return true;
- }
- sal_uInt32 n = ctor->nMembers();
- if (n == last->nMembers()) {
- return std::equal(ctor->getIteratorBegin(), ctor->getIteratorEnd(), last->getIteratorBegin(),
- [](AstDeclaration* a, AstDeclaration* b) {
- sal_Int32 r1;
- AstDeclaration const * t1 = deconstructAndResolveTypedefs(static_cast< AstMember * >(a)->getType(), &r1);
- sal_Int32 r2;
- AstDeclaration const * t2 = deconstructAndResolveTypedefs(static_cast< AstMember * >(b)->getType(), &r2);
- return r1 == r2 && t1->getScopedName() == t2->getScopedName();
- });
- }
- }
- }
- return false;
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/source/aststack.cxx b/idlc/source/aststack.cxx
deleted file mode 100644
index fcddc810dec5..000000000000
--- a/idlc/source/aststack.cxx
+++ /dev/null
@@ -1,79 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <rtl/alloc.h>
-#include <aststack.hxx>
-#include <astscope.hxx>
-
-AstStack::AstStack() {}
-
-AstStack::~AstStack()
-{
- for (AstScope* p : m_stack)
- delete p;
-}
-
-AstScope* AstStack::top()
-{
- if (m_stack.empty())
- return nullptr;
- return m_stack.back();
-}
-
-AstScope* AstStack::bottom()
-{
- if (m_stack.empty())
- return nullptr;
- return m_stack.front();
-}
-
-AstScope* AstStack::nextToTop()
-{
- if (m_stack.size() < 2)
- return nullptr;
-
- return m_stack[m_stack.size() - 2];
-}
-
-AstScope* AstStack::topNonNull()
-{
- for (sal_uInt32 i = m_stack.size(); i > 0; i--)
- {
- if (m_stack[i - 1])
- return m_stack[i - 1];
- }
- return nullptr;
-}
-
-AstStack* AstStack::push(AstScope* pScope)
-{
- m_stack.push_back(pScope);
- return this;
-}
-
-void AstStack::pop()
-{
- if (m_stack.empty())
- return;
- m_stack.pop_back();
-}
-
-void AstStack::clear() { m_stack.clear(); }
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/source/aststruct.cxx b/idlc/source/aststruct.cxx
deleted file mode 100644
index 00ac33021141..000000000000
--- a/idlc/source/aststruct.cxx
+++ /dev/null
@@ -1,167 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <aststruct.hxx>
-#include <astmember.hxx>
-
-#include <registry/version.h>
-#include <registry/writer.hxx>
-
-AstStruct::AstStruct(
- const OString& name, std::vector< OString > const & typeParameters,
- AstStruct const* pBaseType, AstScope* pScope)
- : AstType(NT_struct, name, pScope)
- , AstScope(NT_struct)
- , m_pBaseType(pBaseType)
-{
- for (auto const& elem : typeParameters)
- {
- m_typeParameters.emplace_back(
- new AstType(NT_type_parameter, elem, nullptr));
- }
-}
-
-AstStruct::AstStruct(const NodeType type,
- const OString& name,
- AstStruct const* pBaseType,
- AstScope* pScope)
- : AstType(type, name, pScope)
- , AstScope(type)
- , m_pBaseType(pBaseType)
-{
-}
-
-AstStruct::~AstStruct()
-{
-}
-
-AstDeclaration const * AstStruct::findTypeParameter(std::string_view name)
- const
-{
- for (auto const& elem : m_typeParameters)
- {
- if (elem->getLocalName() == name) {
- return elem.get();
- }
- }
- return nullptr;
-}
-
-bool AstStruct::isType() const {
- return getNodeType() == NT_struct
- ? getTypeParameterCount() == 0 : AstDeclaration::isType();
-}
-
-bool AstStruct::dump(RegistryKey& rKey)
-{
- RegistryKey localKey;
- if (rKey.createKey( OStringToOUString(getFullName(), RTL_TEXTENCODING_UTF8 ), localKey) != RegError::NO_ERROR)
- {
- fprintf(stderr, "%s: warning, could not create key '%s' in '%s'\n",
- idlc()->getOptions()->getProgramName().getStr(),
- getFullName().getStr(), OUStringToOString(rKey.getRegistryName(), RTL_TEXTENCODING_UTF8).getStr());
- return false;
- }
-
- if (m_typeParameters.size() > SAL_MAX_UINT16) {
- fprintf(
- stderr,
- ("%s: polymorphic struct type template %s has too many type"
- " parameters\n"),
- idlc()->getOptions()->getProgramName().getStr(),
- getScopedName().getStr());
- return false;
- }
-
- sal_uInt16 nMember = getNodeCount(NT_member);
-
- RTTypeClass typeClass = RT_TYPE_STRUCT;
- if ( getNodeType() == NT_exception )
- typeClass = RT_TYPE_EXCEPTION;
-
- typereg::Writer aBlob(
- (m_typeParameters.empty() && !m_bPublished
- ? TYPEREG_VERSION_0 : TYPEREG_VERSION_1),
- getDocumentation(), "", typeClass, m_bPublished,
- OStringToOUString(getRelativName(), RTL_TEXTENCODING_UTF8),
- m_pBaseType == nullptr ? 0 : 1, nMember, 0,
- static_cast< sal_uInt16 >(m_typeParameters.size()));
- if (m_pBaseType != nullptr) {
- aBlob.setSuperTypeName(
- 0,
- OStringToOUString(
- m_pBaseType->getRelativName(), RTL_TEXTENCODING_UTF8));
- }
-
- if ( nMember > 0 )
- {
- DeclList::const_iterator iter = getIteratorBegin();
- DeclList::const_iterator end = getIteratorEnd();
- AstMember* pMember = nullptr;
- sal_uInt16 index = 0;
- while ( iter != end )
- {
- AstDeclaration* pDecl = *iter;
- if ( pDecl->getNodeType() == NT_member )
- {
- pMember = static_cast<AstMember*>(pDecl);
- RTFieldAccess flags = RTFieldAccess::READWRITE;
- OString typeName;
- if (pMember->getType()->getNodeType() == NT_type_parameter) {
- flags |= RTFieldAccess::PARAMETERIZED_TYPE;
- typeName = pMember->getType()->getLocalName();
- } else {
- typeName = pMember->getType()->getRelativName();
- }
- aBlob.setFieldData(
- index++, pMember->getDocumentation(), "", flags,
- OStringToOUString(
- pMember->getLocalName(), RTL_TEXTENCODING_UTF8),
- OStringToOUString(typeName, RTL_TEXTENCODING_UTF8),
- RTConstValue());
- }
- ++iter;
- }
- }
-
- sal_uInt16 index = 0;
- for (auto const& elem : m_typeParameters)
- {
- aBlob.setReferenceData(
- index++, "", RTReferenceType::TYPE_PARAMETER, RTFieldAccess::INVALID,
- OStringToOUString(
- elem->getLocalName(), RTL_TEXTENCODING_UTF8));
- }
-
- sal_uInt32 aBlobSize;
- void const * pBlob = aBlob.getBlob(&aBlobSize);
-
- if (localKey.setValue("", RegValueType::BINARY,
- const_cast<RegValue>(pBlob), aBlobSize) != RegError::NO_ERROR)
- {
- fprintf(stderr, "%s: warning, could not set value of key \"%s\" in %s\n",
- idlc()->getOptions()->getProgramName().getStr(),
- getFullName().getStr(), OUStringToOString(localKey.getRegistryName(), RTL_TEXTENCODING_UTF8).getStr());
- return false;
- }
-
- return true;
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/source/aststructinstance.cxx b/idlc/source/aststructinstance.cxx
deleted file mode 100644
index 878745793fd2..000000000000
--- a/idlc/source/aststructinstance.cxx
+++ /dev/null
@@ -1,63 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-
-#include <aststructinstance.hxx>
-
-#include <asttype.hxx>
-#include <idlctypes.hxx>
-
-#include <rtl/strbuf.hxx>
-#include <rtl/string.hxx>
-
-namespace {
-
-OString createName(
- AstType const * typeTemplate, DeclList const * typeArguments)
-{
- OStringBuffer buf(64);
- buf.append(typeTemplate->getScopedName());
- if (typeArguments != nullptr) {
- buf.append('<');
- for (DeclList::const_iterator i(typeArguments->begin());
- i != typeArguments->end(); ++i)
- {
- if (i != typeArguments->begin()) {
- buf.append(',');
- }
- if (*i != nullptr) {
- buf.append((*i)->getScopedName());
- }
- }
- buf.append('>');
- }
- return buf.makeStringAndClear();
-}
-
-}
-
-AstStructInstance::AstStructInstance(
- AstType const * typeTemplate, DeclList const * typeArguments,
- AstScope * scope):
- AstType(
- NT_instantiated_struct, createName(typeTemplate, typeArguments), scope),
- m_typeTemplate(typeTemplate), m_typeArguments(*typeArguments)
-{}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/source/attributeexceptions.hxx b/idlc/source/attributeexceptions.hxx
deleted file mode 100644
index 82ce1cf19eeb..000000000000
--- a/idlc/source/attributeexceptions.hxx
+++ /dev/null
@@ -1,38 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#ifndef INCLUDED_IDLC_SOURCE_ATTRIBUTEEXCEPTIONS_HXX
-#define INCLUDED_IDLC_SOURCE_ATTRIBUTEEXCEPTIONS_HXX
-
-#include <rtl/ustring.hxx>
-
-struct AttributeExceptions
-{
- struct Part
- {
- OUString const* documentation;
- DeclList const* exceptions;
- };
- Part get;
- Part set;
-};
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/source/errorhandler.cxx b/idlc/source/errorhandler.cxx
deleted file mode 100644
index aa2de56bc969..000000000000
--- a/idlc/source/errorhandler.cxx
+++ /dev/null
@@ -1,583 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <errorhandler.hxx>
-#include <astinterface.hxx>
-
-static const char* errorCodeToMessage(ErrorCode eCode)
-{
- switch (eCode)
- {
- case ErrorCode::SyntaxError:
- return "";
- case ErrorCode::RedefScope:
- return "illegal redefinition in scope ";
- case ErrorCode::CoercionFailure:
- return "coercion failure ";
- case ErrorCode::ScopeConflict:
- return "definition scope is different than fwd declare scope, ";
- case ErrorCode::IllegalAdd:
- return "illegal add operation, ";
- case ErrorCode::IllegalRaises:
- return "non-exception type in raises(..) clause, ";
- case ErrorCode::CantInherit:
- return "cannot inherit ";
- case ErrorCode::IdentNotFound:
- return "error in lookup of symbol: ";
- case ErrorCode::CannotInheritFromForward:
- return "";
- case ErrorCode::ExpectedConstant:
- return "constant expected: ";
- case ErrorCode::Eval:
- return "expression evaluation error: ";
- case ErrorCode::ForwardDeclLookup:
- return "";
- case ErrorCode::RecursiveType:
- return "illegal recursive use of type: ";
- case ErrorCode::NotAType:
- return "specified symbol is not a type: ";
- case ErrorCode::InterfaceMemberLookup:
- return "error in lookup of symbol, expected interface is not defined and no forward exists: ";
- case ErrorCode::ServiceMemberLookup:
- return "error in lookup of symbol, expected service is not defined: ";
- case ErrorCode::DefinedAttributeFlag:
- return "flag is already set: ";
- case ErrorCode::WrongAttributeKeyword:
- return "keyword not allowed: ";
- case ErrorCode::MissingAttributeKeyword:
- return "missing keyword: ";
- case ErrorCode::BadAttributeFlags:
- return
- "the 'attribute' flag is mandatory, and only the 'bound' and"
- " 'readonly' optional flags are accepted: ";
- case ErrorCode::ExpectedOptional:
- return "only the 'optional' flag is accepted: ";
- case ErrorCode::MixedInheritance:
- return "interface inheritance declarations cannot appear in both an"
- " interface's header and its body";
- case ErrorCode::DoubleInheritance:
- return
- "interface is (directly or indirectly) inherited more than once: ";
- case ErrorCode::DoubleMember:
- return
- "member is (directly or indirectly) declared more than once: ";
- case ErrorCode::ConstructorParameterNotIn:
- return
- "a service constructor parameter may not be an out or inout"
- " parameter";
- case ErrorCode::ConstructorRestParameterNotFirst:
- return
- "no parameters may precede a rest parameter in a service"
- " constructor";
- case ErrorCode::RestParameterNotLast:
- return "no parameters may follow a rest parameter";
- case ErrorCode::RestParameterNotAny:
- return "a rest parameter must be of type any";
- case ErrorCode::MethodHasRestParameter:
- return "a rest parameter may not be used on an interface method";
- case ErrorCode::ReadOnlyAttributeSetExceptions:
- return "a readonly attribute may not have a setter raises clause";
- case ErrorCode::UnsignedTypeArgument:
- return "an unsigned type cannot be used as a type argument";
- case ErrorCode::WrongNumberOfTypeArguments:
- return
- "the number of given type arguments does not match the expected"
- " number of type parameters";
- case ErrorCode::InstantiatedStructTypeTypedef:
- return
- "an instantiated polymorphic struct type cannot be used in a"
- " typedef";
- case ErrorCode::IdenticalTypeParameters:
- return "two type parameters have the same name";
- case ErrorCode::StructTypeTemplateWithBase:
- return "a polymorphic struct type template may not have a base type";
- case ErrorCode::PublishedForward:
- return
- "a published forward declaration of an interface type cannot be"
- " followed by an unpublished declaration of that type";
- case ErrorCode::PublishedusesUnpublished:
- return
- "an unpublished entity cannot be used in the declaration of a"
- " published entity: ";
- case ErrorCode::SimilarConstructors:
- return "two constructors have identical lists of parameter types";
- }
- return "unknown error";
-}
-
-static const char* warningCodeToMessage(WarningCode wCode)
-{
- switch (wCode)
- {
- case WarningCode::WrongNamingConvention:
- return "type or identifier doesn't fulfill the UNO naming convention: ";
- }
- return "unknown warning";
-}
-
-static const char* parseStateToMessage(ParseState state)
-{
- switch (state)
- {
- case PS_NoState:
- return "Statement can not be parsed";
- case PS_TypeDeclSeen:
- return "Malformed type declaration";
- case PS_ConstantDeclSeen:
- return "Malformed const declaration";
- case PS_ExceptionDeclSeen:
- return "Malformed exception declaration";
- case PS_InterfaceDeclSeen:
- return "Malformed interface declaration";
- case PS_ServiceDeclSeen:
- return "Malformed service declaration";
- case PS_ModuleDeclSeen:
- return "Malformed module declaration";
- case PS_AttributeDeclSeen:
- return "Malformed attribute declaration";
- case PS_PropertyDeclSeen:
- return "Malformed property declaration";
- case PS_OperationDeclSeen:
- return "Malformed operation declaration";
- case PS_InterfaceInheritanceDeclSeen:
- return "Malformed interface inheritance declaration";
- case PS_ConstantsDeclSeen:
- return "Malformed constants declaration";
- case PS_ServiceSeen:
- return "Missing service identifier following SERVICE keyword";
- case PS_ServiceIDSeen:
- return "Missing '{' or illegal syntax following service identifier";
- case PS_ServiceSqSeen:
- return "Illegal syntax following service '{' opener";
- case PS_ServiceBodySeen:
- return "Illegal syntax following service '}' closer";
- case PS_ServiceMemberSeen:
- return "Illegal syntax following service member declaration";
- case PS_ServiceIFHeadSeen:
- return "Illegal syntax following header of an interface member";
- case PS_ServiceSHeadSeen:
- return "Illegal syntax following header of a service member";
- case PS_ModuleSeen:
- return "Missing module identifier following MODULE keyword";
- case PS_ModuleIDSeen:
- return "Missing '{' or illegal syntax following module identifier";
- case PS_ModuleSqSeen:
- return "Illegal syntax following module '{' opener";
- case PS_ModuleQsSeen:
- return "Illegal syntax following module '}' closer";
- case PS_ModuleBodySeen:
- return "Illegal syntax following module export(s)";
- case PS_ConstantsSeen:
- return "Missing constants identifier following CONSTANTS keyword";
- case PS_ConstantsIDSeen:
- return "Missing '{' or illegal syntax following constants identifier";
- case PS_ConstantsSqSeen:
- return "Illegal syntax following module '{' opener";
- case PS_ConstantsQsSeen:
- return "Illegal syntax following module '}' closer";
- case PS_ConstantsBodySeen:
- return "Illegal syntax following constants export(s)";
- case PS_InterfaceSeen:
- return "Missing interface identifier following INTERFACE keyword";
- case PS_InterfaceIDSeen:
- return "Illegal syntax following interface identifier";
- case PS_InterfaceHeadSeen:
- return "Illegal syntax following interface head";
- case PS_InheritSpecSeen:
- return "Missing '{' or illegal syntax following inheritance spec";
- case PS_ForwardDeclSeen:
- return "Missing ';' following forward interface declaration";
- case PS_InterfaceSqSeen:
- return "Illegal syntax following interface '{' opener";
- case PS_InterfaceQsSeen:
- return "Illegal syntax following interface '}' closer";
- case PS_InterfaceBodySeen:
- return "Illegal syntax following interface export(s)";
- case PS_InheritColonSeen:
- return "Illegal syntax following ':' starting inheritance list";
- case PS_SNListCommaSeen:
- return "Found illegal scoped name in scoped name list";
- case PS_ScopedNameSeen:
- return "Missing ',' following scoped name in scoped name list";
- case PS_SN_IDSeen:
- return "Illegal component in scoped name";
- case PS_ScopeDelimSeen:
- return "Illegal component in scoped name following '::'";
- case PS_ConstSeen:
- return "Missing type or illegal syntax following CONST keyword";
- case PS_ConstTypeSeen:
- return "Missing identifier or illegal syntax following const type";
- case PS_ConstIDSeen:
- return "Missing '=' or illegal syntax after const identifier";
- case PS_ConstAssignSeen:
- return "Missing value expr or illegal syntax following '='";
- case PS_ConstExprSeen:
- return "Missing ';' or illegal syntax following value expr in const";
- case PS_TypedefSeen:
- return "Missing type or illegal syntax following TYPEDEF keyword";
- case PS_TypeSpecSeen:
- return "Missing declarators or illegal syntax following type spec";
- case PS_DeclaratorsSeen:
- return "Illegal syntax following declarators in TYPEDEF declaration";
- case PS_StructSeen:
- return "Missing struct identifier following STRUCT keyword";
- case PS_StructHeaderSeen:
- return "Missing '{' or illegal syntax following struct inheritance spec";
- case PS_StructIDSeen:
- return "Missing '{' or illegal syntax following struct identifier";
- case PS_StructSqSeen:
- return "Illegal syntax following struct '{' opener";
- case PS_StructQsSeen:
- return "Illegal syntax following struct '}' closer";
- case PS_StructBodySeen:
- return "Illegal syntax following struct member(s)";
- case PS_MemberTypeSeen:
- return "Illegal syntax or missing identifier following member type";
- case PS_MemberDeclsSeen:
- return "Illegal syntax following member declarator(s)";
- case PS_MemberDeclsCompleted:
- return "Missing ',' between member decls of same type(?)";
- case PS_EnumSeen:
- return "Illegal syntax or missing identifier following ENUM keyword";
- case PS_EnumIDSeen:
- return "Illegal syntax or missing '{' following enum identifier";
- case PS_EnumSqSeen:
- return "Illegal syntax following enum '{' opener";
- case PS_EnumQsSeen:
- return "Illegal syntax following enum '}' closer";
- case PS_EnumBodySeen:
- return "Illegal syntax following enum enumerator(s)";
- case PS_EnumCommaSeen:
- return "Illegal syntax or missing identifier following ',' in enum";
- case PS_SequenceSeen:
- return "Illegal syntax or missing '<' following SEQUENCE keyword";
- case PS_SequenceSqSeen:
- return "Illegal syntax or missing type following '<' in sequence";
- case PS_SequenceQsSeen:
- return "Illegal syntax following '>' in sequence";
- case PS_SequenceTypeSeen:
- return "Illegal syntax following sequence type declaration";
- case PS_FlagHeaderSeen:
- return "Illegal syntax after flags";
- case PS_AttrSeen:
- return "Illegal syntax after ATTRIBUTE keyword";
- case PS_AttrTypeSeen:
- return "Illegal syntax after type in attribute declaration";
- case PS_AttrCompleted:
- return "Illegal syntax after attribute declaration";
- case PS_ReadOnlySeen:
- return "Illegal syntax after READONLY keyword";
- case PS_OptionalSeen:
- return "Illegal syntax after OPTIONAL keyword";
- case PS_MayBeVoidSeen:
- return "Illegal syntax after MAYBEVOID keyword";
- case PS_BoundSeen:
- return "Illegal syntax after BOUND keyword";
- case PS_ConstrainedSeen:
- return "Illegal syntax after CONSTRAINED keyword";
- case PS_TransientSeen:
- return "Illegal syntax after TRANSIENT keyword";
- case PS_MayBeAmbiguousSeen:
- return "Illegal syntax after MAYBEAMBIGUOUS keyword";
- case PS_MayBeDefaultSeen:
- return "Illegal syntax after MAYBEDEFAULT keyword";
- case PS_RemoveableSeen:
- return "Illegal syntax after REMOVABLE keyword";
- case PS_PropertySeen:
- return "Illegal syntax after PROPERTY keyword";
- case PS_PropertyTypeSeen:
- return "Illegal syntax after type in property declaration";
- case PS_PropertyCompleted:
- return "Illegal syntax after property declaration";
- case PS_ExceptSeen:
- return "Illegal syntax or missing identifier after EXCEPTION keyword";
- case PS_ExceptHeaderSeen:
- return "Missing '{' or illegal syntax following exception inheritance spec";
- case PS_ExceptIDSeen:
- return "Illegal syntax or missing '{' after exception identifier";
- case PS_ExceptSqSeen:
- return "Illegal syntax after exception '{' opener";
- case PS_ExceptQsSeen:
- return "Illegal syntax after exception '}' closer";
- case PS_ExceptBodySeen:
- return "Illegal syntax after exception member(s)";
- case PS_OpTypeSeen:
- return "Illegal syntax or missing identifier after operation type";
- case PS_OpIDSeen:
- return "Illegal syntax or missing '(' after operation identifier";
- case PS_OpParsCompleted:
- return "Illegal syntax after operation parameter list";
- case PS_OpSqSeen:
- return "Illegal syntax after operation parameter list '(' opener";
- case PS_OpQsSeen:
- return "Illegal syntax after operation parameter list ')' closer";
- case PS_OpParCommaSeen:
- return "Illegal syntax or missing direction in parameter declaration";
- case PS_OpParDirSeen:
- return "Illegal syntax or missing type in parameter declaration";
- case PS_OpParTypeSeen:
- return "Illegal syntax or missing declarator in parameter declaration";
- case PS_OpParDeclSeen:
- return "Illegal syntax following parameter declarator";
- case PS_RaiseSeen:
- return "Illegal syntax or missing '(' after RAISES keyword";
- case PS_RaiseSqSeen:
- return "Illegal syntax after RAISES '(' opener";
- case PS_RaiseQsSeen:
- return "Illegal syntax after RAISES ')' closer";
- case PS_DeclsCommaSeen:
- return "Illegal syntax after ',' in declarators list";
- case PS_DeclsDeclSeen:
- return "Illegal syntax after declarator in declarators list";
- default:
- return "no wider described syntax error";
- }
-}
-
-static OString flagToString(sal_uInt32 flag)
-{
- OString flagStr;
- if ( (flag & AF_READONLY) == AF_READONLY )
- flagStr += "'readonly'";
- if ( (flag & AF_OPTIONAL) == AF_OPTIONAL )
- flagStr += "'optional'";
- if ( (flag & AF_MAYBEVOID) == AF_MAYBEVOID )
- flagStr += "'maybevoid'";
- if ( (flag & AF_BOUND) == AF_BOUND )
- flagStr += "'bound'";
- if ( (flag & AF_CONSTRAINED) == AF_CONSTRAINED )
- flagStr += "'constrained'";
- if ( (flag & AF_TRANSIENT) == AF_TRANSIENT )
- flagStr += "'transient'";
- if ( (flag & AF_MAYBEAMBIGUOUS) == AF_MAYBEAMBIGUOUS )
- flagStr += "'maybeambiguous'";
- if ( (flag & AF_MAYBEDEFAULT) == AF_MAYBEDEFAULT )
- flagStr += "'maybedefault'";
- if ( (flag & AF_REMOVABLE) == AF_REMOVABLE )
- flagStr += "'removable'";
- if ( (flag & AF_ATTRIBUTE) == AF_ATTRIBUTE )
- flagStr += "'attribute'";
- if ( (flag & AF_PROPERTY) == AF_PROPERTY )
- flagStr += "'property'";
- if ( flagStr.isEmpty() )
- flagStr += "'unknown'";
-
- return flagStr;
-}
-
-static void errorHeader(ErrorCode eCode, sal_Int32 lineNumber, sal_uInt32 start, sal_uInt32 end)
-{
- OString file;
- if ( idlc()->getFileName() == idlc()->getRealFileName() )
- file = idlc()->getMainFileName();
- else
- file = idlc()->getFileName();
-
- fprintf(stderr, "%s:%" SAL_PRIdINT64 " [%" SAL_PRIdINT64 ":%" SAL_PRIdINT64 "] : %s", file.getStr(),
- sal_Int64(lineNumber),
- sal_Int64(start),
- sal_Int64(end),
- errorCodeToMessage(eCode));
-}
-
-static void errorHeader(ErrorCode eCode, sal_uInt32 lineNumber)
-{
- errorHeader(eCode, lineNumber,
- idlc()->getOffsetStart(), idlc()->getOffsetEnd());
-}
-
-static void errorHeader(ErrorCode eCode)
-{
- errorHeader(eCode, idlc()->getLineNumber(),
- idlc()->getOffsetStart(), idlc()->getOffsetEnd());
-}
-
-static void warningHeader(WarningCode wCode)
-{
- OString file;
- if ( idlc()->getFileName() == idlc()->getRealFileName() )
- file = idlc()->getMainFileName();
- else
- file = idlc()->getFileName();
-
- fprintf(stderr, "%s(%" SAL_PRIdINT64 ") : WARNING, %s", file.getStr(),
- sal_Int64(idlc()->getLineNumber()),
- warningCodeToMessage(wCode));
-}
-
-void ErrorHandler::error0(ErrorCode e)
-{
- errorHeader(e);
- fprintf(stderr, "\n");
- idlc()->incErrorCount();
-}
-
-void ErrorHandler::error1(ErrorCode e, AstDeclaration const * d)
-{
- errorHeader(e);
- fprintf(stderr, "'%s'\n", d->getScopedName().getStr());
- idlc()->incErrorCount();
-}
-
-void ErrorHandler::error2(
- ErrorCode e, AstDeclaration const * d1, AstDeclaration const * d2)
-{
- errorHeader(e);
- fprintf(stderr, "'%s', '%s'\n", d1->getScopedName().getStr(),
- d2->getScopedName().getStr());
- idlc()->incErrorCount();
-}
-
-void ErrorHandler::error3(ErrorCode e, AstDeclaration const * d1, AstDeclaration const * d2, AstDeclaration const * d3)
-{
- errorHeader(e);
- fprintf(stderr, "'%s', '%s', '%s'\n", d1->getScopedName().getStr(),
- d2->getScopedName().getStr(), d3->getScopedName().getStr());
- idlc()->incErrorCount();
-}
-
-void ErrorHandler::warning0(WarningCode w, const char* warningmsg)
-{
- if ( idlc()->getOptions()->isValid("-w") || idlc()->getOptions()->isValid("-we") ) {
- warningHeader(w);
- fprintf(stderr, "%s\n", warningmsg);
- }
-
- if ( idlc()->getOptions()->isValid("-we") )
- idlc()->incErrorCount();
- else
- idlc()->incWarningCount();
-}
-
-void ErrorHandler::syntaxError(ParseState ps, sal_Int32 lineNumber, const char* errmsg)
-{
- errorHeader(ErrorCode::SyntaxError, lineNumber);
- fprintf(stderr, "%s: %s\n", parseStateToMessage(ps), errmsg);
- idlc()->incErrorCount();
-}
-
-void ErrorHandler::coercionError(AstExpression *pExpr, ExprType et)
-{
- errorHeader(ErrorCode::CoercionFailure);
- fprintf(stderr, "'%s' to '%s'\n", pExpr->toString().getStr(),
- exprTypeToString(et));
- idlc()->incErrorCount();
-}
-
-void ErrorHandler::lookupError(const OString& n)
-{
- errorHeader(ErrorCode::IdentNotFound);
- fprintf(stderr, "'%s'\n", n.getStr());
- idlc()->incErrorCount();
-}
-
-void ErrorHandler::lookupError(ErrorCode e, const OString& n, AstDeclaration const * pScope)
-{
- errorHeader(e);
- fprintf(stderr, "'%s' in '%s'\n", n.getStr(), pScope->getFullName().getStr());
- idlc()->incErrorCount();
-}
-
-void ErrorHandler::flagError(ErrorCode e, sal_uInt32 flag)
-{
- errorHeader(e);
- fprintf(stderr, "'%s'\n", flagToString(flag).getStr());
- idlc()->incErrorCount();
-}
-
-void ErrorHandler::noTypeError(AstDeclaration const * pDecl)
-{
- errorHeader(ErrorCode::NotAType);
- fprintf(stderr, "'%s'\n", pDecl->getScopedName().getStr());
- idlc()->incErrorCount();
-}
-
-namespace {
-
-char const * nodeTypeName(NodeType nodeType) {
- switch (nodeType) {
- case NT_interface:
- return "interface";
-
- case NT_exception:
- return "exception";
-
- case NT_struct:
- return "struct";
-
- default:
- return "";
- }
-}
-
-}
-
-void ErrorHandler::inheritanceError(NodeType nodeType, const OString* name, AstDeclaration const * pDecl)
-{
- if ( nodeType == NT_interface &&
- (pDecl->getNodeType() == NT_interface) &&
- !(static_cast<AstInterface const *>(pDecl)->isDefined()) )
- {
- errorHeader(ErrorCode::CannotInheritFromForward);
- fprintf(stderr, "interface '%s' cannot inherit from forward declared interface '%s'\n",
- name->getStr(), pDecl->getScopedName().getStr());
- } else
- {
- errorHeader(ErrorCode::CantInherit);
- fprintf(stderr, "%s '%s' from '%s'\n",
- nodeTypeName(nodeType), name->getStr(),
- pDecl->getScopedName().getStr());
- }
- idlc()->incErrorCount();
-}
-
-void ErrorHandler::forwardLookupError(const AstDeclaration* pForward,
- const OString& name)
-{
- errorHeader(ErrorCode::ForwardDeclLookup);
- fprintf(stderr, "trying to look up '%s' in undefined forward declared interface '%s'\n",
- pForward->getScopedName().getStr(), name.getStr());
- idlc()->incErrorCount();
-}
-
-void ErrorHandler::constantExpected(AstDeclaration const * pDecl,
- const OString& name)
-{
- errorHeader(ErrorCode::ExpectedConstant);
- fprintf(stderr, "'%s' is bound to '%s'\n", name.getStr(), pDecl->getScopedName().getStr());
- idlc()->incErrorCount();
-}
-
-void ErrorHandler::evalError(AstExpression* pExpr)
-{
- errorHeader(ErrorCode::Eval);
- fprintf(stderr, "'%s'\n", pExpr->toString().getStr());
- idlc()->incErrorCount();
-}
-
-bool ErrorHandler::checkPublished(AstDeclaration const * decl, bool bOptional) {
- if (idlc()->isPublished() && !decl->isPublished() && !bOptional) {
- error1(ErrorCode::PublishedusesUnpublished, decl);
- return false;
- } else {
- return true;
- }
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/source/fehelper.cxx b/idlc/source/fehelper.cxx
deleted file mode 100644
index 607f5a145677..000000000000
--- a/idlc/source/fehelper.cxx
+++ /dev/null
@@ -1,102 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <fehelper.hxx>
-#include <errorhandler.hxx>
-#include <idlc.hxx>
-
-FeDeclarator::FeDeclarator(const OString& name)
- : m_name(name)
-{
-}
-
-FeDeclarator::~FeDeclarator()
-{
-}
-
-bool FeDeclarator::checkType(AstDeclaration const * type) const
-{
- OString tmp(m_name);
- sal_Int32 count = m_name.lastIndexOf( ':' );
- if( count != -1 )
- tmp = m_name.copy( count+1 );
-
- return tmp != type->getLocalName();
-}
-
-AstType const * FeDeclarator::compose(AstDeclaration const * pDecl)
-{
- if ( pDecl == nullptr )
- {
- return nullptr;
- }
- if ( !pDecl->isType() )
- {
- ErrorHandler::noTypeError(pDecl);
- return nullptr;
- }
- return static_cast<const AstType*>(pDecl);
-}
-
-FeInheritanceHeader::FeInheritanceHeader(
- NodeType nodeType, OString* pName, OString const * pInherits,
- std::vector< OString > const * typeParameters)
- : m_nodeType(nodeType)
- , m_pName(pName)
- , m_pInherits(nullptr)
-{
- if (typeParameters != nullptr) {
- m_typeParameters = *typeParameters;
- }
- initializeInherits(pInherits);
-}
-
-void FeInheritanceHeader::initializeInherits(OString const * pInherits)
-{
- if ( !pInherits )
- return;
-
- AstScope* pScope = idlc()->scopes()->topNonNull();
- AstDeclaration* pDecl = pScope->lookupByName(*pInherits);
- if ( pDecl )
- {
- AstDeclaration const * resolved = resolveTypedefs(pDecl);
- if ( resolved->getNodeType() == getNodeType()
- && (resolved->getNodeType() != NT_interface
- || static_cast< AstInterface const * >(
- resolved)->isDefined()) )
- {
- if ( ErrorHandler::checkPublished( pDecl ) )
- {
- m_pInherits = pDecl;
- }
- }
- else
- {
- ErrorHandler::inheritanceError(
- getNodeType(), getName(), pDecl);
- }
- }
- else
- {
- ErrorHandler::lookupError(*pInherits);
- }
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/source/idlc.cxx b/idlc/source/idlc.cxx
deleted file mode 100644
index ca47b34fe0d5..000000000000
--- a/idlc/source/idlc.cxx
+++ /dev/null
@@ -1,400 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <idlc.hxx>
-#include <errorhandler.hxx>
-#include <astscope.hxx>
-#include <astmodule.hxx>
-#include <astservice.hxx>
-#include <astconstants.hxx>
-#include <astexception.hxx>
-#include <astenum.hxx>
-#include <astinterface.hxx>
-#include <astoperation.hxx>
-#include <astbasetype.hxx>
-#include <astdeclaration.hxx>
-#include <astparameter.hxx>
-#include <astsequence.hxx>
-#include <asttype.hxx>
-#include <asttypedef.hxx>
-
-#include <osl/diagnose.h>
-#include <osl/file.hxx>
-#include <osl/thread.h>
-
-#include <algorithm>
-
-AstDeclaration* scopeAsDecl(AstScope* pScope)
-{
- if (pScope == nullptr) return nullptr;
-
- switch( pScope->getScopeNodeType() )
- {
- case NT_service:
- case NT_singleton:
- return static_cast<AstService*>(pScope);
- case NT_module:
- case NT_root:
- return static_cast<AstModule*>(pScope);
- case NT_constants:
- return static_cast<AstConstants*>(pScope);
- case NT_interface:
- return static_cast<AstInterface*>(pScope);
- case NT_operation:
- return static_cast<AstOperation*>(pScope);
- case NT_exception:
- return static_cast<AstException*>(pScope);
- case NT_struct:
- return static_cast<AstStruct*>(pScope);
- case NT_enum:
- return static_cast<AstEnum*>(pScope);
- default:
- return nullptr;
- }
-}
-
-AstScope* declAsScope(AstDeclaration* pDecl)
-{
- if (pDecl == nullptr) return nullptr;
-
- switch(pDecl->getNodeType())
- {
- case NT_interface:
- return static_cast<AstInterface*>(pDecl);
- case NT_service:
- case NT_singleton:
- return static_cast<AstService*>(pDecl);
- case NT_module:
- case NT_root:
- return static_cast<AstModule*>(pDecl);
- case NT_constants:
- return static_cast<AstConstants*>(pDecl);
- case NT_exception:
- return static_cast<AstException*>(pDecl);
- case NT_struct:
- return static_cast<AstStruct*>(pDecl);
- case NT_enum:
- return static_cast<AstEnum*>(pDecl);
- case NT_operation:
- return static_cast<AstOperation*>(pDecl);
- default:
- return nullptr;
- }
-}
-
-static void predefineXInterface(AstModule* pRoot)
-{
- // define the modules com::sun::star::uno
- AstModule* pParentScope = pRoot;
- AstModule* pModule = new AstModule("com", pParentScope);
- pModule->setPredefined(true);
- pParentScope->addDeclaration(pModule);
- pParentScope = pModule;
- pModule = new AstModule("sun", pParentScope);
- pModule->setPredefined(true);
- pParentScope->addDeclaration(pModule);
- pParentScope = pModule;
- pModule = new AstModule("star", pParentScope);
- pModule->setPredefined(true);
- pParentScope->addDeclaration(pModule);
- pParentScope = pModule;
- pModule = new AstModule("uno", pParentScope);
- pModule->setPredefined(true);
- pParentScope->addDeclaration(pModule);
- pParentScope = pModule;
-
- // define XInterface
- AstInterface* pInterface = new AstInterface("XInterface", nullptr, pParentScope);
- pInterface->setDefined();
- pInterface->setPredefined(true);
- pInterface->setPublished();
- pParentScope->addDeclaration(pInterface);
-
- // define XInterface::queryInterface
- AstOperation* pOp = new AstOperation(static_cast<AstType*>(pRoot->lookupPrimitiveType(ET_any)),
- "queryInterface", pInterface);
- AstParameter* pParam = new AstParameter(DIR_IN, false,
- static_cast<AstType*>(pRoot->lookupPrimitiveType(ET_type)),
- "aType", pOp);
- pOp->addDeclaration(pParam);
- pInterface->addMember(pOp);
-
- // define XInterface::acquire
- pOp = new AstOperation(static_cast<AstType*>(pRoot->lookupPrimitiveType(ET_void)),
- "acquire", pInterface);
- pInterface->addMember(pOp);
-
- // define XInterface::release
- pOp = new AstOperation(static_cast<AstType*>(pRoot->lookupPrimitiveType(ET_void)),
- "release", pInterface);
- pInterface->addMember(pOp);
-}
-
-static void initializePredefinedTypes(AstModule* pRoot)
-{
- if ( !pRoot )
- return;
-
- AstBaseType* pPredefined = new AstBaseType(ET_long, "long", pRoot);
- pRoot->addDeclaration(pPredefined);
-
- pPredefined = new AstBaseType(ET_ulong, "unsigned long", pRoot);
- pRoot->addDeclaration(pPredefined);
-
- pPredefined = new AstBaseType(ET_hyper, "hyper", pRoot);
- pRoot->addDeclaration(pPredefined);
-
- pPredefined = new AstBaseType(ET_uhyper, "unsigned hyper", pRoot);
- pRoot->addDeclaration(pPredefined);
-
- pPredefined = new AstBaseType(ET_short, "short", pRoot);
- pRoot->addDeclaration(pPredefined);
-
- pPredefined = new AstBaseType(ET_ushort, "unsigned short", pRoot);
- pRoot->addDeclaration(pPredefined);
-
- pPredefined = new AstBaseType(ET_float, "float", pRoot);
- pRoot->addDeclaration(pPredefined);
-
- pPredefined = new AstBaseType(ET_double, "double", pRoot);
- pRoot->addDeclaration(pPredefined);
-
- pPredefined = new AstBaseType(ET_char, "char", pRoot);
- pRoot->addDeclaration(pPredefined);
-
- pPredefined = new AstBaseType(ET_byte, "byte", pRoot);
- pRoot->addDeclaration(pPredefined);
-
- pPredefined = new AstBaseType(ET_any, "any", pRoot);
- pRoot->addDeclaration(pPredefined);
-
- pPredefined = new AstBaseType(ET_string, "string", pRoot);
- pRoot->addDeclaration(pPredefined);
-
- pPredefined = new AstBaseType(ET_type, "type", pRoot);
- pRoot->addDeclaration(pPredefined);
-
- pPredefined = new AstBaseType(ET_boolean, "boolean", pRoot);
- pRoot->addDeclaration(pPredefined);
-
- pPredefined = new AstBaseType(ET_void, "void", pRoot);
- pRoot->addDeclaration(pPredefined);
-}
-
-Idlc::Idlc(Options* pOptions)
- : m_pOptions(pOptions)
- , m_bIsDocValid(false)
- , m_bIsInMainfile(true)
- , m_published(false)
- , m_errorCount(0)
- , m_warningCount(0)
- , m_lineNumber(0)
- , m_offsetStart(0)
- , m_offsetEnd(0)
- , m_parseState(PS_NoState)
-{
- m_pScopes.reset( new AstStack() );
- // init root object after construction
- m_pRoot = nullptr;
- m_bGenerateDoc = m_pOptions->isValid("-C");
-}
-
-Idlc::~Idlc()
-{
-}
-
-void Idlc::init()
-{
- m_pRoot.reset(new AstModule(NT_root, OString(), nullptr));
-
- // push the root node on the stack
- m_pScopes->push(m_pRoot.get());
- initializePredefinedTypes(m_pRoot.get());
- predefineXInterface(m_pRoot.get());
-}
-
-void Idlc::reset()
-{
- m_bIsDocValid = false;
- m_bIsInMainfile = true;
- m_published = false;
-
- m_errorCount = 0;
- m_warningCount = 0;
- m_lineNumber = 0;
- m_parseState = PS_NoState;
-
- m_fileName.clear();
- m_mainFileName.clear();
- m_realFileName.clear();
- m_documentation.clear();
-
- m_pScopes->clear();
- m_pRoot.reset( new AstModule(NT_root, OString(), nullptr) );
-
- // push the root node on the stack
- m_pScopes->push(m_pRoot.get());
- initializePredefinedTypes(m_pRoot.get());
-
- m_includes.clear();
-}
-
-OUString Idlc::processDocumentation()
-{
- OUString doc;
- if (m_bIsDocValid) {
- OString raw(getDocumentation());
- if (m_bGenerateDoc) {
- doc = OStringToOUString(raw, RTL_TEXTENCODING_UTF8);
- } else if (raw.indexOf("@deprecated") != -1) {
- //TODO: this check is somewhat crude
- doc = "@deprecated";
- }
- }
- return doc;
-}
-
-static void lcl_writeString(::osl::File & rFile, ::osl::FileBase::RC & o_rRC,
- OString const& rString)
-{
- if (::osl::FileBase::E_None == o_rRC) {
- sal_uInt64 nWritten(0);
- o_rRC = rFile.write(rString.getStr(), rString.getLength(), nWritten);
- if (static_cast<sal_uInt64>(rString.getLength()) != nWritten) {
- o_rRC = ::osl::FileBase::E_INVAL; //?
- }
- }
-}
-
-namespace {
-
-struct WriteDep
-{
- ::osl::File& m_rFile;
- ::osl::FileBase::RC & m_rRC;
- explicit WriteDep(::osl::File & rFile, ::osl::FileBase::RC & rRC)
- : m_rFile(rFile), m_rRC(rRC) { }
- void operator() (OString const& rEntry)
- {
- lcl_writeString(m_rFile, m_rRC, " \\\n ");
- lcl_writeString(m_rFile, m_rRC, rEntry);
- }
-};
-
-// write a dummy target for one included file, so the incremental build does
-// not break with "No rule to make target" if the included file is removed
-struct WriteDummy
-{
- ::osl::File& m_rFile;
- ::osl::FileBase::RC & m_rRC;
- explicit WriteDummy(::osl::File & rFile, ::osl::FileBase::RC & rRC)
- : m_rFile(rFile), m_rRC(rRC) { }
- void operator() (OString const& rEntry)
- {
- lcl_writeString(m_rFile, m_rRC, rEntry);
- lcl_writeString(m_rFile, m_rRC, ":\n\n");
- }
-};
-
-}
-
-bool
-Idlc::dumpDeps(std::string_view rDepFile, OString const& rTarget)
-{
- ::osl::File depFile(
- OStringToOUString(rDepFile, osl_getThreadTextEncoding()));
- ::osl::FileBase::RC rc =
- depFile.open(osl_File_OpenFlag_Write | osl_File_OpenFlag_Create);
- if (::osl::FileBase::E_None != rc) {
- return false;
- }
- lcl_writeString(depFile, rc, rTarget);
- if (::osl::FileBase::E_None != rc) {
- return false;
- }
- lcl_writeString(depFile, rc, " :");
- if (::osl::FileBase::E_None != rc) {
- return false;
- }
- m_includes.erase(getRealFileName()); // eeek, that is a temp file...
- ::std::for_each(m_includes.begin(), m_includes.end(),
- WriteDep(depFile, rc));
- lcl_writeString(depFile, rc, "\n\n");
- ::std::for_each(m_includes.begin(), m_includes.end(),
- WriteDummy(depFile, rc));
- if (::osl::FileBase::E_None != rc) {
- return false;
- }
- rc = depFile.close();
- return ::osl::FileBase::E_None == rc;
-}
-
-static Idlc* pStaticIdlc = nullptr;
-
-Idlc* idlc()
-{
- return pStaticIdlc;
-}
-
-Idlc* setIdlc(Options* pOptions)
-{
- delete pStaticIdlc;
- pStaticIdlc = new Idlc(pOptions);
- pStaticIdlc->init();
- return pStaticIdlc;
-}
-
-AstDeclaration const * resolveTypedefs(AstDeclaration const * type) {
- if (type != nullptr) {
- while (type->getNodeType() == NT_typedef) {
- type = static_cast< AstTypeDef const * >(type)->getBaseType();
- }
- }
- return type;
-}
-
-AstDeclaration const * deconstructAndResolveTypedefs(
- AstDeclaration const * type, sal_Int32 * rank)
-{
- *rank = 0;
- for (;;) {
- if (type == nullptr) {
- return nullptr;
- }
- switch (type->getNodeType()) {
- case NT_typedef:
- type = static_cast< AstTypeDef const * >(type)->getBaseType();
- break;
- case NT_sequence:
- ++(*rank);
- type = static_cast< AstSequence const * >(type)->getMemberType();
- break;
- default:
- return type;
- }
- }
-}
-
-AstInterface const * resolveInterfaceTypedefs(AstType const * type) {
- AstDeclaration const * decl = resolveTypedefs(type);
- OSL_ASSERT(decl->getNodeType() == NT_interface);
- return static_cast< AstInterface const * >(decl);
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/source/idlccompile.cxx b/idlc/source/idlccompile.cxx
deleted file mode 100644
index 5aec2091234f..000000000000
--- a/idlc/source/idlccompile.cxx
+++ /dev/null
@@ -1,394 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <idlc.hxx>
-#include <rtl/alloc.h>
-#include <rtl/ustring.hxx>
-#include <rtl/strbuf.hxx>
-#include <o3tl/safeint.hxx>
-#include <o3tl/string_view.hxx>
-#include <osl/process.h>
-#include <osl/diagnose.h>
-#include <osl/thread.h>
-#include <osl/file.hxx>
-
-#if defined(_WIN32)
-#include <io.h>
-#endif
-
-#ifdef SAL_UNX
-#include <errno.h>
-#include <unistd.h>
-#include <sys/wait.h>
-#endif
-
-#include <string.h>
-
-using namespace ::osl;
-
-extern int yyparse();
-extern FILE* yyin;
-extern int yydebug;
-
-static char tmpFilePattern[512];
-
-bool isFileUrl(std::string_view fileName)
-{
- return o3tl::starts_with(fileName, "file://");
-}
-
-OString convertToAbsoluteSystemPath(const OString& fileName)
-{
- OUString uSysFileName;
- OUString uFileName(fileName.getStr(), fileName.getLength(), osl_getThreadTextEncoding());
- if ( isFileUrl(fileName) )
- {
- if (FileBase::getSystemPathFromFileURL(uFileName, uSysFileName)
- != FileBase::E_None)
- {
- OSL_ASSERT(false);
- }
- } else
- {
- OUString uWorkingDir, uUrlFileName, uTmp;
- if (osl_getProcessWorkingDir(&uWorkingDir.pData) != osl_Process_E_None)
- {
- OSL_ASSERT(false);
- }
- if (FileBase::getFileURLFromSystemPath(uFileName, uTmp)
- != FileBase::E_None)
- {
- OSL_ASSERT(false);
- }
- if (FileBase::getAbsoluteFileURL(uWorkingDir, uTmp, uUrlFileName)
- != FileBase::E_None)
- {
- OSL_ASSERT(false);
- }
- if (FileBase::getSystemPathFromFileURL(uUrlFileName, uSysFileName)
- != FileBase::E_None)
- {
- OSL_ASSERT(false);
- }
- }
-
- return OUStringToOString(uSysFileName, osl_getThreadTextEncoding());
-}
-
-OString convertToFileUrl(const OString& fileName)
-{
- if ( !isFileUrl(fileName) )
- {
- OString tmp = convertToAbsoluteSystemPath(fileName);
- OUString uFileName(tmp.getStr(), tmp.getLength(), osl_getThreadTextEncoding());
- OUString uUrlFileName;
- if (FileBase::getFileURLFromSystemPath(uFileName, uUrlFileName)
- != FileBase::E_None)
- {
- OSL_ASSERT(false);
- }
- return OUStringToOString(uUrlFileName, osl_getThreadTextEncoding());
- }
-
- return fileName;
-}
-
-static OString makeTempName(const OString& prefix)
-{
- OUString uTmpPath;
- OString tmpPath;
-
- if ( osl_getEnvironment(OUString("TMP").pData, &uTmpPath.pData) != osl_Process_E_None )
- {
- if ( osl_getEnvironment(OUString("TEMP").pData, &uTmpPath.pData) != osl_Process_E_None )
- {
-#if defined(_WIN32)
- tmpPath = OString("c:\\temp");
-#else
- tmpPath = OString("/tmp");
-#endif
- }
- }
-
- if ( !uTmpPath.isEmpty() )
- tmpPath = OUStringToOString(uTmpPath, RTL_TEXTENCODING_UTF8);
-
-#if defined(_WIN32) || defined(SAL_UNX)
-
- OSL_ASSERT( sizeof(tmpFilePattern) >
- o3tl::make_unsigned( tmpPath.getLength()
- + RTL_CONSTASCII_LENGTH( PATH_SEPARATOR )
- + prefix.getLength()
- + RTL_CONSTASCII_LENGTH( "XXXXXX") ) );
-
- tmpFilePattern[ sizeof(tmpFilePattern)-1 ] = '\0';
- strncpy(tmpFilePattern, tmpPath.getStr(), sizeof(tmpFilePattern)-1);
- strncat(tmpFilePattern, PATH_SEPARATOR, sizeof(tmpFilePattern)-1-strlen(tmpFilePattern));
- strncat(tmpFilePattern, prefix.getStr(), sizeof(tmpFilePattern)-1-strlen(tmpFilePattern));
- strncat(tmpFilePattern, "XXXXXX", sizeof(tmpFilePattern)-1-strlen(tmpFilePattern));
-
-#ifdef SAL_UNX
- // coverity[secure_temp] - https://communities.coverity.com/thread/3179
- int nDescriptor = mkstemp(tmpFilePattern);
- if( -1 == nDescriptor )
- {
- fprintf(stderr, "idlc: mkstemp(\"%s\") failed: %s\n", tmpFilePattern, strerror(errno));
- exit( 1 );
- }
- // the file shall later be reopened by stdio functions
- close( nDescriptor );
-#else
- (void) mktemp(tmpFilePattern);
-#endif
-#endif
-
- return tmpFilePattern;
-}
-
-bool copyFile(const OString* source, const OString& target)
-{
- bool bRet = true;
-
- FILE* pSource = source == nullptr ? stdin : fopen(source->getStr(), "rb");
- if ( !pSource )
- return false;
-
- FILE* pTarget = fopen(target.getStr(), "wb");
- if ( !pTarget )
- {
- fclose(pSource);
- return false;
- }
-
- size_t const totalSize = 512;
- char pBuffer[totalSize + 1];
-
- while ( !feof(pSource) )
- {
- size_t readSize = fread(pBuffer, 1, totalSize, pSource);
- if ( readSize > 0 && !ferror(pSource) )
- {
- if ( (fwrite(pBuffer, 1, readSize, pTarget)) != readSize || ferror(pTarget) )
- {
- if (source != nullptr) {
- fclose(pSource);
- }
- fclose(pTarget);
- return false;
- }
- }
- }
-
- if (source != nullptr) {
- fclose(pSource);
- }
- if ( fclose(pTarget) )
- bRet = false;
-
- return bRet;
-}
-
-sal_Int32 compileFile(const OString * pathname)
-{
- // preprocess input file
- OString tmpFile = makeTempName("idli_");
- OString preprocFile = makeTempName("idlf_");
-
- OString fileName;
- if (pathname == nullptr) {
- fileName = "stdin";
- } else {
- fileName = *pathname;
- }
-
- if ( !copyFile(pathname, tmpFile) )
- {
- fprintf(stderr, "%s: could not copy %s%s to %s\n",
- idlc()->getOptions()->getProgramName().getStr(),
- pathname == nullptr ? "" : "file ", fileName.getStr(),
- tmpFile.getStr());
- exit(99);
- }
-
- idlc()->setFileName(fileName);
- idlc()->setMainFileName(fileName);
- idlc()->setRealFileName(tmpFile);
-
- ::std::vector< OUString> lCppArgs;
- lCppArgs.emplace_back("-DIDL");
- lCppArgs.emplace_back("-C");
-#ifdef SYSTEM_UCPP_IS_GCC
- // -nostdinc Do not search the standard system directories for header files
- lCppArgs.emplace_back("-nostdinc");
- // with gcc cpp, even when not explicitly including anything, /usr/include/stdc-predef.h
- // gets inserted without -nostdinc
-#else
- // -zI Do not use the standard (compile-time) include path.
- lCppArgs.emplace_back("-zI");
-#endif
-
- Options* pOptions = idlc()->getOptions();
-
- OString filePath;
- sal_Int32 index = fileName.lastIndexOf(SEPARATOR);
-
- if ( index > 0)
- {
- filePath = fileName.copy(0, index);
-
- if ( !filePath.isEmpty() )
- {
- OString cppArgs = "-I" + filePath;
- lCppArgs.push_back(OStringToOUString(
- cppArgs.replace('\\', '/'),
- RTL_TEXTENCODING_UTF8));
- }
- }
-
- if ( pOptions->isValid("-D") )
- {
- OString dOpt = pOptions->getOption("-D");
- sal_Int32 nIndex = 0;
- do
- {
- std::string_view token = o3tl::getToken(dOpt, 0, ' ', nIndex );
- if (token.size())
- lCppArgs.push_back("-D" + OStringToOUString(token, RTL_TEXTENCODING_UTF8));
- } while( nIndex != -1 );
- }
-
- if ( pOptions->isValid("-I") )
- {
- OString incOpt = pOptions->getOption("-I");
- sal_Int32 nIndex = 0;
- do
- {
- std::string_view token = o3tl::getToken(incOpt, 0, ' ', nIndex );
- if (token.size())
- lCppArgs.push_back("-I" + OStringToOUString(token, RTL_TEXTENCODING_UTF8));
- } while( nIndex != -1 );
- }
-
- lCppArgs.emplace_back("-o");
-
- lCppArgs.push_back(OStringToOUString(preprocFile, RTL_TEXTENCODING_UTF8));
-
- lCppArgs.push_back(OStringToOUString(tmpFile, RTL_TEXTENCODING_UTF8));
-
- OUString cpp;
- OUString startDir;
-#ifndef SYSTEM_UCPP
- if (osl_getExecutableFile(&cpp.pData) != osl_Process_E_None) {
- OSL_ASSERT(false);
- }
-
- sal_Int32 idx= cpp.lastIndexOf("idlc");
- cpp = cpp.copy(0, idx);
-
-#if defined(_WIN32)
- cpp += "ucpp.exe";
-#else
- cpp += "ucpp";
-#endif
-#else // SYSTEM_UCPP
- cpp = OUString(UCPP);
-#endif
- oslProcess hProcess = nullptr;
- oslProcessError procError = osl_Process_E_None;
-
- const int nCmdArgs = lCppArgs.size();
- std::unique_ptr<rtl_uString*[]> pCmdArgs(new rtl_uString*[nCmdArgs]);
-
- int i = 0;
- for (auto const& elem : lCppArgs)
- {
- pCmdArgs[i++] = elem.pData;
- }
-
- procError = osl_executeProcess( cpp.pData, pCmdArgs.get(), nCmdArgs, osl_Process_WAIT,
- nullptr, startDir.pData, nullptr, 0, &hProcess );
-
- oslProcessInfo hInfo;
- hInfo.Size = sal_uInt32(sizeof(oslProcessInfo));
- if (osl_getProcessInfo(hProcess, osl_Process_EXITCODE, &hInfo)
- != osl_Process_E_None)
- {
- OSL_ASSERT(false);
- }
-
- if ( procError || (hInfo.Code != 0) )
- {
- if ( procError != osl_Process_E_None )
- fprintf(stderr, "%s: starting preprocessor failed\n", pOptions->getProgramName().getStr());
- else
- fprintf(stderr, "%s: preprocessing %s%s failed\n",
- pOptions->getProgramName().getStr(),
- pathname == nullptr ? "" : "file ", fileName.getStr());
-
- osl_freeProcessHandle(hProcess);
- exit(hInfo.Code ? hInfo.Code : 99);
- }
- osl_freeProcessHandle(hProcess);
-
- if (unlink(tmpFile.getStr()) != 0)
- {
- fprintf(stderr, "%s: Could not remove cpp input file %s\n",
- pOptions->getProgramName().getStr(), tmpFile.getStr());
- exit(99);
- }
-
- if ( pOptions->isValid("-E") )
- {
- if (unlink(preprocFile.getStr()) != 0)
- {
- fprintf(stderr, "%s: Could not remove parser input file %s\n",
- pOptions->getProgramName().getStr(), preprocFile.getStr());
- exit(99);
- }
- exit(0);
- }
-
- // parse file
- yyin = fopen(preprocFile.getStr(), "r");
- if (yyin == nullptr)
- {
- fprintf(stderr, "%s: Could not open cpp output file %s\n",
- pOptions->getProgramName().getStr(), preprocFile.getStr());
- exit(99);
- }
-
- //yydebug = 0 no trace information
- //yydebug = 1 parser produce trace information
- yydebug = 0;
-
- yyparse();
- sal_Int32 nErrors = idlc()->getErrorCount();
-
- fclose(yyin);
- if (unlink(preprocFile.getStr()) != 0)
- {
- fprintf(stderr, "%s: Could not remove parser input file %s\n",
- pOptions->getProgramName().getStr(), preprocFile.getStr());
- exit(99);
- }
-
- return nErrors;
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/source/idlcmain.cxx b/idlc/source/idlcmain.cxx
deleted file mode 100644
index 742dc4e815ce..000000000000
--- a/idlc/source/idlcmain.cxx
+++ /dev/null
@@ -1,164 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-
-#include <idlc.hxx>
-#include <sal/main.h>
-
-#include <string.h>
-
-SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv)
-{
- std::vector< std::string > args;
- for (int i = 1; i < argc; i++)
- {
- if (!Options::checkArgument (args, argv[i], strlen(argv[i])))
- return 1;
- }
-
- Options options(argv[0]);
- sal_Int32 nErrors = 0;
-
- try
- {
- if (!options.initOptions(args))
- return 0;
-
- setIdlc(&options);
-
- if (options.readStdin()) {
- if ( !options.quiet() )
- fprintf(
- stdout, "%s: Compiling stdin\n",
- options.getProgramName().getStr());
- nErrors = compileFile(nullptr);
- if ( ( idlc()->getWarningCount() > 0 ) && !options.quiet() ) {
- fprintf(
- stdout, "%s: detected %lu warnings compiling stdin\n",
- options.getProgramName().getStr(),
- sal::static_int_cast< unsigned long >(
- idlc()->getWarningCount()));
- }
- OString outputUrl;
- if (options.isValid("-O")) {
- outputUrl = convertToFileUrl(options.getOption("-O"));
- if (!outputUrl.endsWith("/")) {
- outputUrl += "/";
- }
- outputUrl += "stdin.urd";
- } else {
- outputUrl = convertToFileUrl("stdin.urd");
- }
- if (nErrors > 0) {
- removeIfExists(outputUrl);
- } else {
- nErrors = produceFile(outputUrl, nullptr);
- }
- idlc()->reset();
- }
- std::vector< OString > const & files = options.getInputFiles();
- if ( options.verbose() )
- {
- fprintf( stdout, "%s: compiling %i source files ... \n",
- options.getProgramName().getStr(), static_cast<int>(files.size()) );
- fflush( stdout );
- }
- for (auto const& elem : files)
- {
- if (nErrors)
- break;
- OString sysFileName( convertToAbsoluteSystemPath(elem) );
-
- if ( !options.quiet() )
- fprintf(stdout, "Compiling: %s\n", elem.getStr());
- nErrors = compileFile(&sysFileName);
-
- if ( idlc()->getWarningCount() && !options.quiet() )
- fprintf(stdout, "%s: detected %" SAL_PRIdINT64 " warnings compiling file '%s'\n",
- options.getProgramName().getStr(),
- sal_Int64(idlc()->getWarningCount()),
- elem.getStr());
-
- // prepare output file name
- OString const strippedFileName(
- sysFileName.copy(sysFileName.lastIndexOf(SEPARATOR) + 1));
- OString outputFile;
- if ( options.isValid("-O") )
- {
- outputFile = options.getOption("-O");
- if (!outputFile.endsWith("/")) {
- outputFile += "/";
- }
- outputFile += strippedFileName.replaceAt(
- strippedFileName.getLength() -3 , 3, "urd");
- } else {
- outputFile =
- sysFileName.replaceAt(sysFileName.getLength() -3 , 3, "urd");
- }
- OString const outputFileUrl = convertToFileUrl(outputFile);
-
- OString depFileUrl;
- if (options.isValid("-M")) {
- depFileUrl = convertToFileUrl(options.getOption("-M"));
- if (!depFileUrl.endsWith("/")) {
- depFileUrl += "/";
- }
- depFileUrl += strippedFileName.replaceAt(
- strippedFileName.getLength() -3 , 3, "d");
- }
-
- if ( nErrors ) {
- if (options.isValid("-M")) {
- removeIfExists(depFileUrl);
- }
- removeIfExists(outputFileUrl);
- } else {
- sPair_t const pair(depFileUrl, outputFile);
- nErrors = produceFile(outputFileUrl,
- (options.isValid("-M")) ? &pair : nullptr);
- }
-
- idlc()->reset();
- }
-
- if ( nErrors > 0 )
- {
- fprintf(stderr, "%s: detected %" SAL_PRIdINT64 " errors%s",
- options.getProgramName().getStr(),
- sal_Int64(nErrors),
- options.prepareVersion().getStr());
- } else
- {
- if ( options.verbose() )
- fprintf(stdout, "%s: returned successful%s",
- options.getProgramName().getStr(),
- options.prepareVersion().getStr());
- }
- } catch(const IllegalArgument& e)
- {
- fprintf(stderr, "Illegal argument: %s\n%s",
- e.m_message.getStr(),
- options.prepareVersion().getStr());
- return 99;
- }
-
- return nErrors;
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/source/idlcproduce.cxx b/idlc/source/idlcproduce.cxx
deleted file mode 100644
index 2592fe0dee27..000000000000
--- a/idlc/source/idlcproduce.cxx
+++ /dev/null
@@ -1,242 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <idlc.hxx>
-#include <astmodule.hxx>
-#include <rtl/strbuf.hxx>
-#include <osl/file.hxx>
-#include <osl/thread.h>
-#include <o3tl/string_view.hxx>
-
-#if defined(_WIN32)
-#include <io.h>
-#include <direct.h>
-#include <errno.h>
-#endif
-
-#ifdef SAL_UNX
-#include <unistd.h>
-#include <sys/stat.h>
-#include <errno.h>
-#endif
-
-#include <string.h>
-
-using namespace ::osl;
-
-static std::list< OString > gaCreatedDirectories;
-
-static bool checkOutputPath(const OString& completeName)
-{
- OString sysPathName = convertToAbsoluteSystemPath(completeName);
- OStringBuffer buffer(sysPathName.getLength()+16);
-
- if ( sysPathName.indexOf( SEPARATOR ) == -1 )
- return true;
-
- sal_Int32 nIndex = 0;
- std::string_view token(o3tl::getToken(sysPathName, 0, SEPARATOR, nIndex));
- if (o3tl::starts_with(token, "..")
- || (token.size() >= 2 && token[1] == ':')
- || o3tl::starts_with(token, "."))
- {
- buffer.append(token);
- buffer.append(SEPARATOR);
- }
- else
- nIndex = 0;
-
- do
- {
- buffer.append(o3tl::getToken(sysPathName, 0, SEPARATOR, nIndex));
-
- if ( !buffer.isEmpty() && nIndex != -1 )
- {
-#if defined(SAL_UNX)
- if (mkdir(buffer.getStr(), 0777) == -1)
-#else
- if (mkdir(buffer.getStr()) == -1)
-#endif
- {
- if (errno == ENOENT)
- {
- fprintf(stderr, "%s: cannot create directory '%s'\n",
- idlc()->getOptions()->getProgramName().getStr(), buffer.getStr());
- return false;
- }
- }
- else
- {
- gaCreatedDirectories.push_front(buffer.getStr());
- }
- }
- buffer.append(SEPARATOR);
- } while( nIndex != -1 );
- return true;
-}
-
-static bool cleanPath()
-{
- for (auto const& createdDirectory : gaCreatedDirectories)
- {
-//#ifdef SAL_UNX
-// if (rmdir((char*)createdDirectory.getStr(), 0777) == -1)
-//#else
- if (rmdir(createdDirectory.getStr()) == -1)
-//#endif
- {
- fprintf(stderr, "%s: cannot remove directory '%s'\n",
- idlc()->getOptions()->getProgramName().getStr(), createdDirectory.getStr());
- return false;
- }
- }
- gaCreatedDirectories.clear();
- return true;
-}
-
-void removeIfExists(std::string_view pathname)
-{
- osl::File::remove(OStringToOUString(pathname, RTL_TEXTENCODING_UTF8));
-}
-
-sal_Int32
-produceFile(const OString& regFileName, sPair_t const*const pDepFile)
-{
- Options* pOptions = idlc()->getOptions();
-
- OString regTmpName = regFileName.replaceAt(regFileName.getLength() -3, 3, "_idlc_");
-
- if ( !checkOutputPath(regFileName) )
- {
- fprintf(stderr, "%s: could not create path of registry file '%s'.\n",
- pOptions->getProgramName().getStr(), regFileName.getStr());
- return 1;
- }
-
- OString depTmpName;
- if (pDepFile)
- {
- depTmpName = pDepFile->first.replaceAt(
- regFileName.getLength() -3, 3, "_idlc_");
- if ( !checkOutputPath(depTmpName) )
- {
- fprintf(stderr, "%s: could not create path of dep file '%s'.\n",
- pOptions->getProgramName().getStr(), pDepFile->first.getStr());
- return 1;
- }
- removeIfExists(depTmpName);
- }
-
- removeIfExists(regTmpName);
- OString urlRegTmpName = convertToFileUrl(regTmpName);
-
- Registry regFile;
- if ( regFile.create(OStringToOUString(urlRegTmpName, RTL_TEXTENCODING_UTF8)) != RegError::NO_ERROR )
- {
- fprintf(stderr, "%s: could not create registry file '%s'\n",
- pOptions->getProgramName().getStr(), regTmpName.getStr());
- removeIfExists(regTmpName);
- removeIfExists(regFileName);
- cleanPath();
- return 1;
- }
-
- RegistryKey rootKey;
- if ( regFile.openRootKey(rootKey) != RegError::NO_ERROR )
- {
- fprintf(stderr, "%s: could not open root of registry file '%s'\n",
- pOptions->getProgramName().getStr(), regFileName.getStr());
- removeIfExists(regTmpName);
- removeIfExists(regFileName);
- cleanPath();
- return 1;
- }
-
- // produce registry file
- if ( !idlc()->getRoot()->dump(rootKey) )
- {
- rootKey.releaseKey();
- if (regFile.close() != RegError::NO_ERROR)
- {
- fprintf(stderr, "%s: could not close registry file '%s'\n",
- pOptions->getProgramName().getStr(), regFileName.getStr());
- }
- regFile.destroy(OStringToOUString(regFileName, RTL_TEXTENCODING_UTF8));
- removeIfExists(regFileName);
- cleanPath();
- return 1;
- }
-
- rootKey.releaseKey();
- if ( regFile.close() != RegError::NO_ERROR )
- {
- fprintf(stderr, "%s: could not close registry file '%s'\n",
- pOptions->getProgramName().getStr(), regFileName.getStr());
- removeIfExists(regTmpName);
- removeIfExists(regFileName);
- cleanPath();
- return 1;
- }
-
- if (pDepFile && !idlc()->dumpDeps(depTmpName, pDepFile->second))
- {
- fprintf(stderr, "%s: could not write dep file '%s'\n",
- pOptions->getProgramName().getStr(), pDepFile->first.getStr());
- removeIfExists(depTmpName);
- removeIfExists(pDepFile->first);
- removeIfExists(regTmpName);
- removeIfExists(regFileName);
- cleanPath();
- return 1;
- }
-
- removeIfExists(regFileName);
-
- if ( File::move(OStringToOUString(regTmpName, osl_getThreadTextEncoding()),
- OStringToOUString(regFileName, osl_getThreadTextEncoding())) != FileBase::E_None ) {
- fprintf(stderr, "%s: cannot rename temporary registry '%s' to '%s'\n",
- idlc()->getOptions()->getProgramName().getStr(),
- regTmpName.getStr(), regFileName.getStr());
- removeIfExists(regTmpName);
- cleanPath();
- return 1;
- }
- removeIfExists(regTmpName);
-
- if (pDepFile)
- {
- removeIfExists(pDepFile->first);
- if ( File::move(OStringToOUString(depTmpName, osl_getThreadTextEncoding()),
- OStringToOUString(pDepFile->first, osl_getThreadTextEncoding())) != FileBase::E_None ) {
- fprintf(stderr, "%s: cannot rename dep file '%s' to '%s'\n",
- idlc()->getOptions()->getProgramName().getStr(),
- depTmpName.getStr(), pDepFile->first.getStr());
- removeIfExists(depTmpName);
- removeIfExists(pDepFile->first);
- removeIfExists(regFileName);
- cleanPath();
- return 1;
- }
- removeIfExists(depTmpName);
- }
-
- return 0;
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/source/options.cxx b/idlc/source/options.cxx
deleted file mode 100644
index 0fd06cc9fb3c..000000000000
--- a/idlc/source/options.cxx
+++ /dev/null
@@ -1,424 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <sal/config.h>
-
-#include <string_view>
-
-#include <options.hxx>
-
-#include <osl/diagnose.h>
-#include <rtl/string.hxx>
-#include <rtl/strbuf.hxx>
-
-#include <rtl/ustring.hxx>
-#include <osl/file.hxx>
-#include <o3tl/char16_t2wchar_t.hxx>
-#include <o3tl/string_view.hxx>
-
-#ifdef _WIN32
-# if !defined WIN32_LEAN_AND_MEAN
-# define WIN32_LEAN_AND_MEAN
-# endif
-# include <windows.h>
-#endif
-
-#include <stdio.h>
-#include <string.h>
-
-
-Options::Options(char const * progname)
- : m_program(progname), m_stdin(false), m_verbose(false), m_quiet(false)
-{
-}
-
-Options::~Options()
-{
-}
-
-// static
-bool Options::checkArgument (std::vector< std::string > & rArgs, char const * arg, size_t len)
-{
- bool result = ((arg != nullptr) && (len > 0));
- OSL_PRECOND(result, "idlc::Options::checkArgument(): invalid arguments");
- if (!result)
- return false;
-
- switch(arg[0])
- {
- case '@':
- result = len > 1;
- if (result)
- {
- // "@<cmdfile>"
- result = Options::checkCommandFile (rArgs, &(arg[1]));
- }
- break;
- case '-':
- result = len > 1;
- if (result)
- {
- // "-<option>"
- switch (arg[1])
- {
- case 'O':
- case 'M':
- case 'I':
- case 'D':
- {
- // "-<option>[<param>]
- std::string option(&(arg[0]), 2);
- rArgs.push_back(option);
- if (len > 2)
- {
- // "-<option><param>"
- std::string param(&(arg[2]), len - 2);
- rArgs.push_back(param);
- }
- break;
- }
- default:
- // "-<option>" ([long] option, w/o param)
- rArgs.emplace_back(arg, len);
- break;
- }
- }
- break;
- default:
- // "<param>"
- rArgs.emplace_back(arg, len);
- break;
- }
- return result;
-}
-
-// static
-bool Options::checkCommandFile (std::vector< std::string > & rArgs, char const * filename)
-{
- FILE * fp = fopen(filename, "r");
- if (fp == nullptr)
- {
- fprintf(stderr, "ERROR: can't open command file \"%s\"\n", filename);
- return false;
- }
-
- std::string buffer;
- buffer.reserve(256);
-
- bool quoted = false;
- int c = EOF;
- while ((c = fgetc(fp)) != EOF)
- {
- switch(c)
- {
- case '\"':
- quoted = !quoted;
- break;
- case ' ':
- case '\t':
- case '\r':
- case '\n':
- if (!quoted)
- {
- if (!buffer.empty())
- {
- // append current argument.
- if (!Options::checkArgument(rArgs, buffer.c_str(), buffer.size()))
- {
- (void) fclose(fp);
- return false;
- }
- buffer.clear();
- }
- break;
- }
- [[fallthrough]];
- default:
- buffer.push_back(sal::static_int_cast<char>(c));
- break;
- }
- }
- if (!buffer.empty())
- {
- // append unterminated argument.
- if (!Options::checkArgument(rArgs, buffer.c_str(), buffer.size()))
- {
- (void) fclose(fp);
- return false;
- }
- buffer.clear();
- }
- return (fclose(fp) == 0);
-}
-
-bool Options::badOption(char const * reason, std::string const & rArg)
-{
- if (reason != nullptr)
- {
- OString message = OString::Concat(reason) + " option '" + rArg.c_str() + "'";
- throw IllegalArgument(message);
- }
- return false;
-}
-
-bool Options::setOption(char const * option, std::string const & rArg)
-{
- bool result = (0 == strcmp(option, rArg.c_str()));
- if (result)
- m_options[rArg.c_str()] = OString(rArg.c_str(), rArg.size());
- return result;
-}
-
-#ifdef _WIN32
-/* Helper function to convert windows paths including spaces, brackets etc. into
- a windows short Url. The ucpp preprocessor has problems with such paths and returns
- with error.
-*/
-static OString convertIncPathtoShortWindowsPath(const OString& incPath) {
- OUString path = OStringToOUString(incPath, RTL_TEXTENCODING_UTF8);
-
- std::vector<sal_Unicode> vec(path.getLength() + 1);
- //GetShortPathNameW only works if the file can be found!
- const DWORD len = GetShortPathNameW(
- o3tl::toW(path.getStr()), o3tl::toW(vec.data()), path.getLength() + 1);
-
- if (len > 0)
- {
- OUString ret(vec.data(), len);
- return OUStringToOString(ret, RTL_TEXTENCODING_UTF8);
- }
-
- return incPath;
-}
-#endif
-
-bool Options::initOptions(std::vector< std::string > & rArgs)
-{
- std::vector< std::string >::const_iterator first = rArgs.begin(), last = rArgs.end();
- for (; first != last; ++first)
- {
- if ((*first)[0] != '-')
- {
- OString filename((*first).c_str(), (*first).size());
- OString tmp(filename.toAsciiLowerCase());
- if (tmp.lastIndexOf(".idl") != (tmp.getLength() - 4))
- {
- throw IllegalArgument("'" + filename + "' is not a valid input file, only '*.idl' files will be accepted");
- }
- m_inputFiles.push_back(filename);
- continue;
- }
-
- std::string const option(*first);
- switch((*first)[1])
- {
- case 'O':
- {
- if ((++first == last) || ((*first)[0] == '-'))
- {
- return badOption("invalid", option);
- }
- OString param((*first).c_str(), (*first).size());
- m_options["-O"] = param;
- break;
- }
- case 'M':
- {
- if ((++first == last) || ((*first)[0] == '-'))
- {
- return badOption("invalid", option);
- }
- OString param((*first).c_str(), (*first).size());
- m_options["-M"] = param;
- break;
- }
- case 'I':
- {
- if ((++first == last) || ((*first)[0] == '-'))
- {
- return badOption("invalid", option);
- }
- OString param((*first).c_str(), (*first).size());
- {
- // quote param token(s).
- OStringBuffer buffer;
- sal_Int32 k = 0;
- do
- {
- if (!buffer.isEmpty())
- buffer.append(' ');
-// buffer.append("-I\"");
-#ifdef _WIN32
- OString incpath = convertIncPathtoShortWindowsPath(param.getToken(0, ';', k));
-#else
- std::string_view incpath = o3tl::getToken(param, 0, ';', k);
-#endif
- buffer.append(incpath);
-// buffer.append("\"");
- } while (k != -1);
- param = buffer.makeStringAndClear();
- }
- if (m_options.count("-I") > 0)
- {
- // append param.
- param = m_options["-I"] + " " + param;
- }
- m_options["-I"] = param;
- break;
- }
- case 'D':
- {
- if ((++first == last) || ((*first)[0] == '-'))
- {
- return badOption("invalid", option);
- }
- OString param = OString::Concat("-D") + std::string_view((*first).c_str(), (*first).size());
- if (m_options.count("-D") > 0)
- {
- param = m_options["-D"] + " " + param;
- }
- m_options["-D"] = param;
- break;
- }
- case 'C':
- {
- if (!setOption("-C", option))
- {
- return badOption("invalid", option);
- }
- break;
- }
- case 'c':
- {
- if (!setOption("-cid", option))
- {
- return badOption("invalid", option);
- }
- break;
- }
- case 'q':
- {
- if (!setOption("-quiet", option))
- {
- return badOption("invalid", option);
- }
- m_quiet = true;
- break;
- }
- case 'v':
- {
- if (!setOption("-verbose", option))
- {
- return badOption("invalid", option);
- }
- m_verbose = true;
- break;
- }
- case 'w':
- {
- if (!(setOption("-w", option) || setOption("-we", option)))
- {
- return badOption("invalid", option);
- }
- break;
- }
- case 'h':
- case '?':
- {
- if (!(setOption("-h", option) || setOption("-?", option)))
- {
- return badOption("invalid", option);
- }
- {
- (void) fprintf(stdout, "%s", prepareHelp().getStr());
- return false;
- }
- // break; // Unreachable
- }
- case 's':
- {
- if (!setOption("-stdin", option))
- {
- return badOption("invalid", option);
- }
- m_stdin = true;
- break;
- }
- default:
- return badOption("unknown", option);
- }
- }
- return true;
-}
-
-OString Options::prepareHelp() const
-{
- OString help = "\nusing: " +
- m_program + " [-options] <file_1> ... <file_n> | @<filename> | -stdin\n"
- " <file_n> = file_n specifies one or more idl files.\n"
- " Only files with the extension '.idl' are valid.\n"
- " @<filename> = filename specifies the name of a command file.\n"
- " -stdin = read idl file from standard input.\n"
- " Options:\n"
- " -O<path> = path specifies the output directory.\n"
- " The generated output is a registry file with\n"
- " the same name as the idl input file (or 'stdin'\n"
- " for -stdin).\n"
- " -M<path> = path specifies the output directory for deps.\n"
- " Generate GNU make dependency files with the\n"
- " same name as the idl input file.\n"
- " -I<path> = path specifies a directory where include\n"
- " files will be searched by the preprocessor.\n"
- " Multiple directories can be combined with ';'.\n"
- " -D<name> = name defines a macro for the preprocessor.\n"
- " -C = generate complete type information, including\n"
- " documentation.\n"
- " -cid = check if identifiers fulfill the UNO naming\n"
- " requirements.\n"
- " -quiet = no output.\n"
- " -verbose = verbose output.\n"
- " -w = display warning messages.\n"
- " -we = treat warnings as errors.\n"
- " -h|-? = print this help message and exit.\n\n" +
- prepareVersion();
-
- return help;
-}
-
-OString Options::prepareVersion() const
-{
- return m_program + " Version 1.1\n\n";
-}
-
-
-bool Options::isValid(const OString& option) const
-{
- return (m_options.count(option) > 0);
-}
-
-const OString& Options::getOption(const OString& option)
-{
- if (!isValid(option))
- {
- throw IllegalArgument("Option is not valid or currently not set.");
- }
- return m_options[option];
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/source/parser.y b/idlc/source/parser.y
deleted file mode 100644
index 29654c32bbbe..000000000000
--- a/idlc/source/parser.y
+++ /dev/null
@@ -1,2737 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-/*
- * parser.yy - BISON grammar for IDLC 1.0
- */
-
-%{
-#include <string.h>
-
-#include <idlc.hxx>
-#include <errorhandler.hxx>
-#include <fehelper.hxx>
-#include <astexpression.hxx>
-#include <astconstants.hxx>
-#include <astconstant.hxx>
-#include <astbasetype.hxx>
-#include <asttypedef.hxx>
-#include <astexception.hxx>
-#include <astmember.hxx>
-#include <astenum.hxx>
-#include <astsequence.hxx>
-#include <astattribute.hxx>
-#include <astoperation.hxx>
-#include <astparameter.hxx>
-#include <astinterfacemember.hxx>
-#include <astservicemember.hxx>
-#include <astobserves.hxx>
-#include <astneeds.hxx>
-
-#include <aststructinstance.hxx>
-
-#include "attributeexceptions.hxx"
-
-#include <rtl/string.hxx>
-#include <osl/diagnose.h>
-
-#include <algorithm>
-#include <vector>
-
-
-#define YYDEBUG 1
-#define YYERROR_VERBOSE 1
-
-extern int yylex(void);
-static void yyerror(char const *);
-
-static void checkIdentifier(OString const * id)
-{
- static short check = 0;
- if (check == 0) {
- if (idlc()->getOptions()->isValid("-cid"))
- check = 1;
- else
- check = 2;
- }
-
- if ( id->indexOf('_') >= 0 )
- if ( (id->pData->buffer[0] >= 97 && id->pData->buffer[0] <= 122)
- || id->pData->buffer[0] == '_') {
- if (check == 1) {
- OString msg = "mismatched identifier '" + *id + "'";
- ErrorHandler::syntaxError(idlc()->getParseState(),
- idlc()->getLineNumber(),
- msg.getStr());
- }
- else
- ErrorHandler::warning0(WarningCode::WrongNamingConvention, id->getStr());
- }
-}
-
-static void reportDoubleMemberDeclarations(
- AstInterface::DoubleMemberDeclarations const & doubleMembers)
-{
- for (auto const& doubleMember : doubleMembers)
- {
- ErrorHandler::error2(ErrorCode::DoubleMember, doubleMember.first, doubleMember.second);
- }
-}
-
-static void addInheritedInterface(
- AstInterface * ifc, OString const & name, bool optional,
- OUString const & documentation)
-{
- AstDeclaration * decl = ifc->lookupByName(name);
- AstDeclaration const * resolved = resolveTypedefs(decl);
- if (resolved != nullptr && resolved->getNodeType() == NT_interface) {
- if (ErrorHandler::checkPublished(decl)) {
- if (!static_cast< AstInterface const * >(resolved)->isDefined()) {
- ErrorHandler::inheritanceError(
- NT_interface, &ifc->getScopedName(), decl);
- } else {
- AstInterface::DoubleDeclarations doubleDecls(
- ifc->checkInheritedInterfaceClashes(
- static_cast< AstInterface const * >(resolved),
- optional));
- if (doubleDecls.interfaces.empty()
- && doubleDecls.members.empty())
- {
- ifc->addInheritedInterface(
- static_cast< AstType * >(decl), optional,
- documentation);
- } else {
- for (auto const& elem : doubleDecls.interfaces)
- {
- ErrorHandler::error1(
- ErrorCode::DoubleInheritance, elem);
- }
- reportDoubleMemberDeclarations(doubleDecls.members);
- }
- }
- }
- } else {
- ErrorHandler::lookupError(
- ErrorCode::InterfaceMemberLookup, name, scopeAsDecl(ifc));
- }
-}
-
-static AstDeclaration const * createNamedType(
- OString const * scopedName, DeclList const * typeArgs)
-{
- AstDeclaration * decl = idlc()->scopes()->topNonNull()->lookupByName(
- *scopedName);
- AstDeclaration const * resolved = resolveTypedefs(decl);
- if (decl == nullptr) {
- ErrorHandler::lookupError(*scopedName);
- } else if (!ErrorHandler::checkPublished(decl)) {
- decl = nullptr;
- } else if (resolved->getNodeType() == NT_struct) {
- if (static_cast< AstStruct const * >(resolved)->getTypeParameterCount()
- != (typeArgs == nullptr ? 0 : typeArgs->size()))
- {
- ErrorHandler::error0(ErrorCode::WrongNumberOfTypeArguments);
- decl = nullptr;
- } else if (typeArgs != nullptr) {
- AstScope * global = idlc()->scopes()->bottom();
- AstDeclaration * inst = new AstStructInstance(
- static_cast< AstType * >(decl), typeArgs, global);
- decl = global->addDeclaration(inst);
- if (decl != inst) {
- delete inst;
- }
- }
- } else if (decl->isType()) {
- if (typeArgs != nullptr) {
- ErrorHandler::error0(ErrorCode::WrongNumberOfTypeArguments);
- decl = nullptr;
- }
- } else {
- ErrorHandler::noTypeError(decl);
- decl = nullptr;
- }
- delete scopedName;
- delete typeArgs;
- return decl;
-}
-
-static bool includes(AstDeclaration const * type1, AstDeclaration const * type2) {
- OSL_ASSERT(type2 != nullptr);
- if (type1 != nullptr) {
- if (type1->getNodeType() == NT_instantiated_struct) {
- AstStructInstance const * inst
- = static_cast< AstStructInstance const * >(type1);
- if (inst->getTypeTemplate() == type2) {
- return true;
- }
- for (DeclList::const_iterator i(inst->getTypeArgumentsBegin());
- i != inst->getTypeArgumentsEnd(); ++i)
- {
- if (includes(*i, type2)) {
- return true;
- }
- }
- } else if (type1 == type2) {
- return true;
- }
- }
- return false;
-}
-
-// Suppress any warnings from generated code:
-#if defined _MSC_VER
-#pragma warning(disable: 4702) // unreachable code
-#endif
-%}
-/*
- * Declare the type of values in the grammar
- */
-%union {
- ExprType etval; /* Expression type */
- AstDeclaration* dclval; /* Declaration */
- AstDeclaration const * cdclval;
- DeclList * dclsval;
- AstExpression* exval; /* expression value */
- FeDeclarator* fdval; /* declarator value */
- FeDeclList* dlval; /* declarator list value */
- FeInheritanceHeader* ihval; /* inheritance header value */
- OString* sval; /* OString value */
- std::vector< OString > * svals;
- char* strval; /* char* value */
- bool bval; /* sal_Boolean* value */
- sal_Int64 ival; /* sal_Int64 value */
- sal_uInt64 uval; /* sal_uInt64 value */
- sal_uInt32 ulval; /* sal_uInt32 value */
- double dval; /* double value */
- float fval; /* float value */
- std::list< OString >* slval; /* StringList value */
- AttributeExceptions::Part attexcpval;
- AttributeExceptions attexcval;
-}
-
-/*
- * Token types: These are returned by the lexer
- */
-
-%token <sval> IDL_IDENTIFIER
-%token IDL_ATTRIBUTE
-%token IDL_BOUND
-%token IDL_CONST
-%token IDL_CONSTANTS
-%token IDL_CONSTRAINED
-%token IDL_ENUM
-%token IDL_EXCEPTION
-%token IDL_INTERFACE
-%token IDL_MAYBEAMBIGUOUS
-%token IDL_MAYBEDEFAULT
-%token IDL_MAYBEVOID
-%token IDL_MODULE
-%token IDL_NEEDS
-%token IDL_OBSERVES
-%token IDL_OPTIONAL
-%token IDL_PROPERTY
-%token IDL_RAISES
-%token IDL_READONLY
-%token IDL_REMOVABLE
-%token IDL_SERVICE
-%token IDL_SEQUENCE
-%token IDL_SINGLETON
-%token IDL_STRUCT
-%token IDL_TYPEDEF
-%token IDL_TRANSIENT
-
-%token IDL_ANY
-%token IDL_CHAR
-%token IDL_BOOLEAN
-%token IDL_BYTE
-%token IDL_DOUBLE
-%token IDL_FLOAT
-%token IDL_HYPER
-%token IDL_LONG
-%token IDL_SHORT
-%token IDL_VOID
-%token IDL_STRING
-%token IDL_TYPE
-%token IDL_UNSIGNED
-
-%token IDL_TRUE
-%token IDL_FALSE
-
-%token IDL_IN
-%token IDL_OUT
-%token IDL_INOUT
-
-%token IDL_GET
-%token IDL_SET
-
-%token IDL_PUBLISHED
-
-%token IDL_ELLIPSIS
-
-%token <strval> IDL_LEFTSHIFT
-%token <strval> IDL_RIGHTSHIFT
-%token <strval> IDL_SCOPESEPARATOR
-
-%token <ival> IDL_INTEGER_LITERAL
-%token <uval> IDL_INTEGER_ULITERAL
-%token <dval> IDL_FLOATING_PT_LITERAL
-
-/*
- * These are production names:
- */
-%type <dclval> type_dcl
-%type <dclval> exception_name
-%type <cdclval> constructed_type_spec enum_type op_type_spec
-%type <cdclval> sequence_type_spec simple_type_spec struct_type
-%type <cdclval> type_spec
-%type <cdclval> fundamental_type type_arg type_or_parameter
-%type <dclsval> opt_raises raises exception_list
-%type <attexcpval> opt_attribute_get_raises attribute_get_raises
-%type <attexcpval> opt_attribute_set_raises attribute_set_raises
-%type <dclsval> opt_type_args type_args
-
-%type <sval> identifier
-%type <sval> interface_decl
-%type <sval> scoped_name inheritance_spec
-%type <slval> scoped_names at_least_one_scoped_name
-
-%type <etval> const_type integer_type char_type boolean_type
-%type <etval> floating_pt_type any_type signed_int string_type
-%type <etval> unsigned_int base_type_spec byte_type type_type
-
-%type <exval> expression const_expr or_expr xor_expr and_expr
-%type <exval> add_expr mult_expr unary_expr primary_expr shift_expr
-%type <exval> literal
-
-%type <fdval> declarator
-%type <dlval> declarators at_least_one_declarator
-
-%type <ihval> exception_header structure_header interfaceheader
-
-%type <ulval> flag_header opt_attrflags opt_attrflag
-%type <ulval> direction service_interface_header service_service_header
-
-%type <bval> optional_inherited_interface opt_rest opt_service_body
-
-%type <attexcval> opt_attribute_block attribute_block_rest opt_attribute_raises
-
-%type <svals> opt_type_params type_params
-
-%%
-/*
- * Grammar start here
- */
-start : definitions;
-
-definitions :
- definition definitions
- | /* EMPTY */
- ;
-
-definition :
- opt_published publishable_definition
- | module_dcl
- {
- idlc()->setParseState(PS_ModuleDeclSeen);
- }
- ';'
- {
- idlc()->setParseState(PS_NoState);
- }
- | error ';'
- {
- yyerror("definitions");
- yyerrok;
- }
- ;
-
-opt_published:
- IDL_PUBLISHED { idlc()->setPublished(true); }
- | /* empty */ { idlc()->setPublished(false); }
- ;
-
-publishable_definition:
- type_dcl
- {
- idlc()->setParseState(PS_TypeDeclSeen);
- }
- ';'
- {
- idlc()->setParseState(PS_NoState);
- }
- | exception_dcl
- {
- idlc()->setParseState(PS_ExceptionDeclSeen);
- }
- ';'
- {
- idlc()->setParseState(PS_NoState);
- }
- | interface
- {
- idlc()->setParseState(PS_InterfaceDeclSeen);
- }
- ';'
- {
- idlc()->setParseState(PS_NoState);
- }
- | service_dcl
- {
- idlc()->setParseState(PS_ServiceDeclSeen);
- }
- ';'
- {
- idlc()->setParseState(PS_NoState);
- }
- | singleton_dcl
- {
- idlc()->setParseState(PS_SingletonDeclSeen);
- }
- ';'
- {
- idlc()->setParseState(PS_NoState);
- }
- | constants_dcl
- {
- idlc()->setParseState(PS_ConstantsDeclSeen);
- }
- ';'
- {
- idlc()->setParseState(PS_NoState);
- }
- ;
-
-module_dcl :
- IDL_MODULE
- {
- idlc()->setParseState(PS_ModuleSeen);
- idlc()->setPublished(false);
- }
- identifier
- {
- idlc()->setParseState(PS_ModuleIDSeen);
- checkIdentifier($3);
-
- AstScope* pScope = idlc()->scopes()->topNonNull();
- AstModule* pModule = nullptr;
-
- if ( pScope )
- {
- pModule = new AstModule(*$3, pScope);
- if( AstDeclaration* pExists = pScope->lookupForAdd(pModule) )
- {
- pExists->setInMainfile(idlc()->isInMainFile());
- pExists->setFileName(pModule->getFileName());
- if (pExists->isPredefined())
- {
- pExists->setPredefined(false);
- if (pExists->getDocumentation().getLength() == 0 &&
- pModule->getDocumentation().getLength() > 0)
- {
- pExists->setDocumentation(pModule->getDocumentation());
- }
- }
- delete(pModule);
- pModule = static_cast<AstModule*>(pExists);
- } else
- {
- pScope->addDeclaration(pModule);
- }
- idlc()->scopes()->push(pModule);
- }
- delete $3;
- }
- '{'
- {
- idlc()->setParseState(PS_ModuleSqSeen);
- }
- definitions
- {
- idlc()->setParseState(PS_ModuleBodySeen);
- }
- '}'
- {
- idlc()->setParseState(PS_ModuleQsSeen);
- /*
- * Finished with this module - pop it from the scope stack
- */
- idlc()->scopes()->pop();
- }
- ;
-
-interface :
- interface_dcl
- | forward_dcl
- ;
-
-interface_decl :
- IDL_INTERFACE
- {
- idlc()->setParseState(PS_InterfaceSeen);
- }
- identifier
- {
- idlc()->setParseState(PS_InterfaceIDSeen);
- checkIdentifier($3);
- $$ = $3;
- }
- ;
-
-forward_dcl :
- interface_decl
- {
- idlc()->setParseState(PS_ForwardDeclSeen);
-
- AstScope* pScope = idlc()->scopes()->topNonNull();
- AstInterface* pForward = nullptr;
- AstDeclaration* pDecl = nullptr;
-
- /*
- * Make a new forward interface node and add it to its enclosing scope
- */
- if ( pScope && $1 )
- {
- pForward = new AstInterface(*$1, nullptr, pScope);
-
- pDecl = pScope->lookupByName(pForward->getScopedName());
- if ( pDecl )
- {
- if ( (pDecl != pForward) &&
- (pDecl->getNodeType() == NT_interface) )
- {
- delete pForward;
- } else
- {
- ErrorHandler::error2(ErrorCode::RedefScope, scopeAsDecl(pScope), pDecl);
- }
- } else
- {
- /*
- * Add the interface to its definition scope
- */
- pScope->addDeclaration(pForward);
- }
- }
- delete $1;
- }
- ;
-
-interface_dcl :
- interfaceheader
- {
- idlc()->setParseState(PS_InterfaceHeadSeen);
-
- AstScope* pScope = idlc()->scopes()->topNonNull();
- AstInterface* pInterface = nullptr;
- AstInterface* pForward = nullptr;
-
- /*
- * Make a new interface node and add it to its enclosing scope
- */
- if ( pScope && $1 )
- {
- pInterface = new AstInterface(
- *$1->getName(),
- static_cast< AstInterface const * >(resolveTypedefs($1->getInherits())), pScope);
- if ( AstDeclaration* pDecl = pScope->lookupByName(pInterface->getScopedName()) )
- {
- /*
- * See if we're defining a forward declared interface.
- */
- if (pDecl->getNodeType() == NT_interface)
- {
- pForward = static_cast<AstInterface*>(pDecl);
- if ( !pForward->isDefined() )
- {
- /*
- * Check if redefining in same scope
- */
- if ( pForward->getScope() != pScope )
- {
- if ( pForward->getScopedName() != pInterface->getScopedName() )
- {
- ErrorHandler::error3(ErrorCode::ScopeConflict,
- pInterface, pForward, scopeAsDecl(pScope));
- }
- }
- else if ( !pInterface->isPublished()
- && pForward->isPublished() )
- {
- ErrorHandler::error0(ErrorCode::PublishedForward);
- }
- /*
- * All OK, set full definition
- */
- else
- {
- pForward->forwardDefined(*pInterface);
- delete pInterface;
- pInterface = pForward;
- }
- } else {
- // special handling for XInterface because it is predefined
- if ( pForward->isPredefined() &&
- pForward->getScopedName() == "com::sun::star::uno::XInterface")
- {
- /* replace the predefined XInterface */
- *pForward = *pInterface;
- delete pInterface;
- pInterface = pForward;
- }
-
- }
- }
- } else
- {
- /*
- * Add the interface to its definition scope
- */
- pScope->addDeclaration(pInterface);
- }
- }
- /*
- * Push it on the scope stack
- */
- idlc()->scopes()->push(pInterface);
- delete $1;
- }
- '{'
- {
- idlc()->setParseState(PS_InterfaceSqSeen);
- }
- exports
- {
- AstInterface * ifc = static_cast< AstInterface * >(
- idlc()->scopes()->topNonNull());
- if (!ifc->hasMandatoryInheritedInterfaces()
- && ifc->getScopedName() != "com::sun::star::uno::XInterface")
- {
- addInheritedInterface(
- ifc, "::com::sun::star::uno::XInterface", false,
- OUString());
- }
- ifc->setDefined();
- idlc()->setParseState(PS_InterfaceBodySeen);
- }
- '}'
- {
- idlc()->setParseState(PS_InterfaceQsSeen);
- /*
- * Done with this interface - pop it off the scopes stack
- */
- idlc()->scopes()->pop();
- }
- | error '}'
- {
- yyerror("interface definition");
- yyerrok;
- }
- ;
-
-interfaceheader :
- interface_decl inheritance_spec
- {
- idlc()->setParseState(PS_InheritSpecSeen);
-
- $$ = new FeInheritanceHeader(NT_interface, $1, $2, nullptr);
- delete $2;
- }
- ;
-
-inheritance_spec :
- ':'
- {
- idlc()->setParseState(PS_InheritColonSeen);
- }
- scoped_name
- {
- $$ = $3;
- }
- | /* EMPTY */
- {
- $$ = nullptr;
- }
- ;
-
-exports :
- exports export
- | /* EMPTY */
- ;
-
-export :
- attribute
- {
- idlc()->setParseState(PS_AttributeDeclSeen);
- }
- ';'
- {
- idlc()->setParseState(PS_NoState);
- }
- | operation
- {
- idlc()->setParseState(PS_OperationDeclSeen);
- }
- ';'
- {
- idlc()->setParseState(PS_NoState);
- }
- | interface_inheritance_decl
- {
- idlc()->setParseState(PS_InterfaceInheritanceDeclSeen);
- }
- ';'
- {
- idlc()->setParseState(PS_NoState);
- }
- ;
-
-attribute :
- flag_header
- simple_type_spec
- {
- idlc()->setParseState(PS_AttrTypeSeen);
- }
- declarator
- {
- idlc()->setParseState(PS_AttrCompleted);
- if (($1 & ~(AF_BOUND | AF_READONLY)) != AF_ATTRIBUTE) {
- ErrorHandler::flagError(ErrorCode::BadAttributeFlags, $1);
- }
- AstInterface * scope = static_cast< AstInterface * >(
- idlc()->scopes()->top());
- AstAttribute * attr = new AstAttribute(
- $1, FeDeclarator::compose($2), $4->getName(), scope);
- delete $4;
- AstInterface::DoubleMemberDeclarations doubleMembers(
- scope->checkMemberClashes(attr));
- if (doubleMembers.empty()) {
- scope->addMember(attr);
- } else {
- reportDoubleMemberDeclarations(doubleMembers);
- }
- idlc()->scopes()->push(attr);
- }
- opt_attribute_block
- {
- static_cast< AstAttribute * >(idlc()->scopes()->top())->setExceptions(
- $6.get.documentation, $6.get.exceptions, $6.set.documentation,
- $6.set.exceptions);
- delete $6.get.documentation;
- delete $6.get.exceptions;
- delete $6.set.documentation;
- delete $6.set.exceptions;
- idlc()->scopes()->pop();
- }
- ;
-
-flag_header :
- '[' opt_attrflags ']'
- {
- idlc()->setParseState(PS_FlagHeaderSeen);
- $$ = $2;
- }
- ;
-
-opt_attrflags :
- opt_attrflags ',' opt_attrflag
- {
- if ( ($1 & $3) == $3 )
- ErrorHandler::flagError(ErrorCode::DefinedAttributeFlag, $3);
-
- $$ = $1 | $3;
- }
- | opt_attrflag
- {
- $$ = $1;
- }
- ;
-
-opt_attrflag :
- IDL_ATTRIBUTE
- {
- idlc()->setParseState(PS_AttrSeen);
- $$ = AF_ATTRIBUTE;
- }
- | IDL_PROPERTY
- {
- idlc()->setParseState(PS_PropertySeen);
- $$ = AF_PROPERTY;
- }
- | IDL_READONLY
- {
- idlc()->setParseState(PS_ReadOnlySeen);
- $$ = AF_READONLY;
- }
- | IDL_OPTIONAL
- {
- idlc()->setParseState(PS_OptionalSeen);
- $$ = AF_OPTIONAL;
- }
- | IDL_MAYBEVOID
- {
- idlc()->setParseState(PS_MayBeVoidSeen);
- $$ = AF_MAYBEVOID;
- }
- | IDL_BOUND
- {
- idlc()->setParseState(PS_BoundSeen);
- $$ = AF_BOUND;
- }
- | IDL_CONSTRAINED
- {
- idlc()->setParseState(PS_ConstrainedSeen);
- $$ = AF_CONSTRAINED;
- }
- | IDL_TRANSIENT
- {
- idlc()->setParseState(PS_TransientSeen);
- $$ = AF_TRANSIENT;
- }
- | IDL_MAYBEAMBIGUOUS
- {
- idlc()->setParseState(PS_MayBeAmbiguousSeen);
- $$ = AF_MAYBEAMBIGUOUS;
- }
- | IDL_MAYBEDEFAULT
- {
- idlc()->setParseState(PS_MayBeDefaultSeen);
- $$ = AF_MAYBEDEFAULT;
- }
- | IDL_REMOVABLE
- {
- idlc()->setParseState(PS_RemoveableSeen);
- $$ = AF_REMOVABLE;
- }
- | error ']'
- {
- yyerror("unknown property|attribute flag");
- yyerrok;
- }
- ;
-
-opt_attribute_block:
- '{' attribute_block_rest { $$ = $2; }
- | /* empty */
- {
- $$.get.documentation = nullptr;
- $$.get.exceptions = nullptr;
- $$.set.documentation = nullptr;
- $$.set.exceptions = nullptr;
- }
- ;
-
-attribute_block_rest:
- opt_attribute_raises '}'
- | error '}'
- {
- yyerror("bad attribute raises block");
- yyerrok;
- $$.get.documentation = nullptr;
- $$.get.exceptions = nullptr;
- $$.set.documentation = nullptr;
- $$.set.exceptions = nullptr;
- }
- ;
-
-opt_attribute_raises:
- attribute_get_raises
- opt_attribute_set_raises
- {
- $$.get = $1;
- $$.set = $2;
- }
- | attribute_set_raises
- opt_attribute_get_raises
- {
- $$.get = $2;
- $$.set = $1;
- }
- | /* empty */
- {
- $$.get.documentation = nullptr;
- $$.get.exceptions = nullptr;
- $$.set.documentation = nullptr;
- $$.set.exceptions = nullptr;
- }
- ;
-
-opt_attribute_get_raises:
- attribute_get_raises
- | /* empty */ { $$.documentation = nullptr; $$.exceptions = nullptr; }
- ;
-
-attribute_get_raises:
- IDL_GET raises ';'
- {
- $$.documentation = new OUString(
- OStringToOUString(
- idlc()->getDocumentation(), RTL_TEXTENCODING_UTF8));
- $$.exceptions = $2;
- }
- ;
-
-opt_attribute_set_raises:
- attribute_set_raises
- | /* empty */ { $$.documentation = nullptr; $$.exceptions = nullptr; }
- ;
-
-attribute_set_raises:
- IDL_SET
- {
- if (static_cast< AstAttribute * >(idlc()->scopes()->top())->
- isReadonly())
- {
- ErrorHandler::error0(ErrorCode::ReadOnlyAttributeSetExceptions);
- }
- }
- raises ';'
- {
- $$.documentation = new OUString(
- OStringToOUString(
- idlc()->getDocumentation(), RTL_TEXTENCODING_UTF8));
- $$.exceptions = $3;
- }
- ;
-
-operation :
- op_type_spec
- {
- idlc()->setParseState(PS_OpTypeSeen);
- }
- identifier
- {
- idlc()->setParseState(PS_OpIDSeen);
- checkIdentifier($3);
-
- AstInterface * pScope = static_cast< AstInterface * >(
- idlc()->scopes()->top());
- AstOperation* pOp = nullptr;
-
- /*
- * Create a node representing an operation on an interface
- * and add it to its enclosing scope
- */
- if ( pScope && $1 )
- {
- AstType const *pType = static_cast<AstType const *>($1);
- if ( !pType || (pType->getNodeType() == NT_exception) )
- {
- // type ERROR
- } else
- {
- pOp = new AstOperation(pType, *$3, pScope);
-
- AstInterface::DoubleMemberDeclarations doubleMembers(
- pScope->checkMemberClashes(pOp));
- if (doubleMembers.empty()) {
- pScope->addMember(pOp);
- } else {
- reportDoubleMemberDeclarations(doubleMembers);
- }
- }
- }
- delete $3;
- /*
- * Push the operation scope onto the scopes stack
- */
- idlc()->scopes()->push(pOp);
- }
- '('
- {
- idlc()->setParseState(PS_OpSqSeen);
- }
- parameters
- {
- idlc()->setParseState(PS_OpParsCompleted);
- }
- ')'
- {
- idlc()->setParseState(PS_OpQsSeen);
- }
- opt_raises
- {
- AstScope* pScope = idlc()->scopes()->topNonNull();
- AstOperation* pOp = nullptr;
- /*
- * Add exceptions and context to the operation
- */
- if ( pScope && pScope->getScopeNodeType() == NT_operation)
- {
- pOp = static_cast<AstOperation*>(pScope);
-
- if ( pOp )
- pOp->setExceptions($11);
- }
- delete $11;
- /*
- * Done with this operation. Pop its scope from the scopes stack
- */
- idlc()->scopes()->pop();
- }
- ;
-
-op_type_spec :
- simple_type_spec
- | IDL_VOID
- {
- $$ = idlc()->scopes()->bottom()->lookupPrimitiveType(ET_void);
- }
- ;
-
-parameters :
- parameter
- | parameters
- ','
- {
- idlc()->setParseState(PS_OpParCommaSeen);
- }
- parameter
- | /* EMPTY */
- | error ','
- {
- yyerror("parameter definition");
- yyerrok;
- }
- ;
-
-parameter :
- '['
- direction
- ']'
- {
- idlc()->setParseState(PS_OpParDirSeen);
- }
- simple_type_spec
- {
- idlc()->setParseState(PS_OpParTypeSeen);
- }
- opt_rest
- declarator
- {
- idlc()->setParseState(PS_OpParDeclSeen);
-
- AstOperation * pScope = static_cast< AstOperation * >(
- idlc()->scopes()->top());
- AstParameter* pParam = nullptr;
-
- /*
- * Create a node representing an argument to an operation
- * Add it to the enclosing scope (the operation scope)
- */
- if ( pScope && $5 && $8 )
- {
- AstType const * pType = FeDeclarator::compose($5);
- if ( pType )
- {
- if (pScope->isConstructor() && $2 != DIR_IN) {
- ErrorHandler::error0(ErrorCode::ConstructorParameterNotIn);
- }
- if (pScope->isVariadic()) {
- ErrorHandler::error0(ErrorCode::RestParameterNotLast);
- }
- if ($7) {
- AstDeclaration const * type = resolveTypedefs(pType);
- if (type->getNodeType() != NT_predefined
- || (static_cast< AstBaseType const * >(type)->
- getExprType() != ET_any))
- {
- ErrorHandler::error0(ErrorCode::RestParameterNotAny);
- }
- if (pScope->isConstructor()) {
- if (pScope->getIteratorBegin()
- != pScope->getIteratorEnd())
- {
- ErrorHandler::error0(
- ErrorCode::ConstructorRestParameterNotFirst);
- }
- } else {
- ErrorHandler::error0(ErrorCode::MethodHasRestParameter);
- }
- }
-
- pParam = new AstParameter(
- static_cast< Direction >($2), $7, pType, $8->getName(),
- pScope);
-
- if ( !$8->checkType($5) )
- {
- // WARNING
- }
-
- pScope->addDeclaration(pParam);
- }
- }
- }
- | error
- simple_type_spec
- {
- idlc()->setParseState(PS_NoState);
- yyerrok;
- }
- ;
-
-direction :
- IDL_IN
- {
- $$ = DIR_IN;
- }
- | IDL_OUT
- {
- $$ = DIR_OUT;
- }
- | IDL_INOUT
- {
- $$ = DIR_INOUT;
- }
- ;
-
-opt_rest:
- IDL_ELLIPSIS
- {
- $$ = true;
- }
- | /* empty */
- {
- $$ = false;
- }
- ;
-
-opt_raises:
- raises
- | /* empty */
- {
- $$ = nullptr;
- }
- ;
-
-raises:
- IDL_RAISES
- {
- idlc()->setParseState(PS_RaiseSeen);
- }
- '('
- {
- idlc()->setParseState(PS_RaiseSqSeen);
- }
- exception_list
- ')'
- {
- idlc()->setParseState(PS_RaiseQsSeen);
- $$ = $5;
- }
- ;
-
-exception_list:
- exception_name
- {
- $$ = new DeclList;
- $$->push_back($1);
- }
- | exception_list ',' exception_name
- {
- $1->push_back($3);
- $$ = $1;
- }
- ;
-
-exception_name:
- scoped_name
- {
- // The topmost scope is either an AstOperation (for interface methods
- // and service constructors) or an AstAttribute (for interface
- // attributes), so look up exception names in the next-to-topmost scope:
- AstDeclaration * decl = idlc()->scopes()->nextToTop()->lookupByName(
- *$1);
- if (decl == nullptr) {
- ErrorHandler::lookupError(*$1);
- } else if (!ErrorHandler::checkPublished(decl)) {
- decl = nullptr;
- } else if (decl->getNodeType() != NT_exception) {
- ErrorHandler::error1(ErrorCode::IllegalRaises, decl);
- decl = nullptr;
- }
- delete $1;
- $$ = decl;
- }
- ;
-
-interface_inheritance_decl:
- optional_inherited_interface
- IDL_INTERFACE
- {
- idlc()->setParseState(PS_ServiceIFHeadSeen);
- }
- scoped_name
- {
- AstInterface * ifc = static_cast< AstInterface * >(
- idlc()->scopes()->top());
- if (ifc->usesSingleInheritance()) {
- ErrorHandler::error0(ErrorCode::MixedInheritance);
- } else {
- addInheritedInterface(
- ifc, *$4, $1,
- OStringToOUString(
- idlc()->getDocumentation(), RTL_TEXTENCODING_UTF8));
- }
- delete $4;
- }
- ;
-
-optional_inherited_interface:
- '[' IDL_OPTIONAL ']' { $$ = true; }
- | /* EMPTY */ { $$ = false; }
- ;
-
-constants_exports :
- constants_export constants_exports
- | /* EMPTY */
- ;
-
-constants_export :
- IDL_CONST
- {
- idlc()->setParseState(PS_ConstSeen);
- }
- const_type
- {
- idlc()->setParseState(PS_ConstTypeSeen);
- }
- identifier
- {
- idlc()->setParseState(PS_ConstIDSeen);
- checkIdentifier($5);
- }
- '='
- {
- idlc()->setParseState(PS_ConstAssignSeen);
- }
- expression
- {
- idlc()->setParseState(PS_ConstExprSeen);
-
- AstScope* pScope = idlc()->scopes()->topNonNull();
- AstConstant* pConstant = nullptr;
-
- if ( $9 && pScope )
- {
- if ( !$9->coerce($3) )
- {
- ErrorHandler::coercionError($9, $3);
- } else
- {
- pConstant = new AstConstant($3, $9, *$5, pScope);
- pScope->addDeclaration(pConstant);
- }
- }
- delete $5;
-
- idlc()->setParseState(PS_ConstantDeclSeen);
- }
- ';' {};
- ;
-
-constants_dcl :
- IDL_CONSTANTS
- {
- idlc()->setParseState(PS_ConstantsSeen);
- }
- identifier
- {
- idlc()->setParseState(PS_ConstantsIDSeen);
- checkIdentifier($3);
- }
- '{'
- {
- idlc()->setParseState(PS_ConstantsSqSeen);
-
- AstScope* pScope = idlc()->scopes()->topNonNull();
- AstConstants* pConstants = nullptr;
-
- if ( pScope )
- {
- pConstants = new AstConstants(*$3, pScope);
- if( AstDeclaration* pExists = pScope->lookupForAdd(pConstants) )
- {
- pExists->setInMainfile(idlc()->isInMainFile());
- delete(pConstants);
- pConstants = static_cast<AstConstants*>(pExists);
- } else
- {
- pScope->addDeclaration(pConstants);
- }
- idlc()->scopes()->push(pConstants);
- }
- delete $3;
- }
- constants_exports
- {
- idlc()->setParseState(PS_ConstantsBodySeen);
- }
- '}'
- {
- idlc()->setParseState(PS_ConstantsQsSeen);
- /*
- * Finished with this constants - pop it from the scope stack
- */
- idlc()->scopes()->pop();
- }
- ;
-
-expression : const_expr ;
-
-const_expr : or_expr ;
-
-or_expr :
- xor_expr
- | or_expr '|' xor_expr
- {
- $$ = new AstExpression(ExprComb::Or, $1, $3);
- }
- ;
-
-xor_expr :
- and_expr
- | xor_expr '^' and_expr
- {
- $$ = new AstExpression(ExprComb::Xor, $1, $3);
- }
- ;
-
-and_expr :
- shift_expr
- | and_expr '&' shift_expr
- {
- $$ = new AstExpression(ExprComb::And, $1, $3);
- }
- ;
-
-shift_expr :
- add_expr
- | shift_expr IDL_LEFTSHIFT add_expr
- {
- $$ = new AstExpression(ExprComb::Left, $1, $3);
- }
- | shift_expr IDL_RIGHTSHIFT add_expr
- {
- $$ = new AstExpression(ExprComb::Right, $1, $3);
- }
- ;
-
-add_expr :
- mult_expr
- | add_expr '+' mult_expr
- {
- $$ = new AstExpression(ExprComb::Add, $1, $3);
- }
- | add_expr '-' mult_expr
- {
- $$ = new AstExpression(ExprComb::Minus, $1, $3);
- }
- ;
-
-mult_expr :
- unary_expr
- | mult_expr '*' unary_expr
- {
- $$ = new AstExpression(ExprComb::Mul, $1, $3);
- }
- | mult_expr '/' unary_expr
- {
- $$ = new AstExpression(ExprComb::Div, $1, $3);
- }
- | mult_expr '%' unary_expr
- {
- $$ = new AstExpression(ExprComb::Mod, $1, $3);
- }
- ;
-
-unary_expr :
- primary_expr
- | '+' primary_expr
- {
- $$ = new AstExpression(ExprComb::UPlus, $2, nullptr);
- }
- | '-' primary_expr
- {
- $$ = new AstExpression(ExprComb::UMinus, $2, nullptr);
- }
- | '~' primary_expr
- {
- }
- ;
-
-primary_expr :
- scoped_name
- {
- /*
- * An expression which is a scoped name is not resolved now,
- * but only when it is evaluated (such as when it is assigned
- * as a constant value)
- */
- $$ = new AstExpression($1);
- }
- | literal
- | '(' const_expr ')'
- {
- $$ = $2;
- }
- ;
-
-literal :
- IDL_INTEGER_LITERAL
- {
- $$ = new AstExpression($1);
- }
- | IDL_INTEGER_ULITERAL
- {
- $$ = new AstExpression($1);
- }
- | IDL_FLOATING_PT_LITERAL
- {
- $$ = new AstExpression($1);
- }
- | IDL_TRUE
- {
- $$ = new AstExpression(sal_Int32(1), ET_boolean);
- }
- | IDL_FALSE
- {
- $$ = new AstExpression(sal_Int32(0), ET_boolean);
- }
- ;
-
-const_type :
- integer_type
- | byte_type
- | boolean_type
- | floating_pt_type
- | scoped_name
- {
- AstScope* pScope = idlc()->scopes()->topNonNull();
- AstDeclaration const * type = nullptr;
-
- /*
- * If the constant's type is a scoped name, it must resolve
- * to a scalar constant type
- */
- if ( pScope ) {
- type = pScope->lookupByName(*$1);
- if (type) {
- if (!ErrorHandler::checkPublished(type))
- {
- type = nullptr;
- $$ = ET_none;
- }
- else
- {
- type = resolveTypedefs(type);
- if (type->getNodeType() == NT_predefined)
- {
- $$ = static_cast< AstBaseType const * >(type)->
- getExprType();
- } else
- $$ = ET_any;
- }
- } else
- $$ = ET_any;
- } else
- $$ = ET_any;
- }
- ;
-
-exception_header :
- IDL_EXCEPTION
- {
- idlc()->setParseState(PS_ExceptSeen);
- }
- identifier
- {
- idlc()->setParseState(PS_ExceptIDSeen);
- checkIdentifier($3);
- }
- inheritance_spec
- {
- idlc()->setParseState(PS_InheritSpecSeen);
-
- $$ = new FeInheritanceHeader(NT_exception, $3, $5, nullptr);
- delete $5;
- }
- ;
-
-exception_dcl :
- exception_header
- {
- idlc()->setParseState(PS_ExceptHeaderSeen);
-
- AstScope* pScope = idlc()->scopes()->topNonNull();
- AstException* pExcept = nullptr;
-
- if ( pScope )
- {
- AstException* pBase = static_cast< AstException* >(
- $1->getInherits());
- pExcept = new AstException(*$1->getName(), pBase, pScope);
- pScope->addDeclaration(pExcept);
- }
- /*
- * Push the scope of the exception on the scopes stack
- */
- idlc()->scopes()->push(pExcept);
- delete $1;
- }
- '{'
- {
- idlc()->setParseState(PS_ExceptSqSeen);
- }
- members
- {
- idlc()->setParseState(PS_ExceptBodySeen);
- }
- '}'
- {
- idlc()->setParseState(PS_ExceptQsSeen);
- /* this exception is finished, pop its scope from the stack */
- idlc()->scopes()->pop();
- }
- ;
-
-property :
- flag_header
- simple_type_spec
- {
- idlc()->setParseState(PS_PropertyTypeSeen);
- }
- at_least_one_declarator
- {
- idlc()->setParseState(PS_PropertyCompleted);
-
- AstScope* pScope = idlc()->scopes()->topNonNull();
- AstAttribute* pAttr = nullptr;
- FeDeclList* pList = $4;
- FeDeclarator* pDecl = nullptr;
- AstType const * pType = nullptr;
-
- if ( pScope->getScopeNodeType() == NT_singleton )
- {
- ErrorHandler::error0(ErrorCode::IllegalAdd);
- } else
- {
- if ( ($1 & AF_ATTRIBUTE) == AF_ATTRIBUTE )
- ErrorHandler::flagError(ErrorCode::WrongAttributeKeyword, AF_ATTRIBUTE);
-
- if ( ($1 & AF_PROPERTY) != AF_PROPERTY )
- ErrorHandler::flagError(ErrorCode::MissingAttributeKeyword, AF_PROPERTY);
-
- /*
- * Create nodes representing attributes and add them to the
- * enclosing scope
- */
- if ( pScope && $2 && pList )
- {
- FeDeclList::iterator iter = pList->begin();
- FeDeclList::iterator end = pList->end();
-
- while (iter != end)
- {
- pDecl = (*iter);
- if ( !pDecl )
- {
- ++iter;
- continue;
- }
-
- pType = FeDeclarator::compose($2);
-
- if ( !pType )
- {
- ++iter;
- continue;
- }
-
- pAttr = new AstAttribute(NT_property, $1, pType, pDecl->getName(), pScope);
-
- pScope->addDeclaration(pAttr);
- ++iter;
- delete pDecl;
- }
- }
- }
-
- if ( pList )
- delete pList;
- }
- | error ';'
- {
- yyerror("property");
- yyerrok;
- }
- ;
-
-service_exports :
- service_exports service_export
- | /* EMPTY */
- ;
-
-service_export :
- service_interface_header
- at_least_one_scoped_name
- ';'
- {
- idlc()->setParseState(PS_ServiceMemberSeen);
-
- AstScope* pScope = idlc()->scopes()->topNonNull();
- AstDeclaration* pDecl = nullptr;
- AstInterfaceMember* pIMember = nullptr;
-
- if ( pScope->getScopeNodeType() == NT_singleton )
- {
- ErrorHandler::error0(ErrorCode::IllegalAdd);
- } else
- {
- /*
- * Create a node representing a class member.
- * Store it in the enclosing scope
- */
- if ( pScope && $2 )
- {
- for (auto const& elem : *($2))
- {
- pDecl = pScope->lookupByName(elem);
- if ( pDecl && (pDecl->getNodeType() == NT_interface) )
- {
- /* we relax the strict published check and allow to add new
- * interfaces if they are optional
- */
- bool bOptional = (($1 & AF_OPTIONAL) == AF_OPTIONAL);
- if ( ErrorHandler::checkPublished(pDecl, bOptional) )
- {
- pIMember = new AstInterfaceMember(
- $1, static_cast<AstInterface*>(pDecl), elem, pScope);
- pScope->addDeclaration(pIMember);
- }
- } else
- {
- ErrorHandler::lookupError(ErrorCode::InterfaceMemberLookup, elem, scopeAsDecl(pScope));
- }
- }
- }
- }
- delete $2;
- }
- | service_service_header
- at_least_one_scoped_name
- ';'
- {
- idlc()->setParseState(PS_ServiceMemberSeen);
-
- AstScope* pScope = idlc()->scopes()->topNonNull();
- AstDeclaration* pDecl = nullptr;
- AstServiceMember* pSMember = nullptr;
-
- /*
- * Create a node representing a class member.
- * Store it in the enclosing scope
- */
- if ( pScope && $2 )
- {
- for (auto const& elem : *($2))
- {
- pDecl = pScope->lookupByName(elem);
- if ( pDecl && (pDecl->getNodeType() == NT_service) )
- {
- if ( static_cast< AstService * >(pDecl)->isSingleInterfaceBasedService() || (pScope->getScopeNodeType() == NT_singleton && pScope->nMembers() > 0) )
- ErrorHandler::error0(ErrorCode::IllegalAdd);
- else if ( ErrorHandler::checkPublished(pDecl) )
- {
- pSMember = new AstServiceMember(
- $1, static_cast<AstService*>(pDecl), elem, pScope);
- pScope->addDeclaration(pSMember);
- }
- } else
- {
- ErrorHandler::lookupError(ErrorCode::ServiceMemberLookup, elem, scopeAsDecl(pScope));
- }
- }
- }
- delete $2;
- }
- | IDL_OBSERVES
- at_least_one_scoped_name
- ';'
- {
- idlc()->setParseState(PS_ServiceMemberSeen);
-
- AstScope* pScope = idlc()->scopes()->topNonNull();
- AstDeclaration* pDecl = nullptr;
- AstObserves* pObserves = nullptr;
-
- if ( pScope->getScopeNodeType() == NT_singleton )
- {
- ErrorHandler::error0(ErrorCode::IllegalAdd);
- } else
- {
- /*
- * Create a node representing a class member.
- * Store it in the enclosing scope
- */
- if ( pScope && $2 )
- {
- for (auto const& elem : *($2))
- {
- pDecl = pScope->lookupByName(elem);
- if ( pDecl && (pDecl->getNodeType() == NT_interface) )
- {
- pObserves = new AstObserves(static_cast<AstInterface*>(pDecl), elem, pScope);
- pScope->addDeclaration(pObserves);
- } else
- {
- ErrorHandler::lookupError(ErrorCode::InterfaceMemberLookup, elem, scopeAsDecl(pScope));
- }
- }
- }
- }
- delete $2;
- }
- | IDL_NEEDS
- at_least_one_scoped_name
- ';'
- {
- idlc()->setParseState(PS_ServiceMemberSeen);
-
- AstScope* pScope = idlc()->scopes()->topNonNull();
- AstDeclaration* pDecl = nullptr;
- AstNeeds* pNeeds = nullptr;
-
- if ( pScope->getScopeNodeType() == NT_singleton )
- {
- ErrorHandler::error0(ErrorCode::IllegalAdd);
- } else
- {
- /*
- * Create a node representing a class member.
- * Store it in the enclosing scope
- */
- if ( pScope && $2 )
- {
- for (auto const& elem : *($2))
- {
- pDecl = pScope->lookupByName(elem);
- if ( pDecl && (pDecl->getNodeType() == NT_service) )
- {
- pNeeds = new AstNeeds(static_cast<AstService*>(pDecl), elem, pScope);
- pScope->addDeclaration(pNeeds);
- } else
- {
- ErrorHandler::lookupError(ErrorCode::ServiceMemberLookup, elem, scopeAsDecl(pScope));
- }
- }
- }
- }
- delete $2;
- }
- | property
- ';'
- {
- idlc()->setParseState(PS_PropertyDeclSeen);
- }
- ;
-
-service_interface_header :
- IDL_INTERFACE
- {
- idlc()->setParseState(PS_ServiceIFHeadSeen);
- $$ = AF_INVALID;
- }
- | flag_header
- IDL_INTERFACE
- {
- idlc()->setParseState(PS_ServiceIFHeadSeen);
- if ( (AF_OPTIONAL != $1) && ( AF_INVALID != $1) )
- ErrorHandler::flagError(ErrorCode::ExpectedOptional, $1);
- $$ = $1;
- }
- ;
-
-service_service_header :
- IDL_SERVICE
- {
- idlc()->setParseState(PS_ServiceSHeadSeen);
- $$ = AF_INVALID;
- }
- | flag_header
- IDL_SERVICE
- {
- idlc()->setParseState(PS_ServiceSHeadSeen);
- if ( (AF_OPTIONAL != $1) && ( AF_INVALID != $1) )
- ErrorHandler::flagError(ErrorCode::ExpectedOptional, $1);
- $$ = $1;
- }
- ;
-
-service_dcl :
- IDL_SERVICE
- {
- idlc()->setParseState(PS_ServiceSeen);
- }
- identifier
- {
- idlc()->setParseState(PS_ServiceIDSeen);
- checkIdentifier($3);
-
- AstScope* pScope = idlc()->scopes()->topNonNull();
- AstService* pService = nullptr;
-
- /*
- * Make a new service and add it to the enclosing scope
- */
- if (pScope != nullptr)
- {
- pService = new AstService(*$3, pScope);
- pScope->addDeclaration(pService);
- }
- delete $3;
- /*
- * Push it on the stack
- */
- idlc()->scopes()->push(pService);
- }
- service_dfn
- {
- /* this service is finished, pop its scope from the stack */
- idlc()->scopes()->pop();
- }
- ;
-
-service_dfn:
- service_interface_dfn
- | service_obsolete_dfn
- ;
-
-service_interface_dfn:
- ':' scoped_name
- {
- AstScope * scope = idlc()->scopes()->nextToTop();
- // skip the scope pushed by service_dcl
- AstDeclaration * decl = scope->lookupByName(*$2);
- if (decl != nullptr
- && resolveTypedefs(decl)->getNodeType() == NT_interface)
- {
- if (ErrorHandler::checkPublished(decl)) {
- idlc()->scopes()->top()->addDeclaration(decl);
- }
- } else {
- ErrorHandler::lookupError(
- ErrorCode::InterfaceMemberLookup, *$2, scopeAsDecl(scope));
- }
- delete $2;
- }
- opt_service_body
- {
- AstService * s = static_cast< AstService * >(idlc()->scopes()->top());
- if (s != nullptr) {
- s->setSingleInterfaceBasedService();
- s->setDefaultConstructor(!$4);
- }
- }
- ;
-
-opt_service_body:
- service_body { $$ = true; }
- | /* empty */ { $$ = false; }
- ;
-
-service_body:
- '{'
- constructors
- '}'
- ;
-
-constructors:
- constructors constructor
- | /* empty */
- ;
-
-constructor:
- identifier
- {
- checkIdentifier($1);
- AstScope * scope = idlc()->scopes()->top();
- AstOperation * ctor = new AstOperation(nullptr, *$1, scope);
- delete $1;
- scope->addDeclaration(ctor);
- idlc()->scopes()->push(ctor);
- }
- '('
- parameters
- ')'
- opt_raises
- {
- static_cast< AstOperation * >(idlc()->scopes()->top())->setExceptions(
- $6);
- delete $6;
- idlc()->scopes()->pop();
- if (static_cast< AstService * >(idlc()->scopes()->top())->
- checkLastConstructor())
- {
- ErrorHandler::error0(ErrorCode::SimilarConstructors);
- }
- }
- ';'
- ;
-
-singleton_dcl :
- IDL_SINGLETON
- {
- idlc()->setParseState(PS_SingletonSeen);
- }
- identifier
- {
- idlc()->setParseState(PS_SingletonIDSeen);
- checkIdentifier($3);
-
- AstScope* pScope = idlc()->scopes()->topNonNull();
- AstService* pService = nullptr;
-
- /*
- * Make a new service and add it to the enclosing scope
- */
- if (pScope != nullptr)
- {
- pService = new AstService(NT_singleton, *$3, pScope);
- pScope->addDeclaration(pService);
- }
- delete $3;
- /*
- * Push it on the stack
- */
- idlc()->scopes()->push(pService);
- }
- singleton_dfn
- {
- /* this singleton is finished, pop its scope from the stack */
- idlc()->scopes()->pop();
- }
- ;
-
-singleton_dfn:
- singleton_interface_dfn
- | service_obsolete_dfn
- ;
-
-singleton_interface_dfn:
- ':' scoped_name
- {
- AstScope * scope = idlc()->scopes()->nextToTop();
- // skip the scope (needlessly) pushed by singleton_dcl
- AstDeclaration * decl = scope->lookupByName(*$2);
- if (decl != nullptr
- && resolveTypedefs(decl)->getNodeType() == NT_interface)
- {
- if (ErrorHandler::checkPublished(decl)) {
- idlc()->scopes()->top()->addDeclaration(decl);
- }
- } else {
- ErrorHandler::lookupError(
- ErrorCode::InterfaceMemberLookup, *$2, scopeAsDecl(scope));
- }
- delete $2;
- }
- ;
-
-service_obsolete_dfn:
- '{'
- {
- idlc()->setParseState(
- idlc()->scopes()->top()->getScopeNodeType() == NT_service
- ? PS_ServiceSqSeen : PS_SingletonSqSeen);
- }
- service_exports
- {
- idlc()->setParseState(
- idlc()->scopes()->top()->getScopeNodeType() == NT_service
- ? PS_ServiceBodySeen : PS_SingletonBodySeen);
- }
- '}'
- {
- idlc()->setParseState(
- idlc()->scopes()->top()->getScopeNodeType() == NT_service
- ? PS_ServiceQsSeen : PS_SingletonQsSeen);
- }
- ;
-
-type_dcl :
- IDL_TYPEDEF
- {
- idlc()->setParseState(PS_TypedefSeen);
- }
- type_declarator {}
- | struct_type {}
- | enum_type {}
- ;
-
-type_declarator :
- type_spec
- {
- idlc()->setParseState(PS_TypeSpecSeen);
- if ($1 != nullptr && $1->getNodeType() == NT_instantiated_struct) {
- ErrorHandler::error0(ErrorCode::InstantiatedStructTypeTypedef);
- }
- }
- at_least_one_declarator
- {
- idlc()->setParseState(PS_DeclaratorsSeen);
-
- AstScope* pScope = idlc()->scopes()->topNonNull();
- AstTypeDef* pTypeDef = nullptr;
- FeDeclList* pList = $3;
- FeDeclarator* pDecl = nullptr;
- AstType const * pType = nullptr;
-
- /*
- * Create nodes representing typedefs and add them to the
- * enclosing scope
- */
- if ( pScope && $1 && pList )
- {
- FeDeclList::iterator iter = pList->begin();
- FeDeclList::iterator end = pList->end();
-
- while (iter != end)
- {
- pDecl = (*iter);
- if ( !pDecl )
- {
- ++iter;
- continue;
- }
-
- pType = FeDeclarator::compose($1);
-
- if ( !pType )
- {
- ++iter;
- continue;
- }
-
- pTypeDef = new AstTypeDef(pType, pDecl->getName(), pScope);
-
- pScope->addDeclaration(pTypeDef);
- ++iter;
- delete pDecl;
- }
- delete pList;
- }
- }
- ;
-
-at_least_one_declarator :
- declarator declarators
- {
- if ( $2 )
- {
- $2->push_back($1);
- $$ = $2;
- } else
- {
- FeDeclList* pList = new FeDeclList;
- pList->push_back($1);
- $$ = pList;
- }
- }
- ;
-
-declarators :
- declarators
- ','
- {
- idlc()->setParseState(PS_DeclsCommaSeen);
- }
- declarator
- {
- idlc()->setParseState(PS_DeclsDeclSeen);
- if ( $1 )
- {
- $1->push_back($4);
- $$ = $1;
- } else
- {
- FeDeclList* pList = new FeDeclList;
- pList->push_back($4);
- $$ = pList;
- }
- }
- | /* EMPTY */
- {
- $$ = nullptr;
- }
- ;
-
-declarator :
- identifier
- {
- // For historic reasons, the struct com.sun.star.uno.Uik contains
- // members with illegal names (of the form "m_DataN"); avoid useless
- // warnings about them:
- AstScope * scope = idlc()->scopes()->top();
- if (scope == nullptr || scope->getScopeNodeType() != NT_struct
- || (scopeAsDecl(scope)->getScopedName()
- != "com::sun::star::uno::Uik"))
- {
- checkIdentifier($1);
- }
-
- $$ = new FeDeclarator(*$1);
- delete $1;
- }
- ;
-
-at_least_one_scoped_name :
- scoped_name scoped_names
- {
- if ($2)
- {
- $2->push_front(*$1);
- $$ = $2;
- } else
- {
- std::list< OString >* pScopedNames = new std::list< OString >;
- // coverity[copy_paste_error : FALSE] - this is not a cut and paste
- pScopedNames->push_back(*$1);
- $$ = pScopedNames;
- }
- delete $1;
- }
- ;
-
-scoped_names :
- scoped_names
- ','
- {
- idlc()->setParseState(PS_SNListCommaSeen);
- }
- scoped_name
- {
- idlc()->setParseState(PS_ScopedNameSeen);
- if ($1)
- {
- $1->push_back(*$4);
- $$ = $1;
- } else
- {
- std::list< OString >* pNames = new std::list< OString >;
- pNames->push_back(*$4);
- $$ = pNames;
- }
- delete $4;
- }
- | /* EMPTY */
- {
- $$ = nullptr;
- }
- ;
-
-scoped_name :
- identifier
- {
- idlc()->setParseState(PS_SN_IDSeen);
- checkIdentifier($1);
- $$ = $1;
- }
- | IDL_SCOPESEPARATOR
- {
- idlc()->setParseState(PS_ScopeDelimSeen);
- }
- identifier
- {
- checkIdentifier($3);
- OString* pName = new OString("::");
- *pName += *$3;
- delete $3;
- $$ = pName;
- }
- | scoped_name
- IDL_SCOPESEPARATOR
- {
- }
- identifier
- {
- checkIdentifier($4);
- *$1 += "::";
- *$1 += *$4;
- delete $4;
- $$ = $1;
- }
- ;
-
-type_spec :
- simple_type_spec
- | constructed_type_spec
- ;
-
-simple_type_spec :
- fundamental_type
- | scoped_name opt_type_args
- {
- $$ = createNamedType($1, $2);
- }
- ;
-
-fundamental_type:
- base_type_spec
- {
- $$ = idlc()->scopes()->bottom()->lookupPrimitiveType($1);
- }
- | sequence_type_spec
- ;
-
-opt_type_args:
- '<' type_args '>' { $$ = $2; }
- | /* empty */ { $$ = nullptr; }
- ;
-
-type_args:
- type_arg
- {
- $$ = new DeclList;
- $$->push_back(const_cast< AstDeclaration * >($1)); //TODO: const_cast
- }
- | type_args ',' type_arg
- {
- $1->push_back(const_cast< AstDeclaration * >($3)); //TODO: const_cast
- $$ = $1;
- }
- ;
-
-type_arg:
- simple_type_spec
- {
- if ($1 != nullptr && static_cast< AstType const * >($1)->isUnsigned()) {
- ErrorHandler::error0(ErrorCode::UnsignedTypeArgument);
- }
- $$ = $1;
- }
- ;
-
-base_type_spec :
- integer_type
- | floating_pt_type
- | char_type
- | boolean_type
- | byte_type
- | any_type
- | type_type
- | string_type
- ;
-
-integer_type :
- signed_int
- | unsigned_int
- ;
-
-signed_int :
- IDL_LONG
- {
- $$ = ET_long;
- }
- | IDL_HYPER
- {
- $$ = ET_hyper;
- }
- | IDL_SHORT
- {
- $$ = ET_short;
- }
- ;
-
-unsigned_int :
- IDL_UNSIGNED IDL_LONG
- {
- $$ = ET_ulong;
- }
- | IDL_UNSIGNED IDL_HYPER
- {
- $$ = ET_uhyper;
- }
- | IDL_UNSIGNED IDL_SHORT
- {
- $$ = ET_ushort;
- }
- ;
-
-floating_pt_type :
- IDL_DOUBLE
- {
- $$ = ET_double;
- }
- | IDL_FLOAT
- {
- $$ = ET_float;
- }
- ;
-
-char_type :
- IDL_CHAR
- {
- $$ = ET_char;
- }
- ;
-
-byte_type :
- IDL_BYTE
- {
- $$ = ET_byte;
- }
- ;
-
-boolean_type :
- IDL_BOOLEAN
- {
- $$ = ET_boolean;
- }
- ;
-
-any_type :
- IDL_ANY
- {
- $$ = ET_any;
- }
- ;
-
-type_type :
- IDL_TYPE
- {
- $$ = ET_type;
- }
- ;
-
-string_type :
- IDL_STRING
- {
- $$ = ET_string;
- }
- ;
-
-constructed_type_spec :
- struct_type
- | enum_type
- ;
-
-sequence_type_spec :
- IDL_SEQUENCE
- {
- idlc()->setParseState(PS_SequenceSeen);
- /*
- * Push a sequence marker on scopes stack
- */
- idlc()->scopes()->push(nullptr);
- }
- '<'
- {
- idlc()->setParseState(PS_SequenceSqSeen);
- }
- simple_type_spec
- {
- idlc()->setParseState(PS_SequenceTypeSeen);
- }
- '>'
- {
- idlc()->setParseState(PS_SequenceQsSeen);
- /*
- * Remove sequence marker from scopes stack
- */
- if (idlc()->scopes()->top() == nullptr)
- idlc()->scopes()->pop();
- /*
- * Create a node representing a sequence
- */
- AstScope* pScope = idlc()->scopes()->bottom();
- AstDeclaration* pDecl = nullptr;
- AstDeclaration* pSeq = nullptr;
-
- if ( $5 )
- {
- AstType const *pType = static_cast<AstType const *>($5);
- if ( pType )
- {
- pSeq = new AstSequence(pType, pScope);
- /*
- * Add this AstSequence to the types defined in the global scope
- */
- pDecl = pScope->addDeclaration(pSeq);
- if ( pSeq != pDecl )
- {
- // if sequence type already defined then use it
- delete pSeq;
- pSeq = pDecl;
- }
- }
- }
- $$ = pSeq;
- }
- | error '>'
- {
- yyerror("sequence declaration");
- yyerrok;
- $$ = nullptr;
- }
- ;
-
-struct_type :
- structure_header
- {
- idlc()->setParseState(PS_StructHeaderSeen);
-
- AstScope* pScope = idlc()->scopes()->topNonNull();
- AstStruct* pStruct = nullptr;
-
- if ( pScope )
- {
- AstStruct const* pBase= static_cast< AstStruct const* >(resolveTypedefs($1->getInherits()));
- pStruct = new AstStruct(
- *$1->getName(), $1->getTypeParameters(), pBase, pScope);
- pScope->addDeclaration(pStruct);
- }
- /*
- * Push the scope of the struct on the scopes stack
- */
- idlc()->scopes()->push(pStruct);
- delete $1;
- }
- '{'
- {
- idlc()->setParseState(PS_StructSqSeen);
- }
- at_least_one_member
- {
- idlc()->setParseState(PS_StructBodySeen);
- }
- '}'
- {
- idlc()->setParseState(PS_StructQsSeen);
- /* this exception is finished, pop its scope from the stack */
- idlc()->scopes()->pop();
- }
- ;
-
-structure_header :
- IDL_STRUCT
- {
- idlc()->setParseState(PS_StructSeen);
- }
- identifier
- {
- idlc()->setParseState(PS_StructIDSeen);
- checkIdentifier($3);
- }
- opt_type_params
- inheritance_spec
- {
- idlc()->setParseState(PS_InheritSpecSeen);
-
- // Polymorphic struct type templates with base types would cause various
- // problems in language bindings, so forbid them here. For example,
- // GCC prior to version 3.4 fails with code like
- //
- // struct Base { ... };
- // template< typename typeparam_T > struct Derived: public Base {
- // int member1 CPPU_GCC3_ALIGN(Base);
- // ... };
- //
- // (Note that plain struct types with instantiated polymorphic struct
- // type bases, which might also cause problems in language bindings, are
- // already rejected on a syntactic level.)
- if ($5 != nullptr && $6 != nullptr) {
- ErrorHandler::error0(ErrorCode::StructTypeTemplateWithBase);
- }
-
- $$ = new FeInheritanceHeader(NT_struct, $3, $6, $5);
- delete $5;
- delete $6;
- }
- ;
-
-opt_type_params:
- '<' type_params '>' { $$ = $2; }
- | /* empty */ { $$ = nullptr; }
- ;
-
-type_params:
- identifier
- {
- $$ = new std::vector< OString >;
- $$->push_back(*$1);
- delete $1;
- }
- | type_params ',' identifier
- {
- if (std::find($1->begin(), $1->end(), *$3) != $1->end()) {
- ErrorHandler::error0(ErrorCode::IdenticalTypeParameters);
- }
- $1->push_back(*$3);
- delete $3;
- $$ = $1;
- }
- ;
-
-at_least_one_member : member members ;
-
-members :
- members member
- | /* EMPTY */
- ;
-
-member :
- type_or_parameter
- {
- idlc()->setParseState(PS_MemberTypeSeen);
- }
- at_least_one_declarator
- {
- idlc()->setParseState(PS_MemberDeclsSeen);
- }
- ';'
- {
- idlc()->setParseState(PS_MemberDeclsCompleted);
-
- AstScope* pScope = idlc()->scopes()->topNonNull();
- AstMember* pMember = nullptr;
- FeDeclList* pList = $3;
- FeDeclarator* pDecl = nullptr;
- AstType const * pType = nullptr;
-
- // !!! check recursive type
-
- if ( pScope && pList && $1 )
- {
- FeDeclList::iterator iter = pList->begin();
- FeDeclList::iterator end = pList->end();
- while (iter != end)
- {
- pDecl = (*iter);
- if ( !pDecl )
- {
- ++iter;
- continue;
- }
-
- pType = FeDeclarator::compose($1);
-
- if ( !pType )
- {
- ++iter;
- continue;
- }
-
- pMember = new AstMember(pType, pDecl->getName(), pScope);
-
- if ( !pDecl->checkType($1) )
- {
- // WARNING
- }
-
- pScope->addDeclaration(pMember);
- ++iter;
- delete pDecl;
- }
- delete pList;
- }
- }
- | error ';'
- {
- yyerror("member definition");
- yyerrok;
- }
- ;
-
-type_or_parameter:
- fundamental_type
- | scoped_name opt_type_args
- {
- AstDeclaration const * decl = nullptr;
- AstStruct * scope = static_cast< AstStruct * >(idlc()->scopes()->top());
- if (scope != nullptr && $2 == nullptr) {
- decl = scope->findTypeParameter(*$1);
- }
- if (decl != nullptr) {
- delete $1;
- delete $2;
- } else {
- decl = createNamedType($1, $2);
- if (scope != nullptr && includes(decl, scopeAsDecl(scope))) {
- ErrorHandler::error1(
- ErrorCode::RecursiveType, scopeAsDecl(scope));
- decl = nullptr;
- }
- }
- $$ = decl;
- }
- ;
-
-enum_type :
- IDL_ENUM
- {
- idlc()->setParseState(PS_EnumSeen);
- }
- identifier
- {
- idlc()->setParseState(PS_EnumIDSeen);
- checkIdentifier($3);
-
- AstScope* pScope = idlc()->scopes()->topNonNull();
- AstEnum* pEnum = nullptr;
-
- /*
- * Create a node representing an enum and add it to its
- * enclosing scope
- */
- if (pScope != nullptr)
- {
- pEnum = new AstEnum(*$3, pScope);
- /*
- * Add it to its defining scope
- */
- pScope->addDeclaration(pEnum);
- }
- delete $3;
- /*
- * Push the enum scope on the scopes stack
- */
- idlc()->scopes()->push(pEnum);
-
- }
- '{'
- {
- idlc()->setParseState(PS_EnumSqSeen);
- }
- at_least_one_enumerator
- {
- idlc()->setParseState(PS_EnumBodySeen);
- }
- '}'
- {
- idlc()->setParseState(PS_EnumQsSeen);
- /*
- * Done with this enum. Pop its scope from the scopes stack
- */
- if (idlc()->scopes()->top() == nullptr)
- $$ = nullptr;
- else
- {
- $$ = static_cast<AstEnum*>(idlc()->scopes()->topNonNull());
- idlc()->scopes()->pop();
- }
- }
- ;
-
-at_least_one_enumerator : enumerator enumerators ;
-
-enumerators :
- enumerators
- ','
- {
- idlc()->setParseState(PS_EnumCommaSeen);
- }
- enumerator
- | /* EMPTY */
- | error ','
- {
- yyerror("enumerator definition");
- yyerrok;
- }
- ;
-
-enumerator :
- identifier
- {
- checkIdentifier($1);
-
- AstScope* pScope = idlc()->scopes()->topNonNull();
- AstEnum* pEnum = nullptr;
- AstConstant* pEnumVal = nullptr;
-
- if ( pScope && pScope->getScopeNodeType() == NT_enum)
- {
- pEnum = static_cast<AstEnum*>(pScope);
- if (pEnum && $1)
- {
- AstExpression* pExpr = new AstExpression(pEnum->getEnumValueCount());
- pEnumVal = new AstConstant(ET_long , NT_enum_val,
- pExpr, *$1, pScope);
- }
- if ( pEnum->checkValue(pEnumVal->getConstValue()) )
- ErrorHandler::error1(ErrorCode::Eval, pEnum);
-
- pScope->addDeclaration(pEnumVal);
- }
- delete $1;
- }
- | identifier
- '='
- const_expr
- {
- checkIdentifier($1);
-
- AstScope* pScope = idlc()->scopes()->topNonNull();
- AstEnum* pEnum = nullptr;
- AstConstant* pEnumVal = nullptr;
-
- if ( $3 && pScope && pScope->getScopeNodeType() == NT_enum)
- {
- $3->evaluate();
- if ( $3->coerce(ET_long) )
- {
- pEnum = static_cast<AstEnum*>(pScope);
- if (pEnum)
- {
- pEnumVal = new AstConstant(ET_long , NT_enum_val,
- $3, *$1, pScope);
- }
- if ( pEnum->checkValue(pEnumVal->getConstValue()) )
- ErrorHandler::error1(ErrorCode::Eval, pEnum);
-
- pScope->addDeclaration(pEnumVal);
- } else
- {
- ErrorHandler::coercionError($3, ET_long);
- delete $3;
- }
- }
- delete $1;
- }
- ;
-
-identifier:
- IDL_IDENTIFIER
- | IDL_GET { $$ = new OString("get"); }
- | IDL_SET { $$ = new OString("set"); }
- | IDL_PUBLISHED { $$ = new OString("published"); }
- ;
-
-%%
-
-/*
- * Report an error situation discovered in a production
- */
-void yyerror(char const *errmsg)
-{
- ErrorHandler::syntaxError(idlc()->getParseState(), idlc()->getLineNumber(), errmsg);
- idlc()->setParseState(PS_NoState);
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/source/scanner.l b/idlc/source/scanner.l
deleted file mode 100644
index aaf74a564677..000000000000
--- a/idlc/source/scanner.l
+++ /dev/null
@@ -1,526 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-%option yylineno
-
-%{
-/*
- * scanner.ll - Lexical scanner for IDLC 1.0
- */
-
-#include <sal/config.h>
-
-#include <stdlib.h>
-#include <string.h>
-
-#include <o3tl/safeint.hxx>
-#include <o3tl/string_view.hxx>
-#include <rtl/character.hxx>
-
-#if defined _MSC_VER
-#pragma warning ( push )
-// Silence warnings about redefinition of INT8_MIN etc in stdint.h
-// The flex-generated workdir/LexTarget/idlc/source/scanner.cxx defines them prior to these includes
-#pragma warning ( disable : 4005 )
-#endif
-#include <idlc.hxx>
-#if defined _MSC_VER
-#pragma warning ( pop )
-#endif
-#include <errorhandler.hxx>
-#include <fehelper.hxx>
-
-#include "attributeexceptions.hxx"
-
-
-class AstExpression;
-class AstMember;
-
-#include <parser.hxx>
-
-/* handle locations */
-static int yycolumn = 1;
-
-#define YY_USER_ACTION idlc()->setOffset(yycolumn, yycolumn+yyleng-1); \
- yycolumn += yyleng;
-
-static sal_Int32 beginLine = 0;
-static OString docu;
-
-static int asciiToInteger(char const * s, sal_Int64 * sval, sal_uInt64 * uval) {
- bool neg = false;
- if (*s == '-') {
- neg = true;
- ++s;
- }
- unsigned int base = 10;
- if (*s == '0') {
- base = 8;
- ++s;
- if (*s == 'X' || *s == 'x') {
- base = 16;
- ++s;
- }
- }
- sal_uInt64 val = 0;
- for (; *s != 0; ++s) {
- unsigned int n;
- if (*s >= '0' && *s <= '9') {
- n = *s - '0';
- } else {
- switch (*s) {
- case 'A':
- case 'a':
- n = 10;
- break;
- case 'B':
- case 'b':
- n = 11;
- break;
- case 'C':
- case 'c':
- n = 12;
- break;
- case 'D':
- case 'd':
- n = 13;
- break;
- case 'E':
- case 'e':
- n = 14;
- break;
- case 'F':
- case 'f':
- n = 15;
- break;
- default:
- goto done;
- }
- }
- // The following guarantees the invariant val <= SAL_MAX_UINT64 (because
- // base and n are sufficiently small), *if*
- // std::numeric_limits<sal_uInt64>::max() == SAL_MAX_UINT64:
- sal_uInt64 nval = val * base + n;
- if (nval < val) {
- ErrorHandler::syntaxError(
- PS_NoState, idlc()->getLineNumber(),
- "integral constant too large");
- val = 0;
- break;
- }
- val = nval;
- }
- done:
- if (neg) {
- if (val < SAL_CONST_UINT64(0x8000000000000000)) {
- *sval = -static_cast< sal_Int64 >(val);
- } else if (val == SAL_CONST_UINT64(0x8000000000000000)) {
- *sval = SAL_MIN_INT64;
- } else {
- ErrorHandler::syntaxError(
- PS_NoState, idlc()->getLineNumber(),
- "negative integral constant too large");
- *sval = 0;
- }
- return IDL_INTEGER_LITERAL;
- } else if (val <= o3tl::make_unsigned(SAL_MAX_INT64)) {
- *sval = static_cast< sal_Int64 >(val);
- return IDL_INTEGER_LITERAL;
- } else {
- *uval = val;
- return IDL_INTEGER_ULITERAL;
- }
-}
-
-static double asciiToFloat(const char *s)
-{
- double d = 0.0;
- double e, k;
- sal_Int32 neg = 0;
-
- if (*s == '-')
- {
- neg = 1;
- s++;
- }
- while (*s >= '0' && *s <= '9')
- {
- d = (d * 10) + *s - '0';
- s++;
- }
- if (*s == '.')
- {
- s++;
- e = 10;
- while (*s >= '0' && *s <= '9')
- {
- d += (*s - '0') / (e * 1.0);
- e *= 10;
- s++;
- }
- }
- if (*s == 'e' || *s == 'E')
- {
- s++;
- if (*s == '-')
- {
- s++;
- } else
- {
- if (*s == '+')
- s++;
- e = 0;
- while (*s >= '0' && *s <= '9')
- {
- e = (e * 10) + *s - '0';
- s++;
- }
- if (e > 0)
- {
- for (k = 1; e > 0; k *= 10, e--)
- ;
- d /= k;
- }
- }
- }
- if (neg) d *= -1.0;
- return d;
-}
-
-static void idlParsePragma(char* pPragma)
-{
- OString pragma(pPragma);
- sal_Int32 index = pragma.indexOf("include");
- char* begin = pPragma + index + 8;
- char* offset = begin;
- while (*offset != ',') offset++;
- //OString include = pragma.copy(index + 8, offset - begin);
- //unused// idlc()->insertInclude(pragma.copy(index + 8, (sal_Int32)(offset - begin)));
-}
-
-static void parseLineAndFile(char* pBuf)
-{
- char *r = pBuf;
- char *h;
- bool bIsInMain = false;
-
- /* Skip initial '#' */
- if (*r != '#')
- return;
-
- /* Find line number */
- for (r++; *r == ' ' || *r == '\t' || rtl::isAsciiAlpha(static_cast<unsigned char>(*r)); r++) ;
- h = r;
- for (; *r != '\0' && *r != ' ' && *r != '\t'; r++) ;
- *r++ = 0;
- idlc()->setLineNumber(sal_uInt32(atol(h)));
- yylineno = atol(h);
-
- /* Find file name, if present */
- for (; *r != '"'; r++)
- {
- if (*r == '\n' || *r == '\0')
- return;
- }
- h = ++r;
- for (; *r != '"'; r++) ;
- *r = 0;
- if (*h == '\0')
- idlc()->setFileName("standard input");
- else
- idlc()->setFileName(OString(h));
-
- bIsInMain = idlc()->getFileName() == idlc()->getRealFileName();
- idlc()->setInMainfile(bIsInMain);
-}
-
-// Suppress any warnings from generated code:
-#ifdef __GNUC__
-#pragma GCC diagnostic ignored "-Wunused-function"
-#pragma GCC diagnostic ignored "-Wunused-label"
-#elif defined _MSC_VER
-/**/
-#ifdef yywrap
-#undef yywrap
-#define yywrap() 1
-#endif
-/**/
-#endif
-#define YY_NO_UNISTD_H
-%}
-
-%option noyywrap
-%option never-interactive
-
-%x DOCU
-%x COMMENT
-
-DIGIT [0-9]
-OCT_DIGIT [0-7]
-HEX_DIGIT [a-fA-F0-9]
-CAPITAL [A-Z]
-ALPHA [a-zA-Z]
-INT_LITERAL [1-9][0-9]*
-OCT_LITERAL 0{OCT_DIGIT}*
-HEX_LITERAL (0x|0X){HEX_DIGIT}*
-
-IDENTIFIER_NEW ({ALPHA}({ALPHA}|{DIGIT})*)|({CAPITAL}("_"?({ALPHA}|{DIGIT})+)*)
-IDENTIFIER ("_"?({ALPHA}|{DIGIT})+)*
-
-%%
-
-[ \t\r]+ ; /* eat up whitespace */
-[\n] {
- idlc()->incLineNumber();
- yycolumn = 1;
- yylineno++;
-}
-
-attribute return IDL_ATTRIBUTE;
-bound return IDL_BOUND;
-const return IDL_CONST;
-constants return IDL_CONSTANTS;
-constrained return IDL_CONSTRAINED;
-enum return IDL_ENUM;
-exception return IDL_EXCEPTION;
-interface return IDL_INTERFACE;
-maybeambiguous return IDL_MAYBEAMBIGUOUS;
-maybedefault return IDL_MAYBEDEFAULT;
-maybevoid return IDL_MAYBEVOID;
-module return IDL_MODULE;
-needs return IDL_NEEDS;
-observes return IDL_OBSERVES;
-optional return IDL_OPTIONAL;
-property return IDL_PROPERTY;
-raises return IDL_RAISES;
-readonly return IDL_READONLY;
-removable return IDL_REMOVABLE;
-service return IDL_SERVICE;
-sequence return IDL_SEQUENCE;
-singleton return IDL_SINGLETON;
-struct return IDL_STRUCT;
-transient return IDL_TRANSIENT;
-typedef return IDL_TYPEDEF;
-
-any return IDL_ANY;
-boolean return IDL_BOOLEAN;
-byte return IDL_BYTE;
-char return IDL_CHAR;
-double return IDL_DOUBLE;
-float return IDL_FLOAT;
-hyper return IDL_HYPER;
-long return IDL_LONG;
-short return IDL_SHORT;
-string return IDL_STRING;
-type return IDL_TYPE;
-unsigned return IDL_UNSIGNED;
-void return IDL_VOID;
-
-TRUE return IDL_TRUE;
-True return IDL_TRUE;
-FALSE return IDL_FALSE;
-False return IDL_FALSE;
-
-in return IDL_IN;
-out return IDL_OUT;
-inout return IDL_INOUT;
-
-get return IDL_GET;
-set return IDL_SET;
-
-published return IDL_PUBLISHED;
-
-"..." return IDL_ELLIPSIS;
-
-("-")?{INT_LITERAL}+(l|L|u|U)? {
- return asciiToInteger(yytext, &yylval.ival, &yylval.uval);
- }
-
-("-")?{OCT_LITERAL}+(l|L|u|U)? {
- return asciiToInteger(yytext, &yylval.ival, &yylval.uval);
- }
-
-("-")?{HEX_LITERAL}+(l|L|u|U)? {
- return asciiToInteger(yytext, &yylval.ival, &yylval.uval);
- }
-
-("-")?{DIGIT}+(e|E)(("+"|"-")?{DIGIT}+)?(f|F)? |
-("-")?{DIGIT}*"."{DIGIT}+((e|E)("+"|"-")?{DIGIT}+)?(f|F)? {
- yylval.dval = asciiToFloat( yytext );
- return IDL_FLOATING_PT_LITERAL;
- }
-
-{IDENTIFIER} {
- yylval.sval = new OString(yytext);
- return IDL_IDENTIFIER;
- }
-
-\<\< {
- yylval.strval = yytext;
- return IDL_LEFTSHIFT;
- }
-\>\> {
- yylval.strval = yytext;
- return IDL_RIGHTSHIFT;
- }
-\:\: {
- yylval.strval = yytext;
- return IDL_SCOPESEPARATOR;
- }
-
-"/*" {
- BEGIN( COMMENT );
- docu = OString();
- beginLine = idlc()->getLineNumber();
- }
-
-"/***" {
- BEGIN( COMMENT );
- docu = OString();
- beginLine = idlc()->getLineNumber();
- }
-
-<COMMENT>[^*]+ {
- docu += yytext;
- }
-
-<COMMENT>"*"[^*/]+ {
- docu += yytext;
- }
-
-<COMMENT>"**" {
- docu += yytext;
- }
-
-<COMMENT>[*]+"/" {
- docu = docu.trim();
- sal_Int32 nIndex = 0;
- int count = 0;
- do { o3tl::getToken(docu, 0, '\n', nIndex ); count++; } while( nIndex != -1 );
- idlc()->setLineNumber( beginLine + count - 1);
- BEGIN( INITIAL );
- }
-
-"/**" {
- BEGIN( DOCU );
- docu = OString();
- beginLine = idlc()->getLineNumber();
- }
-
-<DOCU>[^*\n]+ {
- docu += yytext;
- }
-
-<DOCU>"\n"[ \t]*"*"{1} {
- idlc()->setLineNumber( idlc()->getLineNumber() + 1);
- docu += "\n";
- }
-
-<DOCU>"\n" {
- idlc()->setLineNumber( idlc()->getLineNumber() + 1);
- docu += yytext;
- }
-
-<DOCU>"*"[^*^/\n]* {
- docu += yytext;
- }
-
-<DOCU>"\n"[ \t]*"*/" {
- docu = docu.trim();
- sal_Int32 nIndex = 0;
- int count = 0;
- do { o3tl::getToken(docu, 0, '\n', nIndex ); count++; } while( nIndex != -1 );
- idlc()->setLineNumber( beginLine + count - 1);
- if ( (nIndex = docu.indexOf("/*")) >= 0 || (nIndex = docu.indexOf("///")) >= 0 )
- {
- if ( 0 != nIndex &&
- (docu[nIndex - 1] != '"' && docu[nIndex - 1] != ':') )
- ErrorHandler::syntaxError(PS_NoState, idlc()->getLineNumber(),
- "nested documentation strings are not allowed!");
- }
- idlc()->setDocumentation(docu);
- BEGIN( INITIAL );
- }
-
-<DOCU>"*/" {
- docu = docu.trim();
- sal_Int32 nIndex = 0;
- int count = 0;
- do { o3tl::getToken(docu, 0, '\n', nIndex ); count++; } while( nIndex != -1 );
- idlc()->setLineNumber( beginLine + count - 1);
- if ( docu.indexOf("/*") >= 0 || docu.indexOf("//") >= 0 )
- {
- if ( 0 != nIndex &&
- (docu[nIndex - 1] != '"' && docu[nIndex - 1] != ':') )
- ErrorHandler::syntaxError(PS_NoState, idlc()->getLineNumber(),
- "nested documentation strings are not allowed!");
- }
- idlc()->setDocumentation(docu);
- BEGIN( INITIAL );
- }
-
-"//"[^/]{1}.*"\n" {
- /* only a comment */
- OString docStr(yytext);
- docStr = docStr.copy( 0, docStr.lastIndexOf('\n') );
- docStr = docStr.copy( docStr.lastIndexOf('/')+1 );
- docStr = docStr.trim();
- idlc()->incLineNumber();
- }
-
-"///".*"\n" {
- OString docStr(yytext);
- docStr = docStr.copy( 0, docStr.lastIndexOf('\n') );
- docStr = docStr.copy( docStr.lastIndexOf('/')+1 );
- docStr = docStr.trim();
- idlc()->incLineNumber();
- idlc()->setDocumentation(docStr);
- }
-
-. return yytext[0];
-
-^#[ \t]*line[ \t]*[0-9]*" ""\""[^\"]*"\""\n {
- parseLineAndFile(yytext);
-}
-
-^#[ \t]*[0-9]*" ""\""[^\"]*"\""" "[0-9]*\n {
- parseLineAndFile(yytext);
-}
-
-^#[ \t]*[0-9]*" ""\""[^\"]*"\""\n {
- parseLineAndFile(yytext);
-}
-
-^#[ \t]*[0-9]*\n {
- parseLineAndFile(yytext);
-}
-
-^#[ \t]*ident.*\n {
- /* ignore cpp ident */
- idlc()->incLineNumber();
-}
-
-^#[ \t]*pragma[ \t].*\n { /* remember pragma */
- idlParsePragma(yytext);
- idlc()->incLineNumber();
-}
-
-%%
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/idlc/test/const.idl b/idlc/test/const.idl
deleted file mode 100644
index aeb638e22966..000000000000
--- a/idlc/test/const.idl
+++ /dev/null
@@ -1,71 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-module idlc
-{
-module test
-{
- const long l = 1;
- const long add = 1 + 2;
- const long sub = 3 - 2;
- const hyper h = 123456789;
- const float f7 = 3.4123;
- const float f2 = 3.4123 + 10e-12;
- const boolean bt = True;
- const boolean bf = False;
- const boolean and = bt & bf;
-
- /// SHORT_MAX + 1;
- const short shortMax = -0x8000;
- /// LONG_MAX + 1;
- const unsigned long longMax = 0x80000000;
-
-
-constants USER
-{
- /// = 1
- const long FLAG1 = 0x00000001;
- /// = 2
- const long FLAG2 = 0x00000002;
- /// = 4
- const long FLAG3 = 0x00000004;
- /// = 8
- const long FLAG4 = 0x00000008;
- /// = 16
- const long FLAG5 = 0x00000010;
- /// = 0
- const long FLAG6 = FLAG1 & FLAG2;
- /// = 3
- const long FLAG7 = FLAG1 | FLAG2;
- /// = 2
- const long FLAG8 = (FLAG1 | FLAG2) & FLAG2;
- /// = 4
- const long FLAG9 = FLAG1 << 2;
- /// = 32
- const long FLAG10 = (FLAG5 >> 1) << 2;
- /// = 1
- const long FLAG11 = 33 % 4;
- /// = 4
- const long FLAG12 = FLAG10 / 8;
-};
-
-};
-};
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/test/enum.idl b/idlc/test/enum.idl
deleted file mode 100644
index 9ddbd6e7647d..000000000000
--- a/idlc/test/enum.idl
+++ /dev/null
@@ -1,45 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-module idlc
-{
-module test
-{
-
-enum Error
-{
- NONE,
- FATAL,
- SYSTEM,
- RUNTIME
-};
-
-enum Warning
-{
- NO,
- USER = 2,
- WRONGPASSWORD = 4,
- IDFAILURE
-};
-
-
-};
-};
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/test/exception.idl b/idlc/test/exception.idl
deleted file mode 100644
index cc15069f4213..000000000000
--- a/idlc/test/exception.idl
+++ /dev/null
@@ -1,40 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-module idlc
-{
-module test
-{
-
-exception BaseException
-{
- string Description;
-};
-
-exception RuntimeException : BaseException
-{
- long Id;
- type Context;
-};
-
-
-};
-};
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/test/identifiers.idl b/idlc/test/identifiers.idl
deleted file mode 100644
index d845b372941e..000000000000
--- a/idlc/test/identifiers.idl
+++ /dev/null
@@ -1,43 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-struct Identifiers
-{
- long onlysmallalphas;
- long smallMixedAlphas;
- long CapMixedAlphas;
- long ONLYCAPS;
- long CAPS_WITH_UNDERSCORE;
- long CAPS_WITH_UNDERSCORE_11;
- long CAPS_WITH_UNDERSCORE11_11TEST;
- long CapMixed_Alphas_11;
- long m_CapMixedAlphas_11; // should be not allowed with -cid
- long small_get; //should be not allowed with -cid
- long small_11; //should be not allowed with -cid
- long small_11small; //should be not allowed with -cid
- long mixedAlphas_11CAPS; // should be not allowed with -cid
- long mixedAlphas_11mixedAlphas; // should be not allowed with -cid
- long _mixedAlphas; // should be not allowed with -cid
-// long _mixedAlphas_; // should be not allowed
-// long CapsMixedAlphas_; // should be not allowed
-// long _CapsMixedAlphas_; // should be not allowed
-
-};
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/test/interface.idl b/idlc/test/interface.idl
deleted file mode 100644
index 5de90a07b169..000000000000
--- a/idlc/test/interface.idl
+++ /dev/null
@@ -1,71 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <enum.idl>
-#include <struct.idl>
-
-module idlc
-{
-
-module test
-{
-
-interface XBase
-{
- [readonly, attribute] string description;
-
- string getDescription();
-};
-
-interface XTestBaseTypes : XBase
-{
- void voidFunc();
-
- short shortFunc( [in] short inparam, [out] short outparam, [inout] short inoutparam);
- unsigned short uShortFunc( [in] unsigned short inparam, [out] unsigned short outparam, [inout] unsigned short inoutparam);
-
- long longFunc( [in] long inparam, [out] long outparam, [inout] long inoutparam);
- unsigned long ulongFunc( [in] unsigned long inparam, [out] unsigned long outparam, [inout] unsigned long inoutparam);
-
- hyper hyperFunc( [in] hyper inparam, [out] hyper outparam, [inout] hyper inoutparam);
- unsigned hyper uHyperFunc( [in] unsigned hyper inparam, [out] unsigned hyper outparam, [inout] unsigned hyper inoutparam);
-
- float floatFunc( [in] float inparam, [out] float outparam, [inout] float inoutparam);
- double doubleFunc( [in] double inparam, [out] double outparam, [inout] double inoutparam);
- char charFunc( [in] char inparam, [out] char outparam, [inout] char inoutparam);
- string stringFunc( [in] string inparam, [out] string outparam, [inout] string inoutparam);
- byte byteFunc( [in] byte inparam, [out] byte outparam, [inout] byte inoutparam);
-
- type typeFunc( [in] type inparam, [out] type outparam, [inout] type inoutparam);
- any anyFunc( [in] any inparam, [out] any outparam, [inout] any inoutparam);
-};
-
-
-interface XTestComplexTypes : XBase
-{
- Error enumFunc( [in] Error inparam, [out] Error outparam, [inout] Error inoutparam);
-
- BaseStruct structFunc( [in] ::idlc::test::BaseStruct inparam, [out] idlc::test::BaseStruct outparam, [inout] BaseStruct inoutparam);
-};
-
-};
-
-};
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/test/service.idl b/idlc/test/service.idl
deleted file mode 100644
index 79107f933f03..000000000000
--- a/idlc/test/service.idl
+++ /dev/null
@@ -1,64 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <interface.idl>
-
-module idlc
-{
-module test
-{
-
-exception bla
-{
-};
-
-service IdlTest
-{
-// [property] bla p0;
- [property] short p1;
- [optional, property] unsigned short p2;
-
- [maybevoid, property] long p3;
- [bound, property] unsigned long p4;
-
- [constrained, property] hyper p5;
- [transient, property] unsigned hyper p6;
-
- [maybeambiguous, property] string p7;
- [maybedefault, property] type p8;
- [removable, property] any p9;
-
- [readonly, optional, removable, property] ::idlc::test::BaseStruct p10;
-
- interface XTestBaseTypes;
- [optional] interface ::idlc::test::XTestComplexTypes;
-};
-
-service BetterIdlTest
-{
- service IdlTest;
-
- interface XTestBaseTypes;
- [optional] interface ::idlc::test::XTestComplexTypes;
-};
-
-};
-};
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/test/singleton.idl b/idlc/test/singleton.idl
deleted file mode 100644
index e69e2900f113..000000000000
--- a/idlc/test/singleton.idl
+++ /dev/null
@@ -1,61 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <interface.idl>
-
-module idlc
-{
-module test
-{
-
-exception bla
-{
-};
-
-service IdlTest
-{
-// [property] bla p0;
- [property] short p1;
- [optional, property] unsigned short p2;
-
- [maybevoid, property] long p3;
- [bound, property] unsigned long p4;
-
- [constrained, property] hyper p5;
- [transient, property] unsigned hyper p6;
-
- [maybeambiguous, property] string p7;
- [maybedefault, property] type p8;
- [removable, property] any p9;
-
- [readonly, optional, removable, property] ::idlc::test::BaseStruct p10;
-
- interface XTestBaseTypes;
- [optional] interface ::idlc::test::XTestComplexTypes;
-};
-
-singleton SingletonTest
-{
- service IdlTest;
-};
-
-};
-};
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/test/struct.idl b/idlc/test/struct.idl
deleted file mode 100644
index 133471d2e197..000000000000
--- a/idlc/test/struct.idl
+++ /dev/null
@@ -1,121 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-/* In this file the idl struct will be tested.
- bla
- */
-
-/// idlc defines a test module
-module idlc
-{
-
-/// test defines a test module
-module test
-{
-
-typedef sequence< long > Id;
-//struct Bla
-//{
-// long bla;
-//};
-
-/** bla
- BaseStruct defines an * initial struct
- */
-struct BaseStruct
-{
- Id Id;
-
- /// a short member
- short m1;
-
- /// an unsigned short member
- unsigned short m2;
-
- /// a long member
- long m3;
-
- /// an unsigned long member
- unsigned long m4;
-
- /// a hyper member
- hyper m5;
-
- /// an unsigned hyper member
- unsigned hyper m6;
-
- /// a string member
- string m7;
-
- /// a byte member
- byte m8;
-
- /// a type member
- type m9;
-
- /// a float member
- float m10;
-
- /// a double member
- double m11;
-
- /// a char member
- char m12;
-
- /// a boolean member
- boolean m13;
-
- /// an any member
- any m14;
-};
-
-interface XTestBaseTypes;
-
-typedef sequence< long > LongSeq;
-
-typedef sequence< LongSeq > LongSeqSeq;
-
-/** TestStruct deinfes a struct which inherits
- from the base strcut type BaseStruct.
-*/
-struct TestStruct : BaseStruct
-{
- /// a sequence< long > member
- sequence< long > ms1;
-
- /// a sequence< sequence< long > > member
- sequence< sequence< long > > ms2;
-
- /// an interface member
- XTestBaseTypes ms5;
-
- /// a typedef member
- LongSeq ms6;
-
- /// a further typedef member
- LongSeqSeq ms7;
-
- /// a sequence typedef member
- sequence<LongSeq> ms8;
-
-};
-
-}; };
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/test/typelookup.idl b/idlc/test/typelookup.idl
deleted file mode 100644
index a9b5612ef363..000000000000
--- a/idlc/test/typelookup.idl
+++ /dev/null
@@ -1,80 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-/* In this file the idl struct will be tested.
- bla
- */
-
-#include <enum.idl>
-
-typedef short Error;
-
-/// idlc defines a test module
-module idlc
-{
-
-typedef long Error;
-
-/// test defines a test module
-module test
-{
-
-/** bla
- BaseStruct defines an * initial struct
- */
-struct BaseStruct
-{
- /// a long member
- long m1;
- /// a string member
- string m2;
- /// a byte member
- byte m3;
- /// a type member
- type m4;
- /// an enum member, Error in module idlc::test
- Error m5;
- /// a typedef member, global Error (typedef short)
- ::Error m6;
- /// a typedef member, Error in module idlc (typedef long)
- ::idlc::Error m7;
- /// a typedef member, Error in module idlc (typedef long)
- idlc::Error m8;
- /// an enum member, Error in module idlc::test
- test::Error m9;
-};
-
-/** TestStruct deinfes a struct which inherits
- from the base strcut type BaseStruct.
-*/
-struct TestStruct : BaseStruct
-{
- /// a short member
- short ms1;
- /// a hyper member
- hyper ms2;
- /// a sequence<long> member
- sequence< long > ms3;
-};
-
-}; // test
-
-}; // idlc
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/odk/CustomTarget_check.mk b/odk/CustomTarget_check.mk
index 0286cc6cdc6c..e77b1fb09d87 100644
--- a/odk/CustomTarget_check.mk
+++ b/odk/CustomTarget_check.mk
@@ -29,7 +29,7 @@ $(call gb_CustomTarget_get_workdir,odk/check)/checkbin : \
$(SRCDIR)/odk/util/check.pl \
$(if $(DOXYGEN),$(call gb_GeneratedPackage_get_target,odk_doxygen)) \
$(foreach exe,$(if $(filter WNT,$(OS)),$(if $(filter-out AARCH64,$(CPUNAME)),climaker)) cppumaker \
- idlc javamaker $(if $(SYSTEM_UCPP),,ucpp) uno-skeletonmaker unoapploader unoidl-read unoidl-write,\
+ javamaker uno-skeletonmaker unoapploader unoidl-read unoidl-write,\
$(call gb_Executable_get_target,$(exe))) \
$(if $(filter WNT,$(OS)),$(call gb_Package_get_target,odk_cli)) \
$(call gb_Package_get_target,odk_config) \
diff --git a/odk/config/cfgWin.js b/odk/config/cfgWin.js
index 128f3e2eafd5..f112e231b193 100644
--- a/odk/config/cfgWin.js
+++ b/odk/config/cfgWin.js
@@ -127,12 +127,12 @@ function getSdkHome()
continue;
}
}
- //Check if this is an sdk folder by looking for the idl sub - dir
- var idlDir = sHome + "\\idl";
- if (! aFileSystemObject.FolderExists(idlDir))
+ //Check if this is an sdk folder by looking for the examples sub - dir
+ var examplesDir = sHome + "\\examples";
+ if (! aFileSystemObject.FolderExists(examplesDir))
{
stdout.WriteLine("\n Error: Could not find directory \"" +
- idlDir + "\". An SDK is required, please specify " +
+ examplesDir + "\". An SDK is required, please specify " +
"the path to a valid SDK installation.");
continue;
}
diff --git a/odk/docs/tools.html b/odk/docs/tools.html
index adbe0f1ddbdd..092f4b185cbf 100644
--- a/odk/docs/tools.html
+++ b/odk/docs/tools.html
@@ -70,15 +70,8 @@
</tr>
<tr valign="top">
<td class="content3"><img src="images/arrow-1.gif"/></td>
- <td><a href="#idlc" title="link to the idlc tool description">idlc</a></td>
- <td class="content87">The deprecated UNOIDL compiler, generates a common
- legacy binary type library format as base for all codemaker tools and
- the UNO runtime type library.</td>
- </tr>
- <tr valign="top">
- <td class="content3"><img src="images/arrow-1.gif"/></td>
<td><a href="#unoidl-write" title="link to the unoidl-write tool description">unoidl-write</a></td>
- <td class="content87">The new UNOIDL compiler, generates a common
+ <td class="content87">The UNOIDL compiler, generates a common
binary type library format as base for all codemaker tools and
the UNO runtime type library.</td>
</tr>
@@ -113,12 +106,6 @@
</tr>
<tr valign="top">
<td class="content3"><img src="images/arrow-1.gif"/></td>
- <td><a href="#regmerge" title="link to the regmerge tool description">regmerge</a></td>
- <td class="content87">Deprecated tool to merge several legacy registry (e.g. type
- libraries) files into one file. <b>Note:</b> Since OpenOffice.org 3 it is no longer part of the SDK but it comes directly with the office as part of the <b>ure</b>.</td>
- </tr>
- <tr valign="top">
- <td class="content3"><img src="images/arrow-1.gif"/></td>
<td><a href="#regview" title="link to the regview tool description">regview</a></td>
<td class="content87">Tool to view the content of a legacy registry file
in a human readable manner. Special support for type library
@@ -334,80 +321,6 @@
<td>
<table class="table2">
<tr>
- <td colspan="2" class="head1"><a name="idlc"/>idlc</td>
- <td align="right">
- <a href="#tools" title="link to the tools overview"><img class="navigate" src="images/nav_up.png"/></a>
- <a href="../index.html" title="link to the SDK start page"><img class="navigate" src="images/nav_home.png"/></a>
- </td>
- </tr>
- <tr>
- <td colspan="3">
- <p>'idlc' is the deprecated UNOIDL compiler. It is a full featured compiler used
- to check UNODL type definitions and transform valid type definitions
- into a binary type library format, which is later used by all codemaker
- tools. It is also used as a dynamic type library for UNO at runtime.<br/>
- You can find a syntax description for UNOIDL <a href="http://wiki.openoffice.org/wiki/Documentation/DevGuide/AppendixD/UNOIDL_Syntax_Specification" title="link to the &quot;UNOIDL Syntax Specification&quot; chapter in the Developer's Guide">here</a>.</p>
- <p><b>Note:</b> idlc and regmerge are deprecated and produce a legacy binary type
- library format that is different from the new format that is produced by
- unoidl-write.</p>
- <p class="head2">Usage:</p>
- <blockquote>
- <b><code>idlc [-options] file_1 ... file_n | @&lt;filename&gt;</code></b>
- </blockquote>
- <table class="table4">
- <tr>
- <td class="cell15"><code>file_1 ... file_n</code></td>
- <td class="cell85">specifies one or more idl files. Only files with
- the extension '.idl' are valid.</td>
- </tr>
- <tr>
- <td class="cell15"><code>@&lt;filename&gt;</code></td>
- <td class="cell85">filename specifies the name of a command
- file.</td>
- </tr>
- </table>
- <p class="head2">Options:</p>
- <table class="table4">
- <tr>
- <td class="cell15"><code>-O&lt;path&gt;</code></td>
- <td class="cell85">path describes the output directory. The
- generated output is a legacy registry file with the same name as the idl
- input file.</td>
- </tr>
- <tr>
- <td class="cell15"><code>-I&lt;path&gt;</code></td>
- <td class="cell85">path specifies a directory where included files
- that will be searched by the preprocessor are located. Multiple
- directories can be combined with ';'.</td>
- </tr>
- <tr>
- <td class="cell15"><code>-D&lt;name&gt;</code></td>
- <td class="cell85">name defines a macro for the preprocessor.</td>
- </tr>
- <tr>
- <td class="cell15"><code>-C</code></td>
- <td class="cell85">generates complete type information, including
- additional service information and documentation.</td>
- </tr>
- <tr>
- <td class="cell15"><code>-h|?</code></td>
- <td class="cell85">print this help message and exit.</td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </td>
- <td class="content1"><img class="nothing8" src="images/nada.gif"/></td>
- </tr>
- <tr>
- <td colspan="3"><img class="line" src="images/sdk_line-1.gif"/></td>
- </tr>
- <tr>
- <td class="content1"><img class="nothing8" src="images/nada.gif"/></td>
- <td>
- <table class="table2">
- <tr>
<td colspan="2" class="head1"><a name="unoidl-write"/>unoidl-write</td>
<td align="right">
<a href="#tools" title="link to the tools overview"><img class="navigate" src="images/nav_up.png"/></a>
@@ -897,61 +810,6 @@ types the specified types depend on.</p>
<td>
<table class="table2">
<tr>
- <td colspan="2" class="head1"><a name="regmerge"/>regmerge</td>
- <td align="right">
- <a href="#tools" title="link to the tools overview"><img class="navigate" src="images/nav_up.png"/></a>
- <a href="../index.html" title="link to the SDK start page"><img class="navigate" src="images/nav_home.png"/></a>
- </td>
- </tr>
- <tr>
- <td colspan="3">
- <p>The deprecated 'regmerge' is a small tool to merge different legacy registry files under a
- specified key into another legacy registry file. If a value already exists in
- the target file the value is overwritten by the value of the source
- file.</p>
- <p><b>Note:</b> idlc and regmerge are deprecated and produce a legacy binary type
- library format that is different from the new format that is produced by
- unoidl-write.</p>
- <p class="head2">Usage:</p>
- <blockquote>
- <b><code>regmerge [-v|--verbose] &lt;mergefile&gt; &lt;mergeKeyName&gt; &lt;regfile_1&gt; ... &lt;regfile_n&gt;</code></b>
- </blockquote>
- <p class="head2">Options:</p>
- <table class="table4">
- <tr>
- <td class="cell15"><code>-v|--verbose</code></td>
- <td class="cell85">verbose output on stdout.</td>
- </tr>
- <tr>
- <td class="cell15"><code>&lt;mergefile&gt;</code></td>
- <td class="cell85">specifies the merged registry file. If this file
- doesn't exist, it is created.</td>
- </tr>
- <tr>
- <td class="cell15"><code>&lt;mergeKeyName&gt;</code></td>
- <td class="cell85">specifies the merge key, everything is merged
- under this key. If this key doesn't exist, it is created.</td>
- </tr>
- <tr>
- <td class="cell15"><code>&lt;regfile_1&gt; ... &lt;regfile_n&gt;</code></td>
- <td class="cell85">specifies one or more registry files that are
- merged.</td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </td>
- <td class="content1"><img class="nothing8" src="images/nada.gif"/></td>
- </tr>
- <tr>
- <td colspan="3"><img class="line" src="images/sdk_line-1.gif"/></td>
- </tr>
- <tr>
- <td class="content1"><img class="nothing8" src="images/nada.gif"/></td>
- <td>
- <table class="table2">
- <tr>
<td colspan="2" class="head1"><a name="regview"/>regview</td>
<td align="right">
<a href="#tools" title="link to the tools overview"><img class="navigate" src="images/nav_up.png"/></a>
diff --git a/odk/settings/std.mk b/odk/settings/std.mk
index e457e844c671..2a0763222e6d 100644
--- a/odk/settings/std.mk
+++ b/odk/settings/std.mk
@@ -88,11 +88,9 @@ SDK_SED="$(OO_SDK_SED_HOME)/sed"
else
SDK_SED=sed
endif
-IDLC="$(OO_SDK_HOME)/bin/idlc"
UNOIDLWRITE="$(OO_SDK_HOME)/bin/unoidl-write"
CPPUMAKER="$(OO_SDK_HOME)/bin/cppumaker"
JAVAMAKER="$(OO_SDK_HOME)/bin/javamaker"
-REGMERGE="$(OO_SDK_URE_BIN_DIR)/regmerge"
SDK_JAVA_UNO_BOOTSTRAP_FILES=\
-C $(CLASSES_DIR) $(SQM)com/sun/star/lib/loader/$(SQM)
diff --git a/odk/util/check.pl b/odk/util/check.pl
index 377c8be0dc58..8c1728671d91 100644
--- a/odk/util/check.pl
+++ b/odk/util/check.pl
@@ -45,12 +45,9 @@ if (-d "$SdkDir") {
# check binaries
print "check binaries: ";
if (check_dir("bin")) {
- my @binarylist = ( "idlc","cppumaker","javamaker",
+ my @binarylist = ( "cppumaker","javamaker",
"unoidl-read", "unoidl-write",
"unoapploader", "uno-skeletonmaker" );
- if ($ENV{SYSTEM_UCPP} eq "") {
- push @binarylist,"ucpp";
- }
foreach $i (@binarylist)
{
diff --git a/offapi/UnoApi_offapi.mk b/offapi/UnoApi_offapi.mk
index 5f0ae2e84d56..4ed97c8e5ddb 100644
--- a/offapi/UnoApi_offapi.mk
+++ b/offapi/UnoApi_offapi.mk
@@ -19,7 +19,6 @@
$(eval $(call gb_UnoApi_UnoApi,offapi))
-$(eval $(call gb_UnoApi_package_idlfiles,offapi))
$(eval $(call gb_UnoApi_use_api,offapi,\
udkapi \
diff --git a/registry/Executable_regmerge.mk b/registry/Executable_regmerge.mk
deleted file mode 100644
index a55acf885f12..000000000000
--- a/registry/Executable_regmerge.mk
+++ /dev/null
@@ -1,29 +0,0 @@
-# -*- 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/.
-#
-
-$(eval $(call gb_Executable_Executable,regmerge))
-
-$(eval $(call gb_Executable_use_libraries,regmerge,\
- reg \
- $(if $(filter TRUE,$(DISABLE_DYNLOADING)),store) \
- $(if $(filter TRUE,$(DISABLE_DYNLOADING)),salhelper) \
- sal \
-))
-
-$(eval $(call gb_Executable_use_static_libraries,regmerge,\
- registry_helper \
-))
-
-$(eval $(call gb_Executable_add_exception_objects,regmerge,\
- registry/tools/regmerge \
-))
-
-$(eval $(call gb_Executable_add_default_nativeres,regmerge))
-
-# vim:set noet sw=4 ts=4:
diff --git a/registry/Module_registry.mk b/registry/Module_registry.mk
index 40f7230bbb73..45c23bd617e3 100644
--- a/registry/Module_registry.mk
+++ b/registry/Module_registry.mk
@@ -12,7 +12,6 @@ $(eval $(call gb_Module_Module,registry))
$(eval $(call gb_Module_add_targets,registry,\
Library_reg \
$(call gb_CondExeRegistryTools, \
- Executable_regmerge \
Executable_regview \
StaticLibrary_registry_helper \
) \
diff --git a/registry/StaticLibrary_registry_helper.mk b/registry/StaticLibrary_registry_helper.mk
index a0c11428ef0f..cffd7a22da16 100644
--- a/registry/StaticLibrary_registry_helper.mk
+++ b/registry/StaticLibrary_registry_helper.mk
@@ -12,7 +12,6 @@ $(eval $(call gb_StaticLibrary_StaticLibrary,registry_helper))
$(eval $(call gb_StaticLibrary_add_exception_objects,registry_helper,\
registry/tools/fileurl \
- registry/tools/options \
))
# vim: set noet sw=4 ts=4:
diff --git a/registry/tools/options.cxx b/registry/tools/options.cxx
deleted file mode 100644
index 0212c94e9f55..000000000000
--- a/registry/tools/options.cxx
+++ /dev/null
@@ -1,144 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include "options.hxx"
-
-#include <osl/diagnose.h>
-
-#include <stdio.h>
-
-namespace registry::tools
-{
-
-Options::Options (char const * program)
- : m_program (program)
-{}
-
-Options::~Options()
-{}
-
-// static
-bool Options::checkArgument(std::vector< std::string> & rArgs, char const * arg, size_t len)
-{
- bool result = ((arg != nullptr) && (len > 0));
- OSL_PRECOND(result, "registry::tools::Options::checkArgument(): invalid arguments");
- if (!result)
- return false;
-
- switch (arg[0])
- {
- case '@':
- result = len > 1;
- if (result)
- {
- // "@<cmdfile>"
- result = Options::checkCommandFile(rArgs, &(arg[1]));
- }
- break;
- case '-':
- result = len > 1;
- if (result)
- {
- // "-<option>"
- std::string option (&(arg[0]), 2);
- rArgs.push_back(option);
- if (len > 2)
- {
- // "-<option><param>"
- std::string param(&(arg[2]), len - 2);
- rArgs.push_back(param);
- }
- }
- break;
- default:
- rArgs.push_back(std::string(arg, len));
- break;
- }
- return result;
-}
-
-// static
-bool Options::checkCommandFile(std::vector< std::string > & rArgs, char const * filename)
-{
- FILE * fp = fopen(filename, "r");
- if (fp == nullptr)
- {
- fprintf(stderr, "ERROR: Can't open command file \"%s\"\n", filename);
- return false;
- }
-
- std::string buffer;
- buffer.reserve(256);
-
- bool quoted = false;
- int c = EOF;
- while ((c = fgetc(fp)) != EOF)
- {
- switch(c)
- {
- case '\"':
- quoted = !quoted;
- break;
- case ' ':
- case '\t':
- case '\r':
- case '\n':
- if (!quoted)
- {
- if (!buffer.empty())
- {
- if (!checkArgument(rArgs, buffer.c_str(), buffer.size()))
- {
- // failure.
- (void) fclose(fp);
- return false;
- }
- buffer.clear();
- }
- break;
- }
- [[fallthrough]];
- default:
- buffer.push_back(sal::static_int_cast<char>(c));
- break;
- }
- }
- return fclose(fp) == 0;
-}
-
-bool Options::initOptions (std::vector< std::string > & rArgs)
-{
- return initOptions_Impl (rArgs);
-}
-
-bool Options::badOption (char const * reason, char const * option) const
-{
- (void) fprintf(stderr, "%s: %s option '%s'\n", m_program.c_str(), reason, option);
- return printUsage();
-}
-
-bool Options::printUsage() const
-{
- printUsage_Impl();
- return false;
-}
-
-} // namespace registry::tools
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/registry/tools/options.hxx b/registry/tools/options.hxx
deleted file mode 100644
index 6813d21fc930..000000000000
--- a/registry/tools/options.hxx
+++ /dev/null
@@ -1,57 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#ifndef INCLUDED_REGISTRY_TOOLS_OPTIONS_HXX
-#define INCLUDED_REGISTRY_TOOLS_OPTIONS_HXX
-
-#include <string>
-#include <vector>
-
-namespace registry::tools
-{
-class Options
-{
- std::string m_program;
-
- Options (Options const &) = delete;
- Options & operator= (Options const &) = delete;
-
-public:
- explicit Options (char const * program);
- virtual ~Options();
-
- static bool checkArgument (std::vector< std::string > & rArgs, char const * arg, size_t len);
-
- bool initOptions (std::vector< std::string > & rArgs);
- bool badOption (char const * reason, char const * option) const;
-
- bool printUsage() const;
-
-protected:
- static bool checkCommandFile(std::vector< std::string > & rArgs, char const * filename);
-
- virtual bool initOptions_Impl(std::vector< std::string > & rArgs) = 0;
- virtual void printUsage_Impl() const = 0;
-};
-
-} // namespace registry::tools
-
-#endif /* INCLUDED_REGISTRY_TOOLS_OPTIONS_HXX */
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/registry/tools/regmerge.cxx b/registry/tools/regmerge.cxx
deleted file mode 100644
index 409773a7017d..000000000000
--- a/registry/tools/regmerge.cxx
+++ /dev/null
@@ -1,183 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-
-#include <registry/registry.hxx>
-#include "fileurl.hxx"
-#include "options.hxx"
-
-#include <rtl/ustring.hxx>
-#include <sal/log.hxx>
-
-#include <stdio.h>
-#include <string.h>
-
-using namespace registry::tools;
-
-namespace {
-
-class Options_Impl : public Options
-{
- bool m_bVerbose;
-
-public:
- explicit Options_Impl (char const * program)
- : Options(program), m_bVerbose(false)
- {}
- bool isVerbose() const { return m_bVerbose; }
-
-protected:
- virtual void printUsage_Impl() const override;
- virtual bool initOptions_Impl(std::vector< std::string > & rArgs) override;
-};
-
-}
-
-void Options_Impl::printUsage_Impl() const
-{
- fprintf(stderr, "using: regmerge [-v|--verbose] mergefile mergeKeyName regfile_1 ... regfile_n\n");
- fprintf(stderr, " regmerge @regcmds\nOptions:\n");
- fprintf(stderr, " -v, --verbose : verbose output on stdout.\n");
- fprintf(stderr, " mergefile : specifies the merged registry file. If this file doesn't exists,\n");
- fprintf(stderr, " it is created.\n");
- fprintf(stderr, " mergeKeyName : specifies the merge key, everything is merged under this key.\n");
- fprintf(stderr, " If this key doesn't exists, it is created.\n");
- fprintf(stderr, " regfile_1..n : specifies one or more registry files which are merged.\n");
-}
-
-bool Options_Impl::initOptions_Impl (std::vector< std::string > & rArgs)
-{
- std::vector< std::string >::iterator first = rArgs.begin(), last = rArgs.end();
- if ((first != last) && ((*first)[0] == '-'))
- {
- std::string option(*first);
- if ((option.compare("-v") == 0) || (option.compare("--verbose") == 0))
- {
- m_bVerbose = true;
- }
- else if ((option.compare("-h") == 0) || (option.compare("-?") == 0))
- {
- return printUsage();
- }
- else
- {
- return badOption("unknown", option.c_str());
- }
- (void) rArgs.erase(first);
- }
- return true;
-}
-
-#if (defined UNX)
-int main( int argc, char * argv[] )
-#else
-int __cdecl main( int argc, char * argv[] )
-#endif
-{
- try
- {
- Options_Impl options(argv[0]);
-
- std::vector< std::string > args;
- for (int i = 1; i < argc; i++)
- {
- if (!Options::checkArgument(args, argv[i], strlen(argv[i])))
- {
- options.printUsage();
- return 1;
- }
- }
- if (!options.initOptions(args))
- {
- return 1;
- }
- if (args.size() < 3)
- {
- options.printUsage();
- return 1;
- }
-
- Registry reg;
- OUString regName( convertToFileUrl(args[0].c_str(), args[0].size()) );
- if (reg.open(regName, RegAccessMode::READWRITE) != RegError::NO_ERROR)
- {
- if (reg.create(regName) != RegError::NO_ERROR)
- {
- if (options.isVerbose())
- fprintf(stderr, "open registry \"%s\" failed\n", args[0].c_str());
- return -1;
- }
- }
-
- RegistryKey rootKey;
- if (reg.openRootKey(rootKey) != RegError::NO_ERROR)
- {
- if (options.isVerbose())
- fprintf(stderr, "open root key of registry \"%s\" failed\n", args[0].c_str());
- return -4;
- }
-
- OUString mergeKeyName( OUString::createFromAscii(args[1].c_str()) );
- for (size_t i = 2; i < args.size(); i++)
- {
- OUString targetRegName( convertToFileUrl(args[i].c_str(), args[i].size()) );
- RegError _ret = reg.mergeKey(rootKey, mergeKeyName, targetRegName, options.isVerbose());
- if (_ret != RegError::NO_ERROR)
- {
- if (_ret == RegError::MERGE_CONFLICT)
- {
- if (options.isVerbose())
- fprintf(stderr, "merging registry \"%s\" under key \"%s\" in registry \"%s\".\n",
- args[i].c_str(), args[1].c_str(), args[0].c_str());
- }
- else
- {
- if (options.isVerbose())
- fprintf(stderr, "ERROR: merging registry \"%s\" under key \"%s\" in registry \"%s\" failed.\n",
- args[i].c_str(), args[1].c_str(), args[0].c_str());
- return -2;
- }
- }
- else
- {
- if (options.isVerbose())
- fprintf(stderr, "merging registry \"%s\" under key \"%s\" in registry \"%s\".\n",
- args[i].c_str(), args[1].c_str(), args[0].c_str());
- }
- }
-
- rootKey.releaseKey();
- if (reg.close() != RegError::NO_ERROR)
- {
- if (options.isVerbose())
- fprintf(stderr, "closing registry \"%s\" failed\n", args[0].c_str());
- return -5;
- }
- }
- catch (const std::exception &e)
- {
- SAL_WARN("registry", "Fatal exception: " << e.what());
- return -5;
- }
-
-
- return 0;
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/solenv/clang-format/excludelist b/solenv/clang-format/excludelist
index a0bb88b41fbc..5fc99e274eb6 100644
--- a/solenv/clang-format/excludelist
+++ b/solenv/clang-format/excludelist
@@ -4767,44 +4767,6 @@ idl/source/prj/database.cxx
idl/source/prj/globals.cxx
idl/source/prj/parser.cxx
idl/source/prj/svidl.cxx
-idlc/inc/astattribute.hxx
-idlc/inc/astbasetype.hxx
-idlc/inc/astconstant.hxx
-idlc/inc/astdeclaration.hxx
-idlc/inc/astexpression.hxx
-idlc/inc/astinterface.hxx
-idlc/inc/astinterfacemember.hxx
-idlc/inc/astmember.hxx
-idlc/inc/astoperation.hxx
-idlc/inc/astparameter.hxx
-idlc/inc/astservice.hxx
-idlc/inc/astservicemember.hxx
-idlc/inc/aststruct.hxx
-idlc/inc/aststructinstance.hxx
-idlc/inc/asttypedef.hxx
-idlc/inc/errorhandler.hxx
-idlc/inc/fehelper.hxx
-idlc/inc/idlc.hxx
-idlc/inc/idlctypes.hxx
-idlc/inc/inheritedinterface.hxx
-idlc/inc/options.hxx
-idlc/source/astconstant.cxx
-idlc/source/astdeclaration.cxx
-idlc/source/astdump.cxx
-idlc/source/astenum.cxx
-idlc/source/astinterface.cxx
-idlc/source/astoperation.cxx
-idlc/source/astscope.cxx
-idlc/source/astservice.cxx
-idlc/source/aststruct.cxx
-idlc/source/aststructinstance.cxx
-idlc/source/errorhandler.cxx
-idlc/source/fehelper.cxx
-idlc/source/idlc.cxx
-idlc/source/idlccompile.cxx
-idlc/source/idlcmain.cxx
-idlc/source/idlcproduce.cxx
-idlc/source/options.cxx
include/LibreOfficeKit/LibreOfficeKit.h
include/LibreOfficeKit/LibreOfficeKit.hxx
include/LibreOfficeKit/LibreOfficeKitEnums.h
@@ -7435,9 +7397,6 @@ registry/source/regkey.hxx
registry/test/regdiagnose.h
registry/test/testmerge.cxx
registry/test/testregcpp.cxx
-registry/tools/options.cxx
-registry/tools/options.hxx
-registry/tools/regmerge.cxx
registry/tools/regview.cxx
remotebridges/source/unourl_resolver/unourl_resolver.cxx
reportdesign/inc/PropertyForward.hxx
diff --git a/solenv/flatpak-manifest.in b/solenv/flatpak-manifest.in
index 55358b090988..a8b788fbdaba 100644
--- a/solenv/flatpak-manifest.in
+++ b/solenv/flatpak-manifest.in
@@ -82,13 +82,6 @@
"dest-filename": "@PDFIUM_TARBALL@"
},
{
- "url": "https://dev-www.libreoffice.org/src/@UCPP_TARBALL@",
- "sha256": "@UCPP_SHA256SUM@",
- "type": "file",
- "dest": "external/tarballs",
- "dest-filename": "@UCPP_TARBALL@"
- },
- {
"url": "https://dev-www.libreoffice.org/src/@XMLSEC_TARBALL@",
"sha256": "@XMLSEC_SHA256SUM@",
"type": "file",
diff --git a/solenv/gbuild/UnoApi.mk b/solenv/gbuild/UnoApi.mk
index d99195d2138c..f396642901fe 100644
--- a/solenv/gbuild/UnoApi.mk
+++ b/solenv/gbuild/UnoApi.mk
@@ -7,8 +7,6 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
-gb_UnoApi_ENABLE_INSTALL := $(and $(filter host,$(gb_Side)),$(filter ODK,$(BUILD_TYPE)))
-
.PHONY : $(call gb_UnoApi_get_clean_target,%)
$(call gb_UnoApi_get_clean_target,%) :
$(call gb_Helper_abbreviate_dirs,\
@@ -18,10 +16,6 @@ $(call gb_UnoApi_get_clean_target,%) :
define gb_UnoApi_UnoApi
$(call gb_UnoApiTarget_UnoApiTarget,$(1),$(1))
$(call gb_UnoApiHeadersTarget_UnoApiHeadersTarget,$(1))
-ifneq ($(gb_UnoApi_ENABLE_INSTALL),)
-$(call gb_Package_Package_internal,$(1)_idl,$(SRCDIR))
-$(call gb_Package_set_outdir,$(1)_idl,$(INSTDIR))
-endif
$(call gb_UnoApi_get_target,$(1)) :| $(dir $(call gb_UnoApi_get_target,$(1))).dir
$(call gb_UnoApi_get_target,$(1)) : $(call gb_UnoApiTarget_get_target,$(1))
@@ -36,36 +30,12 @@ $(call gb_Helper_make_userfriendly_targets,$(1),UnoApi)
endef
-ifneq ($(gb_UnoApi_ENABLE_INSTALL),)
-
-# Create a package of IDL files for putting into SDK.
-#
-# gb_UnoApi_package_idlfiles api
-define gb_UnoApi_package_idlfiles
-$(call gb_UnoApi_get_target,$(1)) :| $(call gb_Package_get_target,$(1)_idl)
-$(call gb_UnoApi_get_clean_target,$(1)) : $(call gb_Package_get_clean_target,$(1)_idl)
-
-endef
-
-define gb_UnoApi__add_idlfile
-$(call gb_Package_add_file,$(1)_idl,$(patsubst $(1)/%,$(SDKDIRNAME)/idl/%,$(2).idl),$(2).idl)
-
-endef
-
-else # !gb_UnoApi_ENABLE_INSTALL
-
-gb_UnoApi_package_idlfiles :=
-gb_UnoApi__add_idlfile :=
-
-endif
-
# For enum types, plain struct types, polymorphic struct type templates,
# exception types, interface types, typedefs, and constant groups:
define gb_UnoApi_add_idlfiles
$(call gb_UnoApiTarget_add_idlfiles,$(1),$(2),$(3))
$(call gb_UnoApiHeadersTarget_add_headerfiles,$(1),$(2),$(addsuffix .hpp,$(3)))
$(call gb_UnoApiHeadersTarget_add_headerfiles,$(1),$(2),$(addsuffix .hdl,$(3)))
-$(foreach idl,$(3),$(call gb_UnoApi__add_idlfile,$(1),$(gb_UnoApiTarget_REG_$(1))/$(2)/$(idl)))
endef
@@ -73,14 +43,12 @@ endef
define gb_UnoApi_add_idlfiles_nohdl
$(call gb_UnoApiTarget_add_idlfiles,$(1),$(2),$(3))
$(call gb_UnoApiHeadersTarget_add_headerfiles,$(1),$(2),$(addsuffix .hpp,$(3)))
-$(foreach idl,$(3),$(call gb_UnoApi__add_idlfile,$(1),$(gb_UnoApiTarget_REG_$(1))/$(2)/$(idl)))
endef
# For accumulation-based services and service-based singletons:
define gb_UnoApi_add_idlfiles_noheader
$(call gb_UnoApiTarget_add_idlfiles,$(1),$(2),$(3))
-$(foreach idl,$(3),$(call gb_UnoApi__add_idlfile,$(1),$(gb_UnoApiTarget_REG_$(1))/$(2)/$(idl)))
endef
diff --git a/solenv/qa/python/gbuildtojson.py b/solenv/qa/python/gbuildtojson.py
index b54c901e9974..8f08668dbbdd 100644
--- a/solenv/qa/python/gbuildtojson.py
+++ b/solenv/qa/python/gbuildtojson.py
@@ -124,7 +124,7 @@ class CheckGbuildToJsonModules(unittest.TestCase):
shutil.rmtree(self.tempwork)
def test_gbuildtojson(self):
- modules = ['accessibility', 'android', 'animations', 'apple_remote', 'avmedia', 'basctl', 'basegfx', 'basic', 'bean', 'canvas', 'chart2', 'codemaker', 'comphelper', 'cppcanvas', 'cui', 'dbaccess', 'desktop', 'drawinglayer', 'editeng', 'embeddedobj', 'embedserv', 'eventattacher', 'extras', 'filter', 'forms', 'formula', 'fpicker', 'framework', 'hwpfilter', 'i18nlangtag', 'i18nutil', 'idl', 'idlc', 'instsetoo_native', 'io', 'ios', 'jvmaccess', 'jvmfwk', 'l10ntools', 'librelogo', 'libreofficekit', 'linguistic', 'lotuswordpro', 'nlpsolver', 'o3tl', 'offapi', 'officecfg', 'onlineupdate', 'oovbaapi', 'oox', 'opencl', 'package', 'postprocess', 'pyuno', 'registry', 'remotebridges', 'reportbuilder', 'reportdesign', 'ridljar', 'salhelper', 'sax', 'sc', 'sccomp', 'scp2', 'scripting', 'sd', 'sdext', 'setup_native', 'sfx2', 'slideshow', 'smoketest', 'soltools', 'sot', 'starmath', 'store', 'svgio', 'emfio', 'svl', 'svtools', 'svx', 'sw', 'swext', 'sysui', 'test', 'testtools', 'toolkit', 'ucb', 'ucbhelper', 'udkapi', 'uitest', 'UnoControls', 'unodevtools', 'unoidl', 'unoil', 'unotest', 'unotools', 'unoxml', 'ure', 'uui', 'vbahelper', 'vcl', 'winaccessibility', 'wizards', 'writerperfect', 'xmerge', 'xmlhelp', 'xmloff', 'xmlreader', 'xmlscript', 'xmlsecurity']
+ modules = ['accessibility', 'android', 'animations', 'apple_remote', 'avmedia', 'basctl', 'basegfx', 'basic', 'bean', 'canvas', 'chart2', 'codemaker', 'comphelper', 'cppcanvas', 'cui', 'dbaccess', 'desktop', 'drawinglayer', 'editeng', 'embeddedobj', 'embedserv', 'eventattacher', 'extras', 'filter', 'forms', 'formula', 'fpicker', 'framework', 'hwpfilter', 'i18nlangtag', 'i18nutil', 'idl', 'instsetoo_native', 'io', 'ios', 'jvmaccess', 'jvmfwk', 'l10ntools', 'librelogo', 'libreofficekit', 'linguistic', 'lotuswordpro', 'nlpsolver', 'o3tl', 'offapi', 'officecfg', 'onlineupdate', 'oovbaapi', 'oox', 'opencl', 'package', 'postprocess', 'pyuno', 'registry', 'remotebridges', 'reportbuilder', 'reportdesign', 'ridljar', 'salhelper', 'sax', 'sc', 'sccomp', 'scp2', 'scripting', 'sd', 'sdext', 'setup_native', 'sfx2', 'slideshow', 'smoketest', 'soltools', 'sot', 'starmath', 'store', 'svgio', 'emfio', 'svl', 'svtools', 'svx', 'sw', 'swext', 'sysui', 'test', 'testtools', 'toolkit', 'ucb', 'ucbhelper', 'udkapi', 'uitest', 'UnoControls', 'unodevtools', 'unoidl', 'unoil', 'unotest', 'unotools', 'unoxml', 'ure', 'uui', 'vbahelper', 'vcl', 'winaccessibility', 'wizards', 'writerperfect', 'xmerge', 'xmlhelp', 'xmloff', 'xmlreader', 'xmlscript', 'xmlsecurity']
if os.environ['OS'] == 'WNT':
# for now, use a limited subset for testing on windows as it is so annoyingly slow on this
modules = ['chart2', 'cui', 'dbaccess', 'framework', 'oox', 'sfx2', 'svl', 'svtools', 'svx', 'toolkit', 'vcl', 'xmloff']
diff --git a/udkapi/UnoApi_udkapi.mk b/udkapi/UnoApi_udkapi.mk
index 7e54736af02d..03a3accd2c6c 100644
--- a/udkapi/UnoApi_udkapi.mk
+++ b/udkapi/UnoApi_udkapi.mk
@@ -19,8 +19,6 @@
$(eval $(call gb_UnoApi_UnoApi,udkapi))
-$(eval $(call gb_UnoApi_package_idlfiles,udkapi))
-
$(eval $(call gb_UnoApi_add_idlfiles_noheader,udkapi,com/sun/star/beans,\
PropertySet \
diff --git a/unoidl/README.md b/unoidl/README.md
index ed2ec7bccf3c..d6421f8585d8 100644
--- a/unoidl/README.md
+++ b/unoidl/README.md
@@ -22,8 +22,7 @@ formats to the `UNOIDL` format. It is used at build-time to compile `UNOIDL` fo
`.rdb` files (that are used at build-time only, or included in installation sets
in `URE` or `program/types/` or as part of bundled extensions that are created
during the build and not merely included as pre-built `.oxt` files) from source
-`.idl` files. (The SDK still supports deprecated idlc generating legacy format `.rdb` files for
-now.)
+`.idl` files.
`Executable_unoidl-read` is a helper tool to convert from any of the registry
formats to the source-file format. It can be used manually after a LibreOffice
diff --git a/ure/source/README b/ure/source/README
index afd642b6569f..d66b70003681 100644
--- a/ure/source/README
+++ b/ure/source/README
@@ -25,7 +25,6 @@ ELF platforms (Linux, Solaris, *BSD):
/opt/libreoffice/ure/THIRDPARTYLICENSEREADME.html
/opt/libreoffice/ure/README
/opt/libreoffice/ure/bin/uno
-/opt/libreoffice/ure/bin/regmerge
/opt/libreoffice/ure/bin/regview
/opt/libreoffice/ure/bin/javaldx
/opt/libreoffice/ure/lib/libuno_cppu.so.3
@@ -83,7 +82,6 @@ Program Files\URE\LICENSE
Program Files\URE\THIRDPARTYLICENSEREADME.html
Program Files\URE\README
Program Files\URE\bin\uno.exe
-Program Files\URE\bin\regmerge.exe
Program Files\URE\bin\regview.exe
Program Files\URE\bin\cppu3.dll
Program Files\URE\bin\cppuhelper3MSC.dll
@@ -168,7 +166,7 @@ A URE installation contains the following public files:
- uno is the executable file that runs UNO components. For more details, see
the SDK Developer's Guide.
-- regmerge and regview are tools that work with binary registries that contain
+- regview is a tool that works with old-format binary registries that contain
UNO type or UNO service information. For more details, see the SDK Developer's
Guide.