diff options
author | Mike Kaganski <mike.kaganski@collabora.com> | 2020-12-22 21:42:49 +0300 |
---|---|---|
committer | Mike Kaganski <mike.kaganski@collabora.com> | 2020-12-23 15:42:46 +0100 |
commit | f7de7de1189ae4e63f73468076da47b37fe61ede (patch) | |
tree | 45838b81429257c3777a1352dca9d36a8849e213 /basic/source | |
parent | 49891758278fff055e9ef631078bf08cbf8ba7d6 (diff) |
Initialize method mapping table at compile time
This removes the need to calculate hashes for the table at runtime.
Also this introduces a static assertion to make sure that the table
has correct structure, and fixes some methods that had wrong argument
counts:
CreateUnoListener: 1 -> 2
MIRR: 2 -> 3
SLN: 2 -> 3
SYD: 2 -> 4
Changes in basic/source/classes/sb.cxx are related to the change of
SbxVariable::MakeHashCode into constexpr function taking string view.
Change-Id: I2fec4994e976f36c4b647c30b51a9e879a815775
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/108220
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
Diffstat (limited to 'basic/source')
-rw-r--r-- | basic/source/classes/sb.cxx | 23 | ||||
-rw-r--r-- | basic/source/inc/sbunoobj.hxx | 2 | ||||
-rw-r--r-- | basic/source/runtime/stdobj.cxx | 1521 | ||||
-rw-r--r-- | basic/source/sbx/sbxvar.cxx | 23 |
4 files changed, 866 insertions, 703 deletions
diff --git a/basic/source/classes/sb.cxx b/basic/source/classes/sb.cxx index f8426f4e1a7f..2fda33fffebf 100644 --- a/basic/source/classes/sb.cxx +++ b/basic/source/classes/sb.cxx @@ -1925,11 +1925,14 @@ void StarBASIC::DetachAllDocBasicItems() // #118116 Implementation Collection object -const char pCountStr[] = "Count"; -const char pAddStr[] = "Add"; -const char pItemStr[] = "Item"; -const char pRemoveStr[] = "Remove"; -static sal_uInt16 nCountHash = 0, nAddHash, nItemHash, nRemoveHash; +constexpr OUStringLiteral pCountStr = u"Count"; +constexpr OUStringLiteral pAddStr = u"Add"; +constexpr OUStringLiteral pItemStr = u"Item"; +constexpr OUStringLiteral pRemoveStr = u"Remove"; +constexpr sal_uInt16 nCountHash = SbxVariable::MakeHashCode(pCountStr); +constexpr sal_uInt16 nAddHash = SbxVariable::MakeHashCode(pAddStr); +constexpr sal_uInt16 nItemHash = SbxVariable::MakeHashCode(pItemStr); +constexpr sal_uInt16 nRemoveHash = SbxVariable::MakeHashCode(pRemoveStr); SbxInfoRef BasicCollection::xAddInfo; SbxInfoRef BasicCollection::xItemInfo; @@ -1937,15 +1940,7 @@ SbxInfoRef BasicCollection::xItemInfo; BasicCollection::BasicCollection( const OUString& rClass ) : SbxObject( rClass ) { - if( !nCountHash ) - { - nCountHash = MakeHashCode( pCountStr ); - nAddHash = MakeHashCode( pAddStr ); - nItemHash = MakeHashCode( pItemStr ); - nRemoveHash = MakeHashCode( pRemoveStr ); - } Initialize(); - } BasicCollection::~BasicCollection() @@ -2059,7 +2054,7 @@ sal_Int32 BasicCollection::implGetIndex( SbxVariable const * pIndexVar ) return nIndex; } -sal_Int32 BasicCollection::implGetIndexForName( const OUString& rName ) +sal_Int32 BasicCollection::implGetIndexForName(std::u16string_view rName) { sal_Int32 nIndex = -1; sal_Int32 nCount = xItemArray->Count32(); diff --git a/basic/source/inc/sbunoobj.hxx b/basic/source/inc/sbunoobj.hxx index d2458ef6b86b..6476c3f65c01 100644 --- a/basic/source/inc/sbunoobj.hxx +++ b/basic/source/inc/sbunoobj.hxx @@ -350,7 +350,7 @@ class BasicCollection : public SbxObject virtual ~BasicCollection() override; virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override; sal_Int32 implGetIndex( SbxVariable const * pIndexVar ); - sal_Int32 implGetIndexForName( const OUString& rName ); + sal_Int32 implGetIndexForName(std::u16string_view rName); void CollAdd( SbxArray* pPar_ ); void CollItem( SbxArray* pPar_ ); void CollRemove( SbxArray* pPar_ ); diff --git a/basic/source/runtime/stdobj.cxx b/basic/source/runtime/stdobj.cxx index 18f8f255d4d2..3b835a921be0 100644 --- a/basic/source/runtime/stdobj.cxx +++ b/basic/source/runtime/stdobj.cxx @@ -57,676 +57,869 @@ namespace { -struct Methods { - const char* pName; +struct Method { + std::u16string_view sName; SbxDataType eType; short nArgs; RtlCall pFunc; sal_uInt16 nHash; + constexpr Method(std::u16string_view name, SbxDataType type, short args, RtlCall func) + : sName(name) + , eType(type) + , nArgs(args) + , pFunc(func) + , nHash(SbxVariable::MakeHashCode(name)) + { + } }; +constexpr Method arg(std::u16string_view name, SbxDataType type, short args = 0) +{ + return Method(name, type, args, nullptr); } -static Methods aMethods[] = { - -{ "Abs", SbxDOUBLE, 1 | FUNCTION_, SbRtl_Abs,0 }, - { "number", SbxDOUBLE, 0,nullptr,0 }, -{ "Array", SbxOBJECT, FUNCTION_, SbRtl_Array,0 }, -{ "Asc", SbxLONG, 1 | FUNCTION_, SbRtl_Asc,0 }, - { "string", SbxSTRING, 0,nullptr,0 }, -{ "AscW", SbxLONG, 1 | FUNCTION_ | COMPATONLY_, SbRtl_Asc,0}, - { "string", SbxSTRING, 0,nullptr,0 }, -{ "Atn", SbxDOUBLE, 1 | FUNCTION_, SbRtl_Atn,0 }, - { "number", SbxDOUBLE, 0,nullptr,0 }, -{ "ATTR_ARCHIVE", SbxINTEGER, CPROP_, SbRtl_ATTR_ARCHIVE,0 }, -{ "ATTR_DIRECTORY", SbxINTEGER, CPROP_, SbRtl_ATTR_DIRECTORY,0 }, -{ "ATTR_HIDDEN", SbxINTEGER, CPROP_, SbRtl_ATTR_HIDDEN,0 }, -{ "ATTR_NORMAL", SbxINTEGER, CPROP_, SbRtl_ATTR_NORMAL,0 }, -{ "ATTR_READONLY", SbxINTEGER, CPROP_, SbRtl_ATTR_READONLY,0 }, -{ "ATTR_SYSTEM", SbxINTEGER, CPROP_, SbRtl_ATTR_SYSTEM,0 }, -{ "ATTR_VOLUME", SbxINTEGER, CPROP_, SbRtl_ATTR_VOLUME,0 }, - -{ "Beep", SbxNULL, FUNCTION_, SbRtl_Beep,0 }, -{ "Blue", SbxINTEGER, 1 | FUNCTION_ | NORMONLY_, SbRtl_Blue,0 }, - { "RGB-Value", SbxLONG, 0,nullptr,0 }, - -{ "CallByName", SbxVARIANT, 3 | FUNCTION_, SbRtl_CallByName,0 }, - { "Object", SbxOBJECT, 0,nullptr,0 }, - { "ProcedureName",SbxSTRING, 0,nullptr,0 }, - { "CallType", SbxINTEGER, 0,nullptr,0 }, -{ "CBool", SbxBOOL, 1 | FUNCTION_, SbRtl_CBool,0 }, - { "expression", SbxVARIANT, 0,nullptr,0 }, -{ "CByte", SbxBYTE, 1 | FUNCTION_, SbRtl_CByte,0 }, - { "expression", SbxVARIANT, 0,nullptr,0 }, -{ "CCur", SbxCURRENCY, 1 | FUNCTION_, SbRtl_CCur,0 }, - { "expression", SbxVARIANT, 0,nullptr,0 }, -{ "CDate", SbxDATE, 1 | FUNCTION_, SbRtl_CDate,0 }, - { "expression", SbxVARIANT, 0,nullptr,0 }, -{ "CDateFromUnoDate", SbxDATE, 1 | FUNCTION_, SbRtl_CDateFromUnoDate,0 }, - { "UnoDate", SbxOBJECT, 0,nullptr,0 }, -{ "CDateToUnoDate", SbxOBJECT, 1 | FUNCTION_, SbRtl_CDateToUnoDate,0 }, - { "Date", SbxDATE, 0,nullptr,0 }, -{ "CDateFromUnoTime", SbxDATE, 1 | FUNCTION_, SbRtl_CDateFromUnoTime,0 }, - { "UnoTime", SbxOBJECT, 0,nullptr,0 }, -{ "CDateToUnoTime", SbxOBJECT, 1 | FUNCTION_, SbRtl_CDateToUnoTime,0 }, - { "Time", SbxDATE, 0,nullptr,0 }, -{ "CDateFromUnoDateTime", SbxDATE, 1 | FUNCTION_, SbRtl_CDateFromUnoDateTime,0 }, - { "UnoDateTime", SbxOBJECT, 0,nullptr,0 }, -{ "CDateToUnoDateTime", SbxOBJECT, 1 | FUNCTION_, SbRtl_CDateToUnoDateTime,0 }, - { "DateTime", SbxDATE, 0,nullptr,0 }, -{ "CDateFromIso", SbxDATE, 1 | FUNCTION_, SbRtl_CDateFromIso,0 }, - { "IsoDate", SbxSTRING, 0,nullptr,0 }, -{ "CDateToIso", SbxSTRING, 1 | FUNCTION_, SbRtl_CDateToIso,0 }, - { "Date", SbxDATE, 0,nullptr,0 }, -{ "CDec", SbxDECIMAL, 1 | FUNCTION_, SbRtl_CDec,0 }, - { "expression", SbxVARIANT, 0,nullptr,0 }, -{ "CDbl", SbxDOUBLE, 1 | FUNCTION_, SbRtl_CDbl,0 }, - { "expression", SbxVARIANT, 0,nullptr,0 }, -{ "CF_BITMAP", SbxINTEGER, CPROP_, SbRtl_CF_BITMAP,0 }, -{ "CF_METAFILEPICT",SbxINTEGER, CPROP_, SbRtl_CF_METAFILEPICT,0 }, -{ "CF_TEXT", SbxINTEGER, CPROP_, SbRtl_CF_TEXT,0 }, -{ "ChDir", SbxNULL, 1 | FUNCTION_, SbRtl_ChDir,0 }, - { "string", SbxSTRING, 0,nullptr,0 }, -{ "ChDrive", SbxNULL, 1 | FUNCTION_, SbRtl_ChDrive,0 }, - { "string", SbxSTRING, 0,nullptr,0 }, - -{ "Choose", SbxVARIANT, 2 | FUNCTION_, SbRtl_Choose,0 }, - { "Index", SbxINTEGER, 0,nullptr,0 }, - { "Expression", SbxVARIANT, 0,nullptr,0 }, - -{ "Chr", SbxSTRING, 1 | FUNCTION_, SbRtl_Chr,0 }, - { "string", SbxINTEGER, 0,nullptr,0 }, -{ "ChrW", SbxSTRING, 1 | FUNCTION_ | COMPATONLY_, SbRtl_ChrW,0}, - { "string", SbxINTEGER, 0,nullptr,0 }, - -{ "CInt", SbxINTEGER, 1 | FUNCTION_, SbRtl_CInt,0 }, - { "expression", SbxVARIANT, 0,nullptr,0 }, -{ "CLEAR_ALLTABS", SbxINTEGER, CPROP_, SbRtl_CLEAR_ALLTABS,0 }, -{ "CLEAR_TAB", SbxINTEGER, CPROP_, SbRtl_CLEAR_TAB,0 }, -{ "CLng", SbxLONG, 1 | FUNCTION_, SbRtl_CLng,0 }, - { "expression", SbxVARIANT, 0,nullptr,0 }, -{ "CompatibilityMode", SbxBOOL, 1 | FUNCTION_, SbRtl_CompatibilityMode,0}, - { "bEnable", SbxBOOL, 0,nullptr,0 }, -{ "ConvertFromUrl", SbxSTRING, 1 | FUNCTION_, SbRtl_ConvertFromUrl,0 }, - { "Url", SbxSTRING, 0,nullptr,0 }, -{ "ConvertToUrl", SbxSTRING, 1 | FUNCTION_, SbRtl_ConvertToUrl,0 }, - { "SystemPath", SbxSTRING, 0,nullptr,0 }, -{ "Cos", SbxDOUBLE, 1 | FUNCTION_, SbRtl_Cos,0 }, - { "number", SbxDOUBLE, 0,nullptr,0 }, -{ "CreateObject", SbxOBJECT, 1 | FUNCTION_, SbRtl_CreateObject,0 }, - { "class", SbxSTRING, 0,nullptr,0 }, -{ "CreateUnoListener",SbxOBJECT, 1 | FUNCTION_, SbRtl_CreateUnoListener,0 }, - { "prefix", SbxSTRING, 0,nullptr,0 }, - { "typename", SbxSTRING, 0,nullptr,0 }, -{ "CreateUnoDialog",SbxOBJECT, 2 | FUNCTION_, SbRtl_CreateUnoDialog,0 }, - { "dialoglibrary",SbxOBJECT, 0,nullptr,0 }, - { "dialogname", SbxSTRING, 0,nullptr,0 }, -{ "CreateUnoService",SbxOBJECT, 1 | FUNCTION_, SbRtl_CreateUnoService,0 }, - { "servicename", SbxSTRING, 0,nullptr,0 }, -{ "CreateUnoServiceWithArguments",SbxOBJECT, 2 | FUNCTION_, SbRtl_CreateUnoServiceWithArguments,0 }, - { "servicename", SbxSTRING, 0,nullptr,0 }, - { "arguments", SbxARRAY, 0,nullptr,0 }, -{ "CreateUnoStruct",SbxOBJECT, 1 | FUNCTION_, SbRtl_CreateUnoStruct,0 }, - { "classname", SbxSTRING, 0,nullptr,0 }, -{ "CreateUnoValue", SbxOBJECT, 2 | FUNCTION_, SbRtl_CreateUnoValue,0 }, - { "type", SbxSTRING, 0,nullptr,0 }, - { "value", SbxVARIANT, 0,nullptr,0 }, -{ "CreatePropertySet",SbxOBJECT, 1 | FUNCTION_, SbRtl_CreatePropertySet,0 }, - { "values", SbxARRAY, 0,nullptr,0 }, -{ "CSng", SbxSINGLE, 1 | FUNCTION_, SbRtl_CSng,0 }, - { "expression", SbxVARIANT, 0,nullptr,0 }, -{ "CStr", SbxSTRING, 1 | FUNCTION_, SbRtl_CStr,0 }, - { "expression", SbxVARIANT, 0,nullptr,0 }, -{ "CurDir", SbxSTRING, 1 | FUNCTION_, SbRtl_CurDir,0 }, - { "string", SbxSTRING, 0,nullptr,0 }, -{ "CVar", SbxVARIANT, 1 | FUNCTION_, SbRtl_CVar,0 }, - { "expression", SbxVARIANT, 0,nullptr,0 }, -{ "CVErr", SbxVARIANT, 1 | FUNCTION_, SbRtl_CVErr,0 }, - { "expression", SbxVARIANT, 0,nullptr,0 }, -{ "DDB", SbxDOUBLE, 5 | FUNCTION_ | COMPATONLY_, SbRtl_DDB,0 }, - { "Cost", SbxDOUBLE, 0, nullptr,0 }, - { "Salvage", SbxDOUBLE, 0, nullptr,0 }, - { "Life", SbxDOUBLE, 0, nullptr,0 }, - { "Period", SbxDOUBLE, 0, nullptr,0 }, - { "Factor", SbxVARIANT, OPT_, nullptr,0 }, -{ "Date", SbxDATE, LFUNCTION_,SbRtl_Date,0 }, -{ "DateAdd", SbxDATE, 3 | FUNCTION_, SbRtl_DateAdd,0 }, - { "Interval", SbxSTRING, 0,nullptr,0 }, - { "Number", SbxLONG, 0,nullptr,0 }, - { "Date", SbxDATE, 0,nullptr,0 }, -{ "DateDiff", SbxDOUBLE, 5 | FUNCTION_, SbRtl_DateDiff,0 }, - { "Interval", SbxSTRING, 0,nullptr,0 }, - { "Date1", SbxDATE, 0,nullptr,0 }, - { "Date2", SbxDATE, 0,nullptr,0 }, - { "Firstdayofweek" , SbxINTEGER, OPT_,nullptr,0 }, - { "Firstweekofyear", SbxINTEGER, OPT_,nullptr,0 }, -{ "DatePart", SbxLONG, 4 | FUNCTION_, SbRtl_DatePart,0 }, - { "Interval", SbxSTRING, 0,nullptr,0 }, - { "Date", SbxDATE, 0,nullptr,0 }, - { "Firstdayofweek" , SbxINTEGER, OPT_, nullptr,0 }, - { "Firstweekofyear", SbxINTEGER, OPT_, nullptr,0 }, -{ "DateSerial", SbxDATE, 3 | FUNCTION_, SbRtl_DateSerial,0 }, - { "Year", SbxINTEGER, 0,nullptr,0 }, - { "Month", SbxINTEGER, 0,nullptr,0 }, - { "Day", SbxINTEGER, 0,nullptr,0 }, -{ "DateValue", SbxDATE, 1 | FUNCTION_, SbRtl_DateValue,0 }, - { "String", SbxSTRING, 0,nullptr,0 }, -{ "Day", SbxINTEGER, 1 | FUNCTION_, SbRtl_Day,0 }, - { "Date", SbxDATE, 0,nullptr,0 }, -{ "Ddeexecute", SbxNULL, 2 | FUNCTION_, SbRtl_DDEExecute,0 }, - { "Channel", SbxLONG, 0,nullptr,0 }, - { "Command", SbxSTRING, 0,nullptr,0 }, -{ "Ddeinitiate", SbxINTEGER, 2 | FUNCTION_, SbRtl_DDEInitiate,0 }, - { "Application", SbxSTRING, 0,nullptr,0 }, - { "Topic", SbxSTRING, 0,nullptr,0 }, -{ "Ddepoke", SbxNULL, 3 | FUNCTION_, SbRtl_DDEPoke,0 }, - { "Channel", SbxLONG, 0,nullptr,0 }, - { "Item", SbxSTRING, 0,nullptr,0 }, - { "Data", SbxSTRING, 0,nullptr,0 }, -{ "Dderequest", SbxSTRING, 2 | FUNCTION_, SbRtl_DDERequest,0 }, - { "Channel", SbxLONG, 0,nullptr,0 }, - { "Item", SbxSTRING, 0,nullptr,0 }, -{ "Ddeterminate", SbxNULL, 1 | FUNCTION_, SbRtl_DDETerminate,0 }, - { "Channel", SbxLONG, 0,nullptr,0 }, -{ "Ddeterminateall", SbxNULL, FUNCTION_, SbRtl_DDETerminateAll,0 }, -{ "DimArray", SbxOBJECT, FUNCTION_, SbRtl_DimArray,0 }, -{ "Dir", SbxSTRING, 2 | FUNCTION_, SbRtl_Dir,0 }, - { "FileSpec", SbxSTRING, OPT_, nullptr,0 }, - { "attrmask", SbxINTEGER, OPT_, nullptr,0 }, -{ "DoEvents", SbxINTEGER, FUNCTION_, SbRtl_DoEvents,0 }, -{ "DumpAllObjects", SbxEMPTY, 2 | SUB_, SbRtl_DumpAllObjects,0 }, - { "FileSpec", SbxSTRING, 0,nullptr,0 }, - { "DumpAll", SbxINTEGER, OPT_, nullptr,0 }, - -{ "Empty", SbxVARIANT, CPROP_, SbRtl_Empty,0 }, -{ "EqualUnoObjects",SbxBOOL, 2 | FUNCTION_, SbRtl_EqualUnoObjects,0 }, - { "Variant", SbxVARIANT, 0,nullptr,0 }, - { "Variant", SbxVARIANT, 0,nullptr,0 }, -{ "EnableReschedule", SbxNULL, 1 | FUNCTION_, SbRtl_EnableReschedule,0}, - { "bEnable", SbxBOOL, 0,nullptr,0 }, -{ "Environ", SbxSTRING, 1 | FUNCTION_, SbRtl_Environ,0 }, - { "Environmentstring",SbxSTRING, 0,nullptr,0 }, -{ "EOF", SbxBOOL, 1 | FUNCTION_, SbRtl_EOF,0 }, - { "Channel", SbxINTEGER, 0,nullptr,0 }, -{ "Erl", SbxLONG, ROPROP_, SbRtl_Erl,0 }, -{ "Err", SbxVARIANT, RWPROP_, SbRtl_Err,0 }, -{ "Error", SbxSTRING, 1 | FUNCTION_, SbRtl_Error,0 }, - { "code", SbxLONG, 0,nullptr,0 }, -{ "Exp", SbxDOUBLE, 1 | FUNCTION_, SbRtl_Exp,0 }, - { "number", SbxDOUBLE, 0,nullptr,0 }, - -{ "False", SbxBOOL, CPROP_, SbRtl_False,0 }, -{ "FileAttr", SbxINTEGER, 2 | FUNCTION_, SbRtl_FileAttr,0 }, - { "Channel", SbxINTEGER, 0,nullptr,0 }, - { "Attributes", SbxINTEGER, 0,nullptr,0 }, -{ "FileCopy", SbxNULL, 2 | FUNCTION_, SbRtl_FileCopy,0 }, - { "Source", SbxSTRING, 0,nullptr,0 }, - { "Destination", SbxSTRING, 0,nullptr,0 }, -{ "FileDateTime", SbxSTRING, 1 | FUNCTION_, SbRtl_FileDateTime,0 }, - { "filename", SbxSTRING, 0,nullptr,0 }, -{ "FileExists", SbxBOOL, 1 | FUNCTION_, SbRtl_FileExists,0 }, - { "filename", SbxSTRING, 0,nullptr,0 }, -{ "FileLen", SbxLONG, 1 | FUNCTION_, SbRtl_FileLen,0 }, - { "filename", SbxSTRING, 0,nullptr,0 }, -{ "FindObject", SbxOBJECT, 1 | FUNCTION_, SbRtl_FindObject,0 }, - { "Name", SbxSTRING, 0,nullptr,0 }, -{ "FindPropertyObject", SbxOBJECT, 2 | FUNCTION_, SbRtl_FindPropertyObject,0 }, - { "Object", SbxOBJECT, 0,nullptr,0 }, - { "Name", SbxSTRING, 0,nullptr,0 }, -{ "Fix", SbxDOUBLE, 1 | FUNCTION_, SbRtl_Fix,0 }, - { "number", SbxDOUBLE, 0,nullptr,0 }, -{ "Format", SbxSTRING, 2 | FUNCTION_, SbRtl_Format,0 }, - { "expression", SbxVARIANT, 0,nullptr,0 }, - { "format", SbxSTRING, OPT_, nullptr,0 }, -{ "FormatDateTime", SbxSTRING, 2 | FUNCTION_ | COMPATONLY_, SbRtl_FormatDateTime,0 }, - { "Date", SbxDATE, 0,nullptr,0 }, - { "NamedFormat", SbxINTEGER, OPT_, nullptr,0 }, -{ "FormatNumber", SbxSTRING, 5 | FUNCTION_ | COMPATONLY_, SbRtl_FormatNumber, 0 }, - { "expression", SbxDOUBLE, 0, nullptr, 0 }, - { "numDigitsAfterDecimal", SbxINTEGER, OPT_, nullptr, 0 }, - { "includeLeadingDigit", SbxINTEGER, OPT_, nullptr, 0 }, // vbTriState - { "useParensForNegativeNumbers", SbxINTEGER, OPT_, nullptr, 0 }, // vbTriState - { "groupDigits", SbxINTEGER, OPT_, nullptr, 0 }, // vbTriState -{ "Frac", SbxDOUBLE, 1 | FUNCTION_, SbRtl_Frac,0 }, - { "number", SbxDOUBLE, 0,nullptr,0 }, -{ "FRAMEANCHORCHAR", SbxINTEGER, CPROP_, SbRtl_FRAMEANCHORCHAR,0 }, -{ "FRAMEANCHORPAGE", SbxINTEGER, CPROP_, SbRtl_FRAMEANCHORPAGE,0 }, -{ "FRAMEANCHORPARA", SbxINTEGER, CPROP_, SbRtl_FRAMEANCHORPARA,0 }, -{ "FreeFile", SbxINTEGER, FUNCTION_, SbRtl_FreeFile,0 }, -{ "FreeLibrary", SbxNULL, 1 | FUNCTION_, SbRtl_FreeLibrary,0 }, - { "Modulename", SbxSTRING, 0,nullptr,0 }, - -{ "FV", SbxDOUBLE, 5 | FUNCTION_ | COMPATONLY_, SbRtl_FV,0 }, - { "Rate", SbxDOUBLE, 0, nullptr,0 }, - { "NPer", SbxDOUBLE, 0, nullptr,0 }, - { "Pmt", SbxDOUBLE, 0, nullptr,0 }, - { "PV", SbxVARIANT, OPT_, nullptr,0 }, - { "Due", SbxVARIANT, OPT_, nullptr,0 }, -{ "Get", SbxNULL, 3 | FUNCTION_, SbRtl_Get,0 }, - { "filenumber", SbxINTEGER, 0,nullptr,0 }, - { "recordnumber", SbxLONG, 0,nullptr,0 }, - { "variablename", SbxVARIANT, 0,nullptr,0 }, -{ "GetAttr", SbxINTEGER, 1 | FUNCTION_, SbRtl_GetAttr,0 }, - { "filename", SbxSTRING, 0,nullptr,0 }, -{ "GetDefaultContext", SbxOBJECT, 0 | FUNCTION_, SbRtl_GetDefaultContext,0 }, -{ "GetDialogZoomFactorX", SbxDOUBLE, FUNCTION_,SbRtl_GetDialogZoomFactorX,0 }, -{ "GetDialogZoomFactorY", SbxDOUBLE, FUNCTION_,SbRtl_GetDialogZoomFactorY,0 }, -{ "GetGUIType", SbxINTEGER, FUNCTION_,SbRtl_GetGUIType,0 }, -{ "GetGUIVersion", SbxLONG, FUNCTION_,SbRtl_GetGUIVersion,0 }, -{ "GetPathSeparator", SbxSTRING, FUNCTION_,SbRtl_GetPathSeparator,0 }, -{ "GetProcessServiceManager", SbxOBJECT, 0 | FUNCTION_, SbRtl_GetProcessServiceManager,0 }, -{ "GetSolarVersion", SbxLONG, FUNCTION_,SbRtl_GetSolarVersion,0 }, -{ "GetSystemTicks", SbxLONG, FUNCTION_,SbRtl_GetSystemTicks,0 }, -{ "GetSystemType", SbxINTEGER, FUNCTION_,SbRtl_GetSystemType,0 }, -{ "GlobalScope", SbxOBJECT, FUNCTION_,SbRtl_GlobalScope,0 }, -{ "Green", SbxINTEGER, 1 | FUNCTION_ | NORMONLY_, SbRtl_Green,0 }, - { "RGB-Value", SbxLONG, 0,nullptr,0 }, - -{ "HasUnoInterfaces", SbxBOOL, 1 | FUNCTION_, SbRtl_HasUnoInterfaces,0}, - { "InterfaceName",SbxSTRING, 0,nullptr,0 }, -{ "Hex", SbxSTRING, 1 | FUNCTION_, SbRtl_Hex,0 }, - { "number", SbxLONG, 0,nullptr,0 }, -{ "Hour", SbxINTEGER, 1 | FUNCTION_, SbRtl_Hour,0 }, - { "Date", SbxDATE, 0,nullptr,0 }, - -{ "IDABORT", SbxINTEGER, CPROP_, SbRtl_IDABORT,0 }, -{ "IDCANCEL", SbxINTEGER, CPROP_, SbRtl_IDCANCEL,0 }, -{ "IDNO", SbxINTEGER, CPROP_, SbRtl_IDNO,0 }, -{ "IDOK", SbxINTEGER, CPROP_, SbRtl_IDOK,0 }, -{ "IDRETRY", SbxINTEGER, CPROP_, SbRtl_IDRETRY,0 }, -{ "IDYES", SbxINTEGER, CPROP_, SbRtl_IDYES,0 }, - -{ "Iif", SbxVARIANT, 3 | FUNCTION_, SbRtl_Iif,0 }, - { "Bool", SbxBOOL, 0,nullptr,0 }, - { "Variant1", SbxVARIANT, 0,nullptr,0 }, - { "Variant2", SbxVARIANT, 0,nullptr,0 }, - -{ "Input", SbxSTRING, 2 | FUNCTION_ | COMPATONLY_, SbRtl_Input,0}, - { "Number", SbxLONG, 0,nullptr,0 }, - { "FileNumber", SbxLONG, 0,nullptr,0 }, -{ "InputBox", SbxSTRING, 5 | FUNCTION_, SbRtl_InputBox,0 }, - { "Prompt", SbxSTRING, 0,nullptr,0 }, - { "Title", SbxSTRING, OPT_, nullptr,0 }, - { "Default", SbxSTRING, OPT_, nullptr,0 }, - { "XPosTwips", SbxLONG, OPT_, nullptr,0 }, - { "YPosTwips", SbxLONG, OPT_, nullptr,0 }, -{ "InStr", SbxLONG, 4 | FUNCTION_, SbRtl_InStr,0 }, - { "Start", SbxSTRING, OPT_, nullptr,0 }, - { "String1", SbxSTRING, 0,nullptr,0 }, - { "String2", SbxSTRING, 0,nullptr,0 }, - { "Compare", SbxINTEGER, OPT_, nullptr,0 }, -{ "InStrRev", SbxLONG, 4 | FUNCTION_ | COMPATONLY_, SbRtl_InStrRev,0}, - { "String1", SbxSTRING, 0,nullptr,0 }, - { "String2", SbxSTRING, 0,nullptr,0 }, - { "Start", SbxSTRING, OPT_, nullptr,0 }, - { "Compare", SbxINTEGER, OPT_, nullptr,0 }, -{ "Int", SbxDOUBLE, 1 | FUNCTION_, SbRtl_Int,0 }, - { "number", SbxDOUBLE, 0,nullptr,0 }, -{ "IPmt", SbxDOUBLE, 6 | FUNCTION_ | COMPATONLY_, SbRtl_IPmt,0 }, - { "Rate", SbxDOUBLE, 0, nullptr,0 }, - { "Per", SbxDOUBLE, 0, nullptr,0 }, - { "NPer", SbxDOUBLE, 0, nullptr,0 }, - { "PV", SbxDOUBLE, 0, nullptr,0 }, - { "FV", SbxVARIANT, OPT_, nullptr,0 }, - { "Due", SbxVARIANT, OPT_, nullptr,0 }, -{ "IRR", SbxDOUBLE, 2 | FUNCTION_ | COMPATONLY_, SbRtl_IRR,0 }, - { "ValueArray", SbxARRAY, 0, nullptr,0 }, - { "Guess", SbxVARIANT, OPT_, nullptr,0 }, -{ "IsArray", SbxBOOL, 1 | FUNCTION_, SbRtl_IsArray,0 }, - { "Variant", SbxVARIANT, 0,nullptr,0 }, -{ "IsDate", SbxBOOL, 1 | FUNCTION_, SbRtl_IsDate,0 }, - { "Variant", SbxVARIANT, 0,nullptr,0 }, -{ "IsEmpty", SbxBOOL, 1 | FUNCTION_, SbRtl_IsEmpty,0 }, - { "Variant", SbxVARIANT, 0,nullptr,0 }, -{ "IsError", SbxBOOL, 1 | FUNCTION_, SbRtl_IsError,0 }, - { "Variant", SbxVARIANT, 0,nullptr,0 }, -{ "IsMissing", SbxBOOL, 1 | FUNCTION_, SbRtl_IsMissing,0 }, - { "Variant", SbxVARIANT, 0,nullptr,0 }, -{ "IsNull", SbxBOOL, 1 | FUNCTION_, SbRtl_IsNull,0 }, - { "Variant", SbxVARIANT, 0,nullptr,0 }, -{ "IsNumeric", SbxBOOL, 1 | FUNCTION_, SbRtl_IsNumeric,0 }, - { "Variant", SbxVARIANT, 0,nullptr,0 }, -{ "IsObject", SbxBOOL, 1 | FUNCTION_, SbRtl_IsObject,0 }, - { "Variant", SbxVARIANT, 0,nullptr,0 }, -{ "IsUnoStruct", SbxBOOL, 1 | FUNCTION_, SbRtl_IsUnoStruct,0 }, - { "Variant", SbxVARIANT, 0,nullptr,0 }, -{ "Join", SbxSTRING, 2 | FUNCTION_, SbRtl_Join,0 }, - { "list", SbxOBJECT, 0,nullptr,0 }, - { "delimiter", SbxSTRING, 0,nullptr,0 }, -{ "Kill", SbxNULL, 1 | FUNCTION_, SbRtl_Kill,0 }, - { "filespec", SbxSTRING, 0,nullptr,0 }, -{ "LBound", SbxLONG, 1 | FUNCTION_, SbRtl_LBound,0 }, - { "Variant", SbxVARIANT, 0,nullptr,0 }, -{ "LCase", SbxSTRING, 1 | FUNCTION_, SbRtl_LCase,0 }, - { "string", SbxSTRING, 0,nullptr,0 }, -{ "Left", SbxSTRING, 2 | FUNCTION_, SbRtl_Left,0 }, - { "String", SbxSTRING, 0,nullptr,0 }, - { "Count", SbxLONG, 0,nullptr,0 }, -{ "Len", SbxLONG, 1 | FUNCTION_, SbRtl_Len,0 }, - { "StringOrVariant", SbxVARIANT, 0,nullptr,0 }, -{ "LenB", SbxLONG, 1 | FUNCTION_, SbRtl_Len,0 }, - { "StringOrVariant", SbxVARIANT, 0,nullptr,0 }, -{ "Load", SbxNULL, 1 | FUNCTION_, SbRtl_Load,0 }, - { "object", SbxOBJECT, 0,nullptr,0 }, -{ "LoadPicture", SbxOBJECT, 1 | FUNCTION_, SbRtl_LoadPicture,0 }, - { "string", SbxSTRING, 0,nullptr,0 }, -{ "Loc", SbxLONG, 1 | FUNCTION_, SbRtl_Loc,0 }, - { "Channel", SbxINTEGER, 0,nullptr,0 }, -{ "Lof", SbxLONG, 1 | FUNCTION_, SbRtl_Lof,0 }, - { "Channel", SbxINTEGER, 0,nullptr,0 }, -{ "Log", SbxDOUBLE, 1 | FUNCTION_, SbRtl_Log,0 }, - { "number", SbxDOUBLE, 0,nullptr,0 }, -{ "LTrim", SbxSTRING, 1 | FUNCTION_, SbRtl_LTrim,0 }, - { "string", SbxSTRING, 0,nullptr,0 }, - -{ "MB_ABORTRETRYIGNORE", SbxINTEGER, CPROP_, SbRtl_MB_ABORTRETRYIGNORE,0}, -{ "MB_APPLMODAL", SbxINTEGER, CPROP_, SbRtl_MB_APPLMODAL,0 }, -{ "MB_DEFBUTTON1", SbxINTEGER, CPROP_, SbRtl_MB_DEFBUTTON1,0 }, -{ "MB_DEFBUTTON2", SbxINTEGER, CPROP_, SbRtl_MB_DEFBUTTON2,0 }, -{ "MB_DEFBUTTON3", SbxINTEGER, CPROP_, SbRtl_MB_DEFBUTTON3,0 }, -{ "MB_ICONEXCLAMATION", SbxINTEGER, CPROP_, SbRtl_MB_ICONEXCLAMATION,0}, -{ "MB_ICONINFORMATION", SbxINTEGER, CPROP_, SbRtl_MB_ICONINFORMATION,0}, -{ "MB_ICONQUESTION",SbxINTEGER, CPROP_, SbRtl_MB_ICONQUESTION,0 }, -{ "MB_ICONSTOP", SbxINTEGER, CPROP_, SbRtl_MB_ICONSTOP,0 }, -{ "MB_OK", SbxINTEGER, CPROP_, SbRtl_MB_OK,0 }, -{ "MB_OKCANCEL", SbxINTEGER, CPROP_, SbRtl_MB_OKCANCEL,0 }, -{ "MB_RETRYCANCEL", SbxINTEGER, CPROP_, SbRtl_MB_RETRYCANCEL,0 }, -{ "MB_SYSTEMMODAL", SbxINTEGER, CPROP_, SbRtl_MB_SYSTEMMODAL,0 }, -{ "MB_YESNO", SbxINTEGER, CPROP_, SbRtl_MB_YESNO,0 }, -{ "MB_YESNOCANCEL", SbxINTEGER, CPROP_, SbRtl_MB_YESNOCANCEL,0 }, - -{ "Me", SbxOBJECT, 0 | FUNCTION_ | COMPATONLY_, SbRtl_Me,0 }, -{ "Mid", SbxSTRING, 3 | LFUNCTION_,SbRtl_Mid,0 }, - { "String", SbxSTRING, 0,nullptr,0 }, - { "StartPos", SbxLONG, 0,nullptr,0 }, - { "Length", SbxLONG, OPT_, nullptr,0 }, -{ "Minute", SbxINTEGER, 1 | FUNCTION_, SbRtl_Minute,0 }, - { "Date", SbxDATE, 0,nullptr,0 }, -{ "MIRR", SbxDOUBLE, 2 | FUNCTION_ | COMPATONLY_, SbRtl_MIRR,0 }, - { "ValueArray", SbxARRAY, 0, nullptr,0 }, - { "FinanceRate", SbxDOUBLE, 0, nullptr,0 }, - { "ReinvestRate", SbxDOUBLE, 0, nullptr,0 }, -{ "MkDir", SbxNULL, 1 | FUNCTION_, SbRtl_MkDir,0 }, - { "pathname", SbxSTRING, 0,nullptr,0 }, -{ "Month", SbxINTEGER, 1 | FUNCTION_, SbRtl_Month,0 }, - { "Date", SbxDATE, 0,nullptr,0 }, -{ "MonthName", SbxSTRING, 2 | FUNCTION_ | COMPATONLY_, SbRtl_MonthName,0 }, - { "Month", SbxINTEGER, 0,nullptr,0 }, - { "Abbreviate", SbxBOOL, OPT_, nullptr,0 }, -{ "MsgBox", SbxINTEGER, 5 | FUNCTION_, SbRtl_MsgBox,0 }, - { "Prompt", SbxSTRING, 0,nullptr,0 }, - { "Buttons", SbxINTEGER, OPT_, nullptr,0 }, - { "Title", SbxSTRING, OPT_, nullptr,0 }, - { "Helpfile", SbxSTRING, OPT_, nullptr,0 }, - { "Context", SbxINTEGER, OPT_, nullptr,0 }, - -{ "Nothing", SbxOBJECT, CPROP_, SbRtl_Nothing,0 }, -{ "Now", SbxDATE, FUNCTION_, SbRtl_Now,0 }, -{ "NPer", SbxDOUBLE, 5 | FUNCTION_ | COMPATONLY_, SbRtl_NPer,0 }, - { "Rate", SbxDOUBLE, 0, nullptr,0 }, - { "Pmt", SbxDOUBLE, 0, nullptr,0 }, - { "PV", SbxDOUBLE, 0, nullptr,0 }, - { "FV", SbxVARIANT, OPT_, nullptr,0 }, - { "Due", SbxVARIANT, OPT_, nullptr,0 }, -{ "NPV", SbxDOUBLE, 2 | FUNCTION_ | COMPATONLY_, SbRtl_NPV,0 }, - { "Rate", SbxDOUBLE, 0, nullptr,0 }, - { "ValueArray", SbxARRAY, 0, nullptr,0 }, -{ "Null", SbxNULL, CPROP_, SbRtl_Null,0 }, - -{ "Oct", SbxSTRING, 1 | FUNCTION_, SbRtl_Oct,0 }, - { "number", SbxLONG, 0,nullptr,0 }, - -{ "Partition", SbxSTRING, 4 | FUNCTION_, SbRtl_Partition,0 }, - { "number", SbxLONG, 0,nullptr,0 }, - { "start", SbxLONG, 0,nullptr,0 }, - { "stop", SbxLONG, 0,nullptr,0 }, - { "interval", SbxLONG, 0,nullptr,0 }, -{ "Pi", SbxDOUBLE, CPROP_, SbRtl_PI,0 }, - -{ "Pmt", SbxDOUBLE, 5 | FUNCTION_ | COMPATONLY_, SbRtl_Pmt,0 }, - { "Rate", SbxDOUBLE, 0, nullptr,0 }, - { "NPer", SbxDOUBLE, 0, nullptr,0 }, - { "PV", SbxDOUBLE, 0, nullptr,0 }, - { "FV", SbxVARIANT, OPT_, nullptr,0 }, - { "Due", SbxVARIANT, OPT_, nullptr,0 }, - -{ "PPmt", SbxDOUBLE, 6 | FUNCTION_ | COMPATONLY_, SbRtl_PPmt,0 }, - { "Rate", SbxDOUBLE, 0, nullptr,0 }, - { "Per", SbxDOUBLE, 0, nullptr,0 }, - { "NPer", SbxDOUBLE, 0, nullptr,0 }, - { "PV", SbxDOUBLE, 0, nullptr,0 }, - { "FV", SbxVARIANT, OPT_, nullptr,0 }, - { "Due", SbxVARIANT, OPT_, nullptr,0 }, - -{ "Put", SbxNULL, 3 | FUNCTION_, SbRtl_Put,0 }, - { "filenumber", SbxINTEGER, 0,nullptr,0 }, - { "recordnumber", SbxLONG, 0,nullptr,0 }, - { "variablename", SbxVARIANT, 0,nullptr,0 }, - -{ "PV", SbxDOUBLE, 5 | FUNCTION_ | COMPATONLY_, SbRtl_PV,0 }, - { "Rate", SbxDOUBLE, 0, nullptr,0 }, - { "NPer", SbxDOUBLE, 0, nullptr,0 }, - { "Pmt", SbxDOUBLE, 0, nullptr,0 }, - { "FV", SbxVARIANT, OPT_, nullptr,0 }, - { "Due", SbxVARIANT, OPT_, nullptr,0 }, - -{ "QBColor", SbxLONG, 1 | FUNCTION_, SbRtl_QBColor,0 }, - { "number", SbxINTEGER, 0,nullptr,0 }, - -{ "Randomize", SbxNULL, 1 | FUNCTION_, SbRtl_Randomize,0 }, - { "Number", SbxDOUBLE, OPT_, nullptr,0 }, -{ "Rate", SbxDOUBLE, 6 | FUNCTION_ | COMPATONLY_, SbRtl_Rate,0 }, - { "NPer", SbxDOUBLE, 0, nullptr,0 }, - { "Pmt", SbxDOUBLE, 0, nullptr,0 }, - { "PV", SbxDOUBLE, 0, nullptr,0 }, - { "FV", SbxVARIANT, OPT_, nullptr,0 }, - { "Due", SbxVARIANT, OPT_, nullptr,0 }, - { "Guess", SbxVARIANT, OPT_, nullptr,0 }, -{ "Red", SbxINTEGER, 1 | FUNCTION_ | NORMONLY_, SbRtl_Red,0 }, - { "RGB-Value", SbxLONG, 0,nullptr,0 }, -{ "Reset", SbxNULL, 0 | FUNCTION_, SbRtl_Reset,0 }, -{ "ResolvePath", SbxSTRING, 1 | FUNCTION_, SbRtl_ResolvePath,0 }, - { "Path", SbxSTRING, 0,nullptr,0 }, -{ "RGB", SbxLONG, 3 | FUNCTION_, SbRtl_RGB,0 }, - { "Red", SbxINTEGER, 0,nullptr,0 }, - { "Green", SbxINTEGER, 0,nullptr,0 }, - { "Blue", SbxINTEGER, 0,nullptr,0 }, -{ "Replace", SbxSTRING, 6 | FUNCTION_, SbRtl_Replace,0 }, - { "Expression", SbxSTRING, 0,nullptr,0 }, - { "Find", SbxSTRING, 0,nullptr,0 }, - { "Replace", SbxSTRING, 0,nullptr,0 }, - { "Start", SbxINTEGER, OPT_, nullptr,0 }, - { "Count", SbxINTEGER, OPT_, nullptr,0 }, - { "Compare", SbxINTEGER, OPT_, nullptr,0 }, -{ "Right", SbxSTRING, 2 | FUNCTION_, SbRtl_Right,0 }, - { "String", SbxSTRING, 0,nullptr,0 }, - { "Count", SbxLONG, 0,nullptr,0 }, -{ "RmDir", SbxNULL, 1 | FUNCTION_, SbRtl_RmDir,0 }, - { "pathname", SbxSTRING, 0,nullptr,0 }, -{ "Round", SbxDOUBLE, 2 | FUNCTION_ | COMPATONLY_, SbRtl_Round,0}, - { "Expression", SbxDOUBLE, 0,nullptr,0 }, - { "Numdecimalplaces", SbxINTEGER, OPT_, nullptr,0 }, -{ "Rnd", SbxDOUBLE, 1 | FUNCTION_, SbRtl_Rnd,0 }, - { "Number", SbxDOUBLE, OPT_, nullptr,0 }, -{ "RTL", SbxOBJECT, 0 | FUNCTION_ | COMPATONLY_, SbRtl_RTL,0}, -{ "RTrim", SbxSTRING, 1 | FUNCTION_, SbRtl_RTrim,0 }, - { "string", SbxSTRING, 0,nullptr,0 }, - -{ "SavePicture", SbxNULL, 2 | FUNCTION_, SbRtl_SavePicture,0 }, - { "object", SbxOBJECT, 0,nullptr,0 }, - { "string", SbxSTRING, 0,nullptr,0 }, -{ "Second", SbxINTEGER, 1 | FUNCTION_, SbRtl_Second,0 }, - { "Date", SbxDATE, 0,nullptr,0 }, -{ "Seek", SbxLONG, 1 | FUNCTION_, SbRtl_Seek,0 }, - { "Channel", SbxINTEGER, 0,nullptr,0 }, -{ "SendKeys", SbxNULL, 2 | FUNCTION_, SbRtl_SendKeys,0 }, - { "String", SbxSTRING, 0,nullptr,0 }, - { "Wait", SbxBOOL, OPT_, nullptr,0 }, -{ "SetAttr", SbxNULL, 2 | FUNCTION_, SbRtl_SetAttr,0 }, - { "File" , SbxSTRING, 0,nullptr,0 }, - { "Attributes", SbxINTEGER, 0,nullptr,0 }, -{ "SET_OFF", SbxINTEGER, CPROP_, SbRtl_SET_OFF,0 }, -{ "SET_ON", SbxINTEGER, CPROP_, SbRtl_SET_ON,0 }, -{ "SET_TAB", SbxINTEGER, CPROP_, SbRtl_SET_TAB,0 }, -{ "Sgn", SbxINTEGER, 1 | FUNCTION_, SbRtl_Sgn,0 }, - { "number", SbxDOUBLE, 0,nullptr,0 }, -{ "Shell", SbxLONG, 2 | FUNCTION_, SbRtl_Shell,0 }, - { "Commandstring",SbxSTRING, 0,nullptr,0 }, - { "WindowStyle", SbxINTEGER, OPT_, nullptr,0 }, -{ "Sin", SbxDOUBLE, 1 | FUNCTION_, SbRtl_Sin,0 }, - { "number", SbxDOUBLE, 0,nullptr,0 }, -{ "SLN", SbxDOUBLE, 2 | FUNCTION_ | COMPATONLY_, SbRtl_SLN,0 }, - { "Cost", SbxDOUBLE, 0,nullptr,0 }, - { "Double", SbxDOUBLE, 0,nullptr,0 }, - { "Life", SbxDOUBLE, 0,nullptr,0 }, -{ "SYD", SbxDOUBLE, 2 | FUNCTION_ | COMPATONLY_, SbRtl_SYD,0 }, - { "Cost", SbxDOUBLE, 0,nullptr,0 }, - { "Salvage", SbxDOUBLE, 0,nullptr,0 }, - { "Life", SbxDOUBLE, 0,nullptr,0 }, - { "Period", SbxDOUBLE, 0,nullptr,0 }, -{ "Space", SbxSTRING, 1 | FUNCTION_, SbRtl_Space,0 }, - { "string", SbxLONG, 0,nullptr,0 }, -{ "Spc", SbxSTRING, 1 | FUNCTION_, SbRtl_Spc,0 }, - { "Count", SbxLONG, 0,nullptr,0 }, -{ "Split", SbxOBJECT, 3 | FUNCTION_, SbRtl_Split,0 }, - { "expression", SbxSTRING, 0,nullptr,0 }, - { "delimiter", SbxSTRING, 0,nullptr,0 }, - { "count", SbxLONG, 0,nullptr,0 }, -{ "Sqr", SbxDOUBLE, 1 | FUNCTION_, SbRtl_Sqr,0 }, - { "number", SbxDOUBLE, 0,nullptr,0 }, -{ "Str", SbxSTRING, 1 | FUNCTION_, SbRtl_Str,0 }, - { "number", SbxDOUBLE, 0,nullptr,0 }, -{ "StrComp", SbxINTEGER, 3 | FUNCTION_, SbRtl_StrComp,0 }, - { "String1", SbxSTRING, 0,nullptr,0 }, - { "String2", SbxSTRING, 0,nullptr,0 }, - { "Compare", SbxINTEGER, OPT_, nullptr,0 }, -{ "StrConv", SbxOBJECT, 3 | FUNCTION_, SbRtl_StrConv,0 }, - { "String", SbxSTRING, 0,nullptr,0 }, - { "Conversion", SbxSTRING, 0,nullptr,0 }, - { "LCID", SbxINTEGER, OPT_,nullptr,0 }, -{ "String", SbxSTRING, 2 | FUNCTION_, SbRtl_String,0 }, - { "Count", SbxLONG, 0,nullptr,0 }, - { "Filler", SbxVARIANT, 0,nullptr,0 }, -{ "StrReverse", SbxSTRING, 1 | FUNCTION_ | COMPATONLY_, SbRtl_StrReverse,0 }, - { "String1", SbxSTRING, 0,nullptr,0 }, -{ "Switch", SbxVARIANT, 2 | FUNCTION_, SbRtl_Switch,0 }, - { "Expression", SbxVARIANT, 0,nullptr,0 }, - { "Value", SbxVARIANT, 0,nullptr,0 }, -{ "Tab", SbxSTRING, 1 | FUNCTION_, SbRtl_Tab,0 }, - { "Count", SbxLONG, 0,nullptr,0 }, -{ "Tan", SbxDOUBLE, 1 | FUNCTION_, SbRtl_Tan,0 }, - { "number", SbxDOUBLE, 0,nullptr,0 }, -{ "Time", SbxVARIANT, LFUNCTION_,SbRtl_Time,0 }, -{ "Timer", SbxDATE, FUNCTION_, SbRtl_Timer,0 }, -{ "TimeSerial", SbxDATE, 3 | FUNCTION_, SbRtl_TimeSerial,0 }, - { "Hour", SbxLONG, 0,nullptr,0 }, - { "Minute", SbxLONG, 0,nullptr,0 }, - { "Second", SbxLONG, 0,nullptr,0 }, -{ "TimeValue", SbxDATE, 1 | FUNCTION_, SbRtl_TimeValue,0 }, - { "String", SbxSTRING, 0,nullptr,0 }, -{ "TOGGLE", SbxINTEGER, CPROP_, SbRtl_TOGGLE,0 }, -{ "Trim", SbxSTRING, 1 | FUNCTION_, SbRtl_Trim,0 }, - { "String", SbxSTRING, 0,nullptr,0 }, -{ "True", SbxBOOL, CPROP_, SbRtl_True,0 }, -{ "TwipsPerPixelX", SbxLONG, FUNCTION_, SbRtl_TwipsPerPixelX,0 }, -{ "TwipsPerPixelY", SbxLONG, FUNCTION_, SbRtl_TwipsPerPixelY,0 }, - -{ "TYP_AUTHORFLD", SbxINTEGER, CPROP_, SbRtl_TYP_AUTHORFLD,0 }, -{ "TYP_CHAPTERFLD", SbxINTEGER, CPROP_, SbRtl_TYP_CHAPTERFLD,0 }, -{ "TYP_CONDTXTFLD", SbxINTEGER, CPROP_, SbRtl_TYP_CONDTXTFLD,0 }, -{ "TYP_DATEFLD", SbxINTEGER, CPROP_, SbRtl_TYP_DATEFLD,0 }, -{ "TYP_DBFLD", SbxINTEGER, CPROP_, SbRtl_TYP_DBFLD,0 }, -{ "TYP_DBNAMEFLD", SbxINTEGER, CPROP_, SbRtl_TYP_DBNAMEFLD,0 }, -{ "TYP_DBNEXTSETFLD", SbxINTEGER, CPROP_, SbRtl_TYP_DBNEXTSETFLD,0 }, -{ "TYP_DBNUMSETFLD", SbxINTEGER, CPROP_, SbRtl_TYP_DBNUMSETFLD,0 }, -{ "TYP_DBSETNUMBERFLD", SbxINTEGER, CPROP_, SbRtl_TYP_DBSETNUMBERFLD,0 }, -{ "TYP_DDEFLD", SbxINTEGER, CPROP_, SbRtl_TYP_DDEFLD,0 }, -{ "TYP_DOCINFOFLD", SbxINTEGER, CPROP_, SbRtl_TYP_DOCINFOFLD,0 }, -{ "TYP_DOCSTATFLD", SbxINTEGER, CPROP_, SbRtl_TYP_DOCSTATFLD,0 }, -{ "TYP_EXTUSERFLD", SbxINTEGER, CPROP_, SbRtl_TYP_EXTUSERFLD,0 }, -{ "TYP_FILENAMEFLD", SbxINTEGER, CPROP_, SbRtl_TYP_FILENAMEFLD,0 }, -{ "TYP_FIXDATEFLD", SbxINTEGER, CPROP_, SbRtl_TYP_FIXDATEFLD,0 }, -{ "TYP_FIXTIMEFLD", SbxINTEGER, CPROP_, SbRtl_TYP_FIXTIMEFLD,0 }, -{ "TYP_FORMELFLD", SbxINTEGER, CPROP_, SbRtl_TYP_FORMELFLD,0 }, -{ "TYP_GETFLD", SbxINTEGER, CPROP_, SbRtl_TYP_GETFLD,0 }, -{ "TYP_GETREFFLD", SbxINTEGER, CPROP_, SbRtl_TYP_GETREFFLD,0 }, -{ "TYP_GETREFPAGEFLD", SbxINTEGER, CPROP_, SbRtl_TYP_GETREFPAGEFLD,0 }, -{ "TYP_HIDDENPARAFLD", SbxINTEGER, CPROP_, SbRtl_TYP_HIDDENPARAFLD,0 }, -{ "TYP_HIDDENTXTFLD", SbxINTEGER, CPROP_, SbRtl_TYP_HIDDENTXTFLD,0 }, -{ "TYP_INPUTFLD", SbxINTEGER, CPROP_, SbRtl_TYP_INPUTFLD,0 }, -{ "TYP_INTERNETFLD", SbxINTEGER, CPROP_, SbRtl_TYP_INTERNETFLD,0 }, -{ "TYP_JUMPEDITFLD", SbxINTEGER, CPROP_, SbRtl_TYP_JUMPEDITFLD,0 }, -{ "TYP_MACROFLD", SbxINTEGER, CPROP_, SbRtl_TYP_MACROFLD,0 }, -{ "TYP_NEXTPAGEFLD", SbxINTEGER, CPROP_, SbRtl_TYP_NEXTPAGEFLD,0 }, -{ "TYP_PAGENUMBERFLD", SbxINTEGER, CPROP_, SbRtl_TYP_PAGENUMBERFLD,0 }, -{ "TYP_POSTITFLD", SbxINTEGER, CPROP_, SbRtl_TYP_POSTITFLD,0 }, -{ "TYP_PREVPAGEFLD", SbxINTEGER, CPROP_, SbRtl_TYP_PREVPAGEFLD,0 }, -{ "TYP_SEQFLD", SbxINTEGER, CPROP_, SbRtl_TYP_SEQFLD,0 }, -{ "TYP_SETFLD", SbxINTEGER, CPROP_, SbRtl_TYP_SETFLD,0 }, -{ "TYP_SETINPFLD", SbxINTEGER, CPROP_, SbRtl_TYP_SETINPFLD,0 }, -{ "TYP_SETREFFLD", SbxINTEGER, CPROP_, SbRtl_TYP_SETREFFLD,0 }, -{ "TYP_SETREFPAGEFLD", SbxINTEGER, CPROP_, SbRtl_TYP_SETREFPAGEFLD,0 }, -{ "TYP_TEMPLNAMEFLD", SbxINTEGER, CPROP_, SbRtl_TYP_TEMPLNAMEFLD,0}, -{ "TYP_TIMEFLD", SbxINTEGER, CPROP_, SbRtl_TYP_TIMEFLD,0 }, -{ "TYP_USERFLD", SbxINTEGER, CPROP_, SbRtl_TYP_USERFLD,0 }, -{ "TYP_USRINPFLD", SbxINTEGER, CPROP_, SbRtl_TYP_USRINPFLD,0 }, - -{ "TypeLen", SbxINTEGER, 1 | FUNCTION_, SbRtl_TypeLen,0 }, - { "Var", SbxVARIANT, 0,nullptr,0 }, -{ "TypeName", SbxSTRING, 1 | FUNCTION_, SbRtl_TypeName,0 }, - { "Var", SbxVARIANT, 0,nullptr,0 }, - -{ "UBound", SbxLONG, 1 | FUNCTION_, SbRtl_UBound,0 }, - { "Var", SbxVARIANT, 0,nullptr,0 }, -{ "UCase", SbxSTRING, 1 | FUNCTION_, SbRtl_UCase,0 }, - { "String", SbxSTRING, 0,nullptr,0 }, -{ "Unload", SbxNULL, 1 | FUNCTION_, SbRtl_Unload,0 }, - { "Dialog", SbxOBJECT, 0,nullptr,0 }, - -{ "Val", SbxDOUBLE, 1 | FUNCTION_, SbRtl_Val,0 }, - { "String", SbxSTRING, 0,nullptr,0 }, -{ "VarType", SbxINTEGER, 1 | FUNCTION_, SbRtl_VarType,0 }, - { "Var", SbxVARIANT, 0,nullptr,0 }, -{ "V_EMPTY", SbxINTEGER, CPROP_, SbRtl_V_EMPTY,0 }, -{ "V_NULL", SbxINTEGER, CPROP_, SbRtl_V_NULL,0 }, -{ "V_INTEGER", SbxINTEGER, CPROP_, SbRtl_V_INTEGER,0 }, -{ "V_LONG", SbxINTEGER, CPROP_, SbRtl_V_LONG,0 }, -{ "V_SINGLE", SbxINTEGER, CPROP_, SbRtl_V_SINGLE,0 }, -{ "V_DOUBLE", SbxINTEGER, CPROP_, SbRtl_V_DOUBLE,0 }, -{ "V_CURRENCY", SbxINTEGER, CPROP_, SbRtl_V_CURRENCY,0 }, -{ "V_DATE", SbxINTEGER, CPROP_, SbRtl_V_DATE,0 }, -{ "V_STRING", SbxINTEGER, CPROP_, SbRtl_V_STRING,0 }, - -{ "Wait", SbxNULL, 1 | FUNCTION_, SbRtl_Wait,0 }, - { "Milliseconds", SbxLONG, 0,nullptr,0 }, -{ "FuncCaller", SbxVARIANT, FUNCTION_, SbRtl_FuncCaller,0 }, -//#i64882# -{ "WaitUntil", SbxNULL, 1 | FUNCTION_, SbRtl_WaitUntil,0 }, - { "Date", SbxDOUBLE, 0,nullptr,0 }, -{ "Weekday", SbxINTEGER, 2 | FUNCTION_, SbRtl_Weekday,0 }, - { "Date", SbxDATE, 0,nullptr,0 }, - { "Firstdayofweek", SbxINTEGER, OPT_, nullptr,0 }, -{ "WeekdayName", SbxSTRING, 3 | FUNCTION_ | COMPATONLY_, SbRtl_WeekdayName,0 }, - { "Weekday", SbxINTEGER, 0,nullptr,0 }, - { "Abbreviate", SbxBOOL, OPT_, nullptr,0 }, - { "Firstdayofweek", SbxINTEGER, OPT_, nullptr,0 }, -{ "Year", SbxINTEGER, 1 | FUNCTION_, SbRtl_Year,0 }, - { "Date", SbxDATE, 0,nullptr,0 }, - -{ nullptr, SbxNULL, -1,nullptr,0 }}; // end of the table - -SbiStdObject::SbiStdObject( const OUString& r, StarBASIC* pb ) : SbxObject( r ) +template <int N> constexpr bool MethodsTableValid(const Method (&rMethods)[N]) { - // do we have to initialize the hashcodes? - Methods* p = aMethods; - if( !p->nHash ) - while( p->nArgs != -1 ) + int nCurMethArgs = 0; + int nArgsChecked = 0; + bool bFinished = false; + for (const auto& m : rMethods) + { + assert(!bFinished); // no entries after end-of-table entry + if (bFinished) + return false; + if (m.nArgs == -1) // end-of-table entry + { + assert(nCurMethArgs == nArgsChecked); // last method had correct # of arguments + if (nCurMethArgs != nArgsChecked) + return false; + bFinished = true; + } + else if (m.pFunc) // main (function/sub/etc) entry { - OUString aName_ = OUString::createFromAscii( p->pName ); - p->nHash = SbxVariable::MakeHashCode( aName_ ); - p += ( p->nArgs & ARGSMASK_ ) + 1; + assert(nCurMethArgs == nArgsChecked); // previous method had correct # of arguments + if (nCurMethArgs != nArgsChecked) + return false; + nCurMethArgs = m.nArgs & ARGSMASK_; + nArgsChecked = 0; } + else // subordinate (argument) entry + ++nArgsChecked; + } + assert(bFinished); // its last entry was end-of-table entry + return bFinished; +} + +} + +constexpr Method aMethods[] = { + +{ u"Abs", SbxDOUBLE, 1 | FUNCTION_, SbRtl_Abs }, + arg(u"number", SbxDOUBLE), + +{ u"Array", SbxOBJECT, FUNCTION_, SbRtl_Array }, +{ u"Asc", SbxLONG, 1 | FUNCTION_, SbRtl_Asc }, + arg(u"string", SbxSTRING), + +{ u"AscW", SbxLONG, 1 | FUNCTION_ | COMPATONLY_, SbRtl_Asc }, + arg(u"string", SbxSTRING), + +{ u"Atn", SbxDOUBLE, 1 | FUNCTION_, SbRtl_Atn }, + arg(u"number", SbxDOUBLE), + +{ u"ATTR_ARCHIVE", SbxINTEGER, CPROP_, SbRtl_ATTR_ARCHIVE }, +{ u"ATTR_DIRECTORY", SbxINTEGER, CPROP_, SbRtl_ATTR_DIRECTORY }, +{ u"ATTR_HIDDEN", SbxINTEGER, CPROP_, SbRtl_ATTR_HIDDEN }, +{ u"ATTR_NORMAL", SbxINTEGER, CPROP_, SbRtl_ATTR_NORMAL }, +{ u"ATTR_READONLY", SbxINTEGER, CPROP_, SbRtl_ATTR_READONLY }, +{ u"ATTR_SYSTEM", SbxINTEGER, CPROP_, SbRtl_ATTR_SYSTEM }, +{ u"ATTR_VOLUME", SbxINTEGER, CPROP_, SbRtl_ATTR_VOLUME }, + +{ u"Beep", SbxNULL, FUNCTION_, SbRtl_Beep }, +{ u"Blue", SbxINTEGER, 1 | FUNCTION_ | NORMONLY_, SbRtl_Blue }, + arg(u"RGB-Value", SbxLONG), + +{ u"CallByName", SbxVARIANT, 3 | FUNCTION_, SbRtl_CallByName }, + arg(u"Object", SbxOBJECT), + arg(u"ProcedureName", SbxSTRING), + arg(u"CallType", SbxINTEGER), + +{ u"CBool", SbxBOOL, 1 | FUNCTION_, SbRtl_CBool }, + arg(u"expression", SbxVARIANT), + +{ u"CByte", SbxBYTE, 1 | FUNCTION_, SbRtl_CByte }, + arg(u"expression", SbxVARIANT), + +{ u"CCur", SbxCURRENCY, 1 | FUNCTION_, SbRtl_CCur }, + arg(u"expression", SbxVARIANT), + +{ u"CDate", SbxDATE, 1 | FUNCTION_, SbRtl_CDate }, + arg(u"expression", SbxVARIANT), + +{ u"CDateFromUnoDate", SbxDATE, 1 | FUNCTION_, SbRtl_CDateFromUnoDate }, + arg(u"UnoDate", SbxOBJECT), + +{ u"CDateToUnoDate", SbxOBJECT, 1 | FUNCTION_, SbRtl_CDateToUnoDate }, + arg(u"Date", SbxDATE), + +{ u"CDateFromUnoTime", SbxDATE, 1 | FUNCTION_, SbRtl_CDateFromUnoTime }, + arg(u"UnoTime", SbxOBJECT), + +{ u"CDateToUnoTime", SbxOBJECT, 1 | FUNCTION_, SbRtl_CDateToUnoTime }, + arg(u"Time", SbxDATE), + +{ u"CDateFromUnoDateTime", SbxDATE, 1 | FUNCTION_, SbRtl_CDateFromUnoDateTime }, + arg(u"UnoDateTime", SbxOBJECT), + +{ u"CDateToUnoDateTime", SbxOBJECT, 1 | FUNCTION_, SbRtl_CDateToUnoDateTime }, + arg(u"DateTime", SbxDATE), + +{ u"CDateFromIso", SbxDATE, 1 | FUNCTION_, SbRtl_CDateFromIso }, + arg(u"IsoDate", SbxSTRING), + +{ u"CDateToIso", SbxSTRING, 1 | FUNCTION_, SbRtl_CDateToIso }, + arg(u"Date", SbxDATE), + +{ u"CDec", SbxDECIMAL, 1 | FUNCTION_, SbRtl_CDec }, + arg(u"expression", SbxVARIANT), + +{ u"CDbl", SbxDOUBLE, 1 | FUNCTION_, SbRtl_CDbl }, + arg(u"expression", SbxVARIANT), + +{ u"CF_BITMAP", SbxINTEGER, CPROP_, SbRtl_CF_BITMAP }, +{ u"CF_METAFILEPICT", SbxINTEGER, CPROP_, SbRtl_CF_METAFILEPICT }, +{ u"CF_TEXT", SbxINTEGER, CPROP_, SbRtl_CF_TEXT }, +{ u"ChDir", SbxNULL, 1 | FUNCTION_, SbRtl_ChDir }, + arg(u"string", SbxSTRING), + +{ u"ChDrive", SbxNULL, 1 | FUNCTION_, SbRtl_ChDrive }, + arg(u"string", SbxSTRING), + +{ u"Choose", SbxVARIANT, 2 | FUNCTION_, SbRtl_Choose }, + arg(u"Index", SbxINTEGER), + arg(u"Expression", SbxVARIANT), + +{ u"Chr", SbxSTRING, 1 | FUNCTION_, SbRtl_Chr }, + arg(u"string", SbxINTEGER), + +{ u"ChrW", SbxSTRING, 1 | FUNCTION_ | COMPATONLY_, SbRtl_ChrW }, + arg(u"string", SbxINTEGER), + +{ u"CInt", SbxINTEGER, 1 | FUNCTION_, SbRtl_CInt }, + arg(u"expression", SbxVARIANT), + +{ u"CLEAR_ALLTABS", SbxINTEGER, CPROP_, SbRtl_CLEAR_ALLTABS }, +{ u"CLEAR_TAB", SbxINTEGER, CPROP_, SbRtl_CLEAR_TAB }, +{ u"CLng", SbxLONG, 1 | FUNCTION_, SbRtl_CLng }, + arg(u"expression", SbxVARIANT), + +{ u"CompatibilityMode", SbxBOOL, 1 | FUNCTION_, SbRtl_CompatibilityMode }, + arg(u"bEnable", SbxBOOL), + +{ u"ConvertFromUrl", SbxSTRING, 1 | FUNCTION_, SbRtl_ConvertFromUrl }, + arg(u"Url", SbxSTRING), + +{ u"ConvertToUrl", SbxSTRING, 1 | FUNCTION_, SbRtl_ConvertToUrl }, + arg(u"SystemPath", SbxSTRING), + +{ u"Cos", SbxDOUBLE, 1 | FUNCTION_, SbRtl_Cos }, + arg(u"number", SbxDOUBLE), + +{ u"CreateObject", SbxOBJECT, 1 | FUNCTION_, SbRtl_CreateObject }, + arg(u"class", SbxSTRING), + +{ u"CreateUnoListener", SbxOBJECT, 2 | FUNCTION_, SbRtl_CreateUnoListener }, + arg(u"prefix", SbxSTRING), + arg(u"typename", SbxSTRING), + +{ u"CreateUnoDialog", SbxOBJECT, 2 | FUNCTION_, SbRtl_CreateUnoDialog }, + arg(u"dialoglibrary", SbxOBJECT), + arg(u"dialogname", SbxSTRING), + +{ u"CreateUnoService", SbxOBJECT, 1 | FUNCTION_, SbRtl_CreateUnoService }, + arg(u"servicename", SbxSTRING), + +{ u"CreateUnoServiceWithArguments", SbxOBJECT, 2 | FUNCTION_, SbRtl_CreateUnoServiceWithArguments }, + arg(u"servicename", SbxSTRING), + arg(u"arguments", SbxARRAY), + +{ u"CreateUnoStruct", SbxOBJECT, 1 | FUNCTION_, SbRtl_CreateUnoStruct }, + arg(u"classname", SbxSTRING), + +{ u"CreateUnoValue", SbxOBJECT, 2 | FUNCTION_, SbRtl_CreateUnoValue }, + arg(u"type", SbxSTRING), + arg(u"value", SbxVARIANT), + +{ u"CreatePropertySet", SbxOBJECT, 1 | FUNCTION_, SbRtl_CreatePropertySet }, + arg(u"values", SbxARRAY), + +{ u"CSng", SbxSINGLE, 1 | FUNCTION_, SbRtl_CSng }, + arg(u"expression", SbxVARIANT), + +{ u"CStr", SbxSTRING, 1 | FUNCTION_, SbRtl_CStr }, + arg(u"expression", SbxVARIANT), + +{ u"CurDir", SbxSTRING, 1 | FUNCTION_, SbRtl_CurDir }, + arg(u"string", SbxSTRING), + +{ u"CVar", SbxVARIANT, 1 | FUNCTION_, SbRtl_CVar }, + arg(u"expression", SbxVARIANT), + +{ u"CVErr", SbxVARIANT, 1 | FUNCTION_, SbRtl_CVErr }, + arg(u"expression", SbxVARIANT), + +{ u"DDB", SbxDOUBLE, 5 | FUNCTION_ | COMPATONLY_, SbRtl_DDB }, + arg(u"Cost", SbxDOUBLE), + arg(u"Salvage", SbxDOUBLE), + arg(u"Life", SbxDOUBLE), + arg(u"Period", SbxDOUBLE), + arg(u"Factor", SbxVARIANT, OPT_), + +{ u"Date", SbxDATE, LFUNCTION_, SbRtl_Date }, +{ u"DateAdd", SbxDATE, 3 | FUNCTION_, SbRtl_DateAdd }, + arg(u"Interval", SbxSTRING), + arg(u"Number", SbxLONG), + arg(u"Date", SbxDATE), + +{ u"DateDiff", SbxDOUBLE, 5 | FUNCTION_, SbRtl_DateDiff }, + arg(u"Interval", SbxSTRING), + arg(u"Date1", SbxDATE), + arg(u"Date2", SbxDATE), + arg(u"Firstdayofweek", SbxINTEGER, OPT_), + arg(u"Firstweekofyear", SbxINTEGER, OPT_), + +{ u"DatePart", SbxLONG, 4 | FUNCTION_, SbRtl_DatePart }, + arg(u"Interval", SbxSTRING), + arg(u"Date", SbxDATE), + arg(u"Firstdayofweek", SbxINTEGER, OPT_), + arg(u"Firstweekofyear", SbxINTEGER, OPT_), + +{ u"DateSerial", SbxDATE, 3 | FUNCTION_, SbRtl_DateSerial }, + arg(u"Year", SbxINTEGER), + arg(u"Month", SbxINTEGER), + arg(u"Day", SbxINTEGER), + +{ u"DateValue", SbxDATE, 1 | FUNCTION_, SbRtl_DateValue }, + arg(u"String", SbxSTRING), + +{ u"Day", SbxINTEGER, 1 | FUNCTION_, SbRtl_Day }, + arg(u"Date", SbxDATE), + +{ u"Ddeexecute", SbxNULL, 2 | FUNCTION_, SbRtl_DDEExecute }, + arg(u"Channel", SbxLONG), + arg(u"Command", SbxSTRING), + +{ u"Ddeinitiate", SbxINTEGER, 2 | FUNCTION_, SbRtl_DDEInitiate }, + arg(u"Application", SbxSTRING), + arg(u"Topic", SbxSTRING), + +{ u"Ddepoke", SbxNULL, 3 | FUNCTION_, SbRtl_DDEPoke }, + arg(u"Channel", SbxLONG), + arg(u"Item", SbxSTRING), + arg(u"Data", SbxSTRING), + +{ u"Dderequest", SbxSTRING, 2 | FUNCTION_, SbRtl_DDERequest }, + arg(u"Channel", SbxLONG), + arg(u"Item", SbxSTRING), + +{ u"Ddeterminate", SbxNULL, 1 | FUNCTION_, SbRtl_DDETerminate }, + arg(u"Channel", SbxLONG), + +{ u"Ddeterminateall", SbxNULL, FUNCTION_, SbRtl_DDETerminateAll }, +{ u"DimArray", SbxOBJECT, FUNCTION_, SbRtl_DimArray }, +{ u"Dir", SbxSTRING, 2 | FUNCTION_, SbRtl_Dir }, + arg(u"FileSpec", SbxSTRING, OPT_), + arg(u"attrmask", SbxINTEGER, OPT_), + +{ u"DoEvents", SbxINTEGER, FUNCTION_, SbRtl_DoEvents }, +{ u"DumpAllObjects", SbxEMPTY, 2 | SUB_, SbRtl_DumpAllObjects }, + arg(u"FileSpec", SbxSTRING), + arg(u"DumpAll", SbxINTEGER, OPT_), + +{ u"Empty", SbxVARIANT, CPROP_, SbRtl_Empty }, +{ u"EqualUnoObjects", SbxBOOL, 2 | FUNCTION_, SbRtl_EqualUnoObjects }, + arg(u"Variant", SbxVARIANT), + arg(u"Variant", SbxVARIANT), + +{ u"EnableReschedule", SbxNULL, 1 | FUNCTION_, SbRtl_EnableReschedule }, + arg(u"bEnable", SbxBOOL), + +{ u"Environ", SbxSTRING, 1 | FUNCTION_, SbRtl_Environ }, + arg(u"Environmentstring", SbxSTRING), + +{ u"EOF", SbxBOOL, 1 | FUNCTION_, SbRtl_EOF }, + arg(u"Channel", SbxINTEGER), + +{ u"Erl", SbxLONG, ROPROP_, SbRtl_Erl }, +{ u"Err", SbxVARIANT, RWPROP_, SbRtl_Err }, +{ u"Error", SbxSTRING, 1 | FUNCTION_, SbRtl_Error }, + arg(u"code", SbxLONG), + +{ u"Exp", SbxDOUBLE, 1 | FUNCTION_, SbRtl_Exp }, + arg(u"number", SbxDOUBLE), + +{ u"False", SbxBOOL, CPROP_, SbRtl_False }, +{ u"FileAttr", SbxINTEGER, 2 | FUNCTION_, SbRtl_FileAttr }, + arg(u"Channel", SbxINTEGER), + arg(u"Attributes", SbxINTEGER), + +{ u"FileCopy", SbxNULL, 2 | FUNCTION_, SbRtl_FileCopy }, + arg(u"Source", SbxSTRING), + arg(u"Destination", SbxSTRING), + +{ u"FileDateTime", SbxSTRING, 1 | FUNCTION_, SbRtl_FileDateTime }, + arg(u"filename", SbxSTRING), + +{ u"FileExists", SbxBOOL, 1 | FUNCTION_, SbRtl_FileExists }, + arg(u"filename", SbxSTRING), + +{ u"FileLen", SbxLONG, 1 | FUNCTION_, SbRtl_FileLen }, + arg(u"filename", SbxSTRING), + +{ u"FindObject", SbxOBJECT, 1 | FUNCTION_, SbRtl_FindObject }, + arg(u"Name", SbxSTRING), + +{ u"FindPropertyObject", SbxOBJECT, 2 | FUNCTION_, SbRtl_FindPropertyObject }, + arg(u"Object", SbxOBJECT), + arg(u"Name", SbxSTRING), + +{ u"Fix", SbxDOUBLE, 1 | FUNCTION_, SbRtl_Fix }, + arg(u"number", SbxDOUBLE), + +{ u"Format", SbxSTRING, 2 | FUNCTION_, SbRtl_Format }, + arg(u"expression", SbxVARIANT), + arg(u"format", SbxSTRING, OPT_), + +{ u"FormatDateTime", SbxSTRING, 2 | FUNCTION_ | COMPATONLY_, SbRtl_FormatDateTime}, + arg(u"Date", SbxDATE), + arg(u"NamedFormat", SbxINTEGER, OPT_), + +{ u"FormatNumber", SbxSTRING, 5 | FUNCTION_ | COMPATONLY_, SbRtl_FormatNumber }, + arg(u"expression", SbxDOUBLE), + arg(u"numDigitsAfterDecimal", SbxINTEGER, OPT_), + arg(u"includeLeadingDigit", SbxINTEGER, OPT_), // vbTriState + arg(u"useParensForNegativeNumbers", SbxINTEGER, OPT_), // vbTriState + arg(u"groupDigits", SbxINTEGER, OPT_), // vbTriState + +{ u"Frac", SbxDOUBLE, 1 | FUNCTION_, SbRtl_Frac }, + arg(u"number", SbxDOUBLE), + +{ u"FRAMEANCHORCHAR", SbxINTEGER, CPROP_, SbRtl_FRAMEANCHORCHAR }, +{ u"FRAMEANCHORPAGE", SbxINTEGER, CPROP_, SbRtl_FRAMEANCHORPAGE }, +{ u"FRAMEANCHORPARA", SbxINTEGER, CPROP_, SbRtl_FRAMEANCHORPARA }, +{ u"FreeFile", SbxINTEGER, FUNCTION_, SbRtl_FreeFile }, +{ u"FreeLibrary", SbxNULL, 1 | FUNCTION_, SbRtl_FreeLibrary }, + arg(u"Modulename", SbxSTRING), + +{ u"FV", SbxDOUBLE, 5 | FUNCTION_ | COMPATONLY_, SbRtl_FV }, + arg(u"Rate", SbxDOUBLE), + arg(u"NPer", SbxDOUBLE), + arg(u"Pmt", SbxDOUBLE), + arg(u"PV", SbxVARIANT, OPT_), + arg(u"Due", SbxVARIANT, OPT_), + +{ u"Get", SbxNULL, 3 | FUNCTION_, SbRtl_Get }, + arg(u"filenumber", SbxINTEGER), + arg(u"recordnumber", SbxLONG), + arg(u"variablename", SbxVARIANT), + +{ u"GetAttr", SbxINTEGER, 1 | FUNCTION_, SbRtl_GetAttr }, + arg(u"filename", SbxSTRING), + +{ u"GetDefaultContext", SbxOBJECT, 0 | FUNCTION_, SbRtl_GetDefaultContext }, +{ u"GetDialogZoomFactorX", SbxDOUBLE, FUNCTION_, SbRtl_GetDialogZoomFactorX }, +{ u"GetDialogZoomFactorY", SbxDOUBLE, FUNCTION_, SbRtl_GetDialogZoomFactorY }, +{ u"GetGUIType", SbxINTEGER, FUNCTION_, SbRtl_GetGUIType }, +{ u"GetGUIVersion", SbxLONG, FUNCTION_, SbRtl_GetGUIVersion }, +{ u"GetPathSeparator", SbxSTRING, FUNCTION_, SbRtl_GetPathSeparator }, +{ u"GetProcessServiceManager", SbxOBJECT, 0 | FUNCTION_, SbRtl_GetProcessServiceManager }, +{ u"GetSolarVersion", SbxLONG, FUNCTION_, SbRtl_GetSolarVersion }, +{ u"GetSystemTicks", SbxLONG, FUNCTION_, SbRtl_GetSystemTicks }, +{ u"GetSystemType", SbxINTEGER, FUNCTION_, SbRtl_GetSystemType }, +{ u"GlobalScope", SbxOBJECT, FUNCTION_, SbRtl_GlobalScope }, +{ u"Green", SbxINTEGER, 1 | FUNCTION_ | NORMONLY_, SbRtl_Green }, + arg(u"RGB-Value", SbxLONG), + +{ u"HasUnoInterfaces", SbxBOOL, 1 | FUNCTION_, SbRtl_HasUnoInterfaces }, + arg(u"InterfaceName", SbxSTRING), + +{ u"Hex", SbxSTRING, 1 | FUNCTION_, SbRtl_Hex }, + arg(u"number", SbxLONG), + +{ u"Hour", SbxINTEGER, 1 | FUNCTION_, SbRtl_Hour }, + arg(u"Date", SbxDATE), + +{ u"IDABORT", SbxINTEGER, CPROP_, SbRtl_IDABORT }, +{ u"IDCANCEL", SbxINTEGER, CPROP_, SbRtl_IDCANCEL }, +{ u"IDNO", SbxINTEGER, CPROP_, SbRtl_IDNO }, +{ u"IDOK", SbxINTEGER, CPROP_, SbRtl_IDOK }, +{ u"IDRETRY", SbxINTEGER, CPROP_, SbRtl_IDRETRY }, +{ u"IDYES", SbxINTEGER, CPROP_, SbRtl_IDYES }, + +{ u"Iif", SbxVARIANT, 3 | FUNCTION_, SbRtl_Iif }, + arg(u"Bool", SbxBOOL), + arg(u"Variant1", SbxVARIANT), + arg(u"Variant2", SbxVARIANT), + +{ u"Input", SbxSTRING, 2 | FUNCTION_ | COMPATONLY_, SbRtl_Input }, + arg(u"Number", SbxLONG), + arg(u"FileNumber", SbxLONG), +{ u"InputBox", SbxSTRING, 5 | FUNCTION_, SbRtl_InputBox }, + arg(u"Prompt", SbxSTRING), + arg(u"Title", SbxSTRING, OPT_), + arg(u"Default", SbxSTRING, OPT_), + arg(u"XPosTwips", SbxLONG, OPT_), + arg(u"YPosTwips", SbxLONG, OPT_), + +{ u"InStr", SbxLONG, 4 | FUNCTION_, SbRtl_InStr }, + arg(u"Start", SbxSTRING, OPT_), + arg(u"String1", SbxSTRING), + arg(u"String2", SbxSTRING), + arg(u"Compare", SbxINTEGER, OPT_), + +{ u"InStrRev", SbxLONG, 4 | FUNCTION_ | COMPATONLY_, SbRtl_InStrRev }, + arg(u"String1", SbxSTRING), + arg(u"String2", SbxSTRING), + arg(u"Start", SbxSTRING, OPT_), + arg(u"Compare", SbxINTEGER, OPT_), + +{ u"Int", SbxDOUBLE, 1 | FUNCTION_, SbRtl_Int }, + arg(u"number", SbxDOUBLE), + +{ u"IPmt", SbxDOUBLE, 6 | FUNCTION_ | COMPATONLY_, SbRtl_IPmt }, + arg(u"Rate", SbxDOUBLE), + arg(u"Per", SbxDOUBLE), + arg(u"NPer", SbxDOUBLE), + arg(u"PV", SbxDOUBLE), + arg(u"FV", SbxVARIANT, OPT_), + arg(u"Due", SbxVARIANT, OPT_), + +{ u"IRR", SbxDOUBLE, 2 | FUNCTION_ | COMPATONLY_, SbRtl_IRR }, + arg(u"ValueArray", SbxARRAY), + arg(u"Guess", SbxVARIANT, OPT_), + +{ u"IsArray", SbxBOOL, 1 | FUNCTION_, SbRtl_IsArray }, + arg(u"Variant", SbxVARIANT), + +{ u"IsDate", SbxBOOL, 1 | FUNCTION_, SbRtl_IsDate }, + arg(u"Variant", SbxVARIANT), + +{ u"IsEmpty", SbxBOOL, 1 | FUNCTION_, SbRtl_IsEmpty }, + arg(u"Variant", SbxVARIANT), + +{ u"IsError", SbxBOOL, 1 | FUNCTION_, SbRtl_IsError }, + arg(u"Variant", SbxVARIANT), + +{ u"IsMissing", SbxBOOL, 1 | FUNCTION_, SbRtl_IsMissing }, + arg(u"Variant", SbxVARIANT), + +{ u"IsNull", SbxBOOL, 1 | FUNCTION_, SbRtl_IsNull }, + arg(u"Variant", SbxVARIANT), + +{ u"IsNumeric", SbxBOOL, 1 | FUNCTION_, SbRtl_IsNumeric }, + arg(u"Variant", SbxVARIANT), + +{ u"IsObject", SbxBOOL, 1 | FUNCTION_, SbRtl_IsObject }, + arg(u"Variant", SbxVARIANT), + +{ u"IsUnoStruct", SbxBOOL, 1 | FUNCTION_, SbRtl_IsUnoStruct }, + arg(u"Variant", SbxVARIANT), + +{ u"Join", SbxSTRING, 2 | FUNCTION_, SbRtl_Join }, + arg(u"list", SbxOBJECT), + arg(u"delimiter", SbxSTRING), + +{ u"Kill", SbxNULL, 1 | FUNCTION_, SbRtl_Kill }, + arg(u"filespec", SbxSTRING), + +{ u"LBound", SbxLONG, 1 | FUNCTION_, SbRtl_LBound }, + arg(u"Variant", SbxVARIANT), + +{ u"LCase", SbxSTRING, 1 | FUNCTION_, SbRtl_LCase }, + arg(u"string", SbxSTRING), + +{ u"Left", SbxSTRING, 2 | FUNCTION_, SbRtl_Left }, + arg(u"String", SbxSTRING), + arg(u"Count", SbxLONG), + +{ u"Len", SbxLONG, 1 | FUNCTION_, SbRtl_Len }, + arg(u"StringOrVariant", SbxVARIANT), + +{ u"LenB", SbxLONG, 1 | FUNCTION_, SbRtl_Len }, + arg(u"StringOrVariant", SbxVARIANT), + +{ u"Load", SbxNULL, 1 | FUNCTION_, SbRtl_Load }, + arg(u"object", SbxOBJECT), + +{ u"LoadPicture", SbxOBJECT, 1 | FUNCTION_, SbRtl_LoadPicture }, + arg(u"string", SbxSTRING), + +{ u"Loc", SbxLONG, 1 | FUNCTION_, SbRtl_Loc }, + arg(u"Channel", SbxINTEGER), + +{ u"Lof", SbxLONG, 1 | FUNCTION_, SbRtl_Lof }, + arg(u"Channel", SbxINTEGER), + +{ u"Log", SbxDOUBLE, 1 | FUNCTION_, SbRtl_Log }, + arg(u"number", SbxDOUBLE), + +{ u"LTrim", SbxSTRING, 1 | FUNCTION_, SbRtl_LTrim }, + arg(u"string", SbxSTRING), + +{ u"MB_ABORTRETRYIGNORE", SbxINTEGER, CPROP_, SbRtl_MB_ABORTRETRYIGNORE }, +{ u"MB_APPLMODAL", SbxINTEGER, CPROP_, SbRtl_MB_APPLMODAL }, +{ u"MB_DEFBUTTON1", SbxINTEGER, CPROP_, SbRtl_MB_DEFBUTTON1 }, +{ u"MB_DEFBUTTON2", SbxINTEGER, CPROP_, SbRtl_MB_DEFBUTTON2 }, +{ u"MB_DEFBUTTON3", SbxINTEGER, CPROP_, SbRtl_MB_DEFBUTTON3 }, +{ u"MB_ICONEXCLAMATION", SbxINTEGER, CPROP_, SbRtl_MB_ICONEXCLAMATION }, +{ u"MB_ICONINFORMATION", SbxINTEGER, CPROP_, SbRtl_MB_ICONINFORMATION }, +{ u"MB_ICONQUESTION", SbxINTEGER, CPROP_, SbRtl_MB_ICONQUESTION }, +{ u"MB_ICONSTOP", SbxINTEGER, CPROP_, SbRtl_MB_ICONSTOP }, +{ u"MB_OK", SbxINTEGER, CPROP_, SbRtl_MB_OK }, +{ u"MB_OKCANCEL", SbxINTEGER, CPROP_, SbRtl_MB_OKCANCEL }, +{ u"MB_RETRYCANCEL", SbxINTEGER, CPROP_, SbRtl_MB_RETRYCANCEL }, +{ u"MB_SYSTEMMODAL", SbxINTEGER, CPROP_, SbRtl_MB_SYSTEMMODAL }, +{ u"MB_YESNO", SbxINTEGER, CPROP_, SbRtl_MB_YESNO }, +{ u"MB_YESNOCANCEL", SbxINTEGER, CPROP_, SbRtl_MB_YESNOCANCEL }, + +{ u"Me", SbxOBJECT, 0 | FUNCTION_ | COMPATONLY_, SbRtl_Me }, +{ u"Mid", SbxSTRING, 3 | LFUNCTION_, SbRtl_Mid }, + arg(u"String", SbxSTRING), + arg(u"StartPos", SbxLONG), + arg(u"Length", SbxLONG, OPT_), + +{ u"Minute", SbxINTEGER, 1 | FUNCTION_, SbRtl_Minute }, + arg(u"Date", SbxDATE), + +{ u"MIRR", SbxDOUBLE, 3 | FUNCTION_ | COMPATONLY_, SbRtl_MIRR }, + arg(u"ValueArray", SbxARRAY), + arg(u"FinanceRate", SbxDOUBLE), + arg(u"ReinvestRate", SbxDOUBLE), + +{ u"MkDir", SbxNULL, 1 | FUNCTION_, SbRtl_MkDir }, + arg(u"pathname", SbxSTRING), + +{ u"Month", SbxINTEGER, 1 | FUNCTION_, SbRtl_Month }, + arg(u"Date", SbxDATE), + +{ u"MonthName", SbxSTRING, 2 | FUNCTION_ | COMPATONLY_, SbRtl_MonthName }, + arg(u"Month", SbxINTEGER), + arg(u"Abbreviate", SbxBOOL, OPT_), + +{ u"MsgBox", SbxINTEGER, 5 | FUNCTION_, SbRtl_MsgBox }, + arg(u"Prompt", SbxSTRING), + arg(u"Buttons", SbxINTEGER, OPT_), + arg(u"Title", SbxSTRING, OPT_), + arg(u"Helpfile", SbxSTRING, OPT_), + arg(u"Context", SbxINTEGER, OPT_), + +{ u"Nothing", SbxOBJECT, CPROP_, SbRtl_Nothing }, +{ u"Now", SbxDATE, FUNCTION_, SbRtl_Now }, +{ u"NPer", SbxDOUBLE, 5 | FUNCTION_ | COMPATONLY_, SbRtl_NPer }, + arg(u"Rate", SbxDOUBLE), + arg(u"Pmt", SbxDOUBLE), + arg(u"PV", SbxDOUBLE), + arg(u"FV", SbxVARIANT, OPT_), + arg(u"Due", SbxVARIANT, OPT_), + +{ u"NPV", SbxDOUBLE, 2 | FUNCTION_ | COMPATONLY_, SbRtl_NPV }, + arg(u"Rate", SbxDOUBLE), + arg(u"ValueArray", SbxARRAY), + +{ u"Null", SbxNULL, CPROP_, SbRtl_Null }, + +{ u"Oct", SbxSTRING, 1 | FUNCTION_, SbRtl_Oct }, + arg(u"number", SbxLONG), + +{ u"Partition", SbxSTRING, 4 | FUNCTION_, SbRtl_Partition }, + arg(u"number", SbxLONG), + arg(u"start", SbxLONG), + arg(u"stop", SbxLONG), + arg(u"interval", SbxLONG), + +{ u"Pi", SbxDOUBLE, CPROP_, SbRtl_PI }, + +{ u"Pmt", SbxDOUBLE, 5 | FUNCTION_ | COMPATONLY_, SbRtl_Pmt }, + arg(u"Rate", SbxDOUBLE), + arg(u"NPer", SbxDOUBLE), + arg(u"PV", SbxDOUBLE), + arg(u"FV", SbxVARIANT, OPT_), + arg(u"Due", SbxVARIANT, OPT_), + +{ u"PPmt", SbxDOUBLE, 6 | FUNCTION_ | COMPATONLY_, SbRtl_PPmt }, + arg(u"Rate", SbxDOUBLE), + arg(u"Per", SbxDOUBLE), + arg(u"NPer", SbxDOUBLE), + arg(u"PV", SbxDOUBLE), + arg(u"FV", SbxVARIANT, OPT_), + arg(u"Due", SbxVARIANT, OPT_), + +{ u"Put", SbxNULL, 3 | FUNCTION_, SbRtl_Put }, + arg(u"filenumber", SbxINTEGER), + arg(u"recordnumber", SbxLONG), + arg(u"variablename", SbxVARIANT), + +{ u"PV", SbxDOUBLE, 5 | FUNCTION_ | COMPATONLY_, SbRtl_PV }, + arg(u"Rate", SbxDOUBLE), + arg(u"NPer", SbxDOUBLE), + arg(u"Pmt", SbxDOUBLE), + arg(u"FV", SbxVARIANT, OPT_), + arg(u"Due", SbxVARIANT, OPT_), + +{ u"QBColor", SbxLONG, 1 | FUNCTION_, SbRtl_QBColor }, + arg(u"number", SbxINTEGER), + +{ u"Randomize", SbxNULL, 1 | FUNCTION_, SbRtl_Randomize }, + arg(u"Number", SbxDOUBLE, OPT_), + +{ u"Rate", SbxDOUBLE, 6 | FUNCTION_ | COMPATONLY_, SbRtl_Rate }, + arg(u"NPer", SbxDOUBLE), + arg(u"Pmt", SbxDOUBLE), + arg(u"PV", SbxDOUBLE), + arg(u"FV", SbxVARIANT, OPT_), + arg(u"Due", SbxVARIANT, OPT_), + arg(u"Guess", SbxVARIANT, OPT_), + +{ u"Red", SbxINTEGER, 1 | FUNCTION_ | NORMONLY_, SbRtl_Red }, + arg(u"RGB-Value", SbxLONG), + +{ u"Reset", SbxNULL, 0 | FUNCTION_, SbRtl_Reset }, +{ u"ResolvePath", SbxSTRING, 1 | FUNCTION_, SbRtl_ResolvePath }, + arg(u"Path", SbxSTRING), + +{ u"RGB", SbxLONG, 3 | FUNCTION_, SbRtl_RGB }, + arg(u"Red", SbxINTEGER), + arg(u"Green", SbxINTEGER), + arg(u"Blue", SbxINTEGER), + +{ u"Replace", SbxSTRING, 6 | FUNCTION_, SbRtl_Replace }, + arg(u"Expression", SbxSTRING), + arg(u"Find", SbxSTRING), + arg(u"Replace", SbxSTRING), + arg(u"Start", SbxINTEGER, OPT_), + arg(u"Count", SbxINTEGER, OPT_), + arg(u"Compare", SbxINTEGER, OPT_), + +{ u"Right", SbxSTRING, 2 | FUNCTION_, SbRtl_Right }, + arg(u"String", SbxSTRING), + arg(u"Count", SbxLONG), + +{ u"RmDir", SbxNULL, 1 | FUNCTION_, SbRtl_RmDir }, + arg(u"pathname", SbxSTRING), + +{ u"Round", SbxDOUBLE, 2 | FUNCTION_ | COMPATONLY_, SbRtl_Round }, + arg(u"Expression", SbxDOUBLE), + arg(u"Numdecimalplaces", SbxINTEGER, OPT_), + +{ u"Rnd", SbxDOUBLE, 1 | FUNCTION_, SbRtl_Rnd }, + arg(u"Number", SbxDOUBLE, OPT_), + +{ u"RTL", SbxOBJECT, 0 | FUNCTION_ | COMPATONLY_, SbRtl_RTL }, +{ u"RTrim", SbxSTRING, 1 | FUNCTION_, SbRtl_RTrim }, + arg(u"string", SbxSTRING), + +{ u"SavePicture", SbxNULL, 2 | FUNCTION_, SbRtl_SavePicture }, + arg(u"object", SbxOBJECT), + arg(u"string", SbxSTRING), + +{ u"Second", SbxINTEGER, 1 | FUNCTION_, SbRtl_Second }, + arg(u"Date", SbxDATE), + +{ u"Seek", SbxLONG, 1 | FUNCTION_, SbRtl_Seek }, + arg(u"Channel", SbxINTEGER), + +{ u"SendKeys", SbxNULL, 2 | FUNCTION_, SbRtl_SendKeys }, + arg(u"String", SbxSTRING), + arg(u"Wait", SbxBOOL, OPT_), + +{ u"SetAttr", SbxNULL, 2 | FUNCTION_, SbRtl_SetAttr }, + arg(u"File", SbxSTRING), + arg(u"Attributes", SbxINTEGER), + +{ u"SET_OFF", SbxINTEGER, CPROP_, SbRtl_SET_OFF }, +{ u"SET_ON", SbxINTEGER, CPROP_, SbRtl_SET_ON }, +{ u"SET_TAB", SbxINTEGER, CPROP_, SbRtl_SET_TAB }, +{ u"Sgn", SbxINTEGER, 1 | FUNCTION_, SbRtl_Sgn }, + arg(u"number", SbxDOUBLE), + +{ u"Shell", SbxLONG, 2 | FUNCTION_, SbRtl_Shell }, + arg(u"Commandstring", SbxSTRING), + arg(u"WindowStyle", SbxINTEGER, OPT_), + +{ u"Sin", SbxDOUBLE, 1 | FUNCTION_, SbRtl_Sin }, + arg(u"number", SbxDOUBLE), + +{ u"SLN", SbxDOUBLE, 3 | FUNCTION_ | COMPATONLY_, SbRtl_SLN }, + arg(u"Cost", SbxDOUBLE), + arg(u"Double", SbxDOUBLE), + arg(u"Life", SbxDOUBLE), + +{ u"SYD", SbxDOUBLE, 4 | FUNCTION_ | COMPATONLY_, SbRtl_SYD }, + arg(u"Cost", SbxDOUBLE), + arg(u"Salvage", SbxDOUBLE), + arg(u"Life", SbxDOUBLE), + arg(u"Period", SbxDOUBLE), + +{ u"Space", SbxSTRING, 1 | FUNCTION_, SbRtl_Space }, + arg(u"string", SbxLONG), + +{ u"Spc", SbxSTRING, 1 | FUNCTION_, SbRtl_Spc }, + arg(u"Count", SbxLONG), + +{ u"Split", SbxOBJECT, 3 | FUNCTION_, SbRtl_Split }, + arg(u"expression", SbxSTRING), + arg(u"delimiter", SbxSTRING), + arg(u"count", SbxLONG), + +{ u"Sqr", SbxDOUBLE, 1 | FUNCTION_, SbRtl_Sqr }, + arg(u"number", SbxDOUBLE), + +{ u"Str", SbxSTRING, 1 | FUNCTION_, SbRtl_Str }, + arg(u"number", SbxDOUBLE), + +{ u"StrComp", SbxINTEGER, 3 | FUNCTION_, SbRtl_StrComp }, + arg(u"String1", SbxSTRING), + arg(u"String2", SbxSTRING), + arg(u"Compare", SbxINTEGER, OPT_), + +{ u"StrConv", SbxOBJECT, 3 | FUNCTION_, SbRtl_StrConv }, + arg(u"String", SbxSTRING), + arg(u"Conversion", SbxSTRING), + arg(u"LCID", SbxINTEGER, OPT_), + +{ u"String", SbxSTRING, 2 | FUNCTION_, SbRtl_String }, + arg(u"Count", SbxLONG), + arg(u"Filler", SbxVARIANT), + +{ u"StrReverse", SbxSTRING, 1 | FUNCTION_ | COMPATONLY_, SbRtl_StrReverse }, + arg(u"String1", SbxSTRING), + +{ u"Switch", SbxVARIANT, 2 | FUNCTION_, SbRtl_Switch }, + arg(u"Expression", SbxVARIANT), + arg(u"Value", SbxVARIANT), + +{ u"Tab", SbxSTRING, 1 | FUNCTION_, SbRtl_Tab }, + arg(u"Count", SbxLONG), + +{ u"Tan", SbxDOUBLE, 1 | FUNCTION_, SbRtl_Tan }, + arg(u"number", SbxDOUBLE), + +{ u"Time", SbxVARIANT, LFUNCTION_, SbRtl_Time }, +{ u"Timer", SbxDATE, FUNCTION_, SbRtl_Timer }, +{ u"TimeSerial", SbxDATE, 3 | FUNCTION_, SbRtl_TimeSerial }, + arg(u"Hour", SbxLONG), + arg(u"Minute", SbxLONG), + arg(u"Second", SbxLONG), + +{ u"TimeValue", SbxDATE, 1 | FUNCTION_, SbRtl_TimeValue }, + arg(u"String", SbxSTRING), + +{ u"TOGGLE", SbxINTEGER, CPROP_, SbRtl_TOGGLE }, +{ u"Trim", SbxSTRING, 1 | FUNCTION_, SbRtl_Trim }, + arg(u"String", SbxSTRING), + +{ u"True", SbxBOOL, CPROP_, SbRtl_True }, +{ u"TwipsPerPixelX", SbxLONG, FUNCTION_, SbRtl_TwipsPerPixelX }, +{ u"TwipsPerPixelY", SbxLONG, FUNCTION_, SbRtl_TwipsPerPixelY }, + +{ u"TYP_AUTHORFLD", SbxINTEGER, CPROP_, SbRtl_TYP_AUTHORFLD }, +{ u"TYP_CHAPTERFLD", SbxINTEGER, CPROP_, SbRtl_TYP_CHAPTERFLD }, +{ u"TYP_CONDTXTFLD", SbxINTEGER, CPROP_, SbRtl_TYP_CONDTXTFLD }, +{ u"TYP_DATEFLD", SbxINTEGER, CPROP_, SbRtl_TYP_DATEFLD }, +{ u"TYP_DBFLD", SbxINTEGER, CPROP_, SbRtl_TYP_DBFLD }, +{ u"TYP_DBNAMEFLD", SbxINTEGER, CPROP_, SbRtl_TYP_DBNAMEFLD }, +{ u"TYP_DBNEXTSETFLD", SbxINTEGER, CPROP_, SbRtl_TYP_DBNEXTSETFLD }, +{ u"TYP_DBNUMSETFLD", SbxINTEGER, CPROP_, SbRtl_TYP_DBNUMSETFLD }, +{ u"TYP_DBSETNUMBERFLD", SbxINTEGER, CPROP_, SbRtl_TYP_DBSETNUMBERFLD }, +{ u"TYP_DDEFLD", SbxINTEGER, CPROP_, SbRtl_TYP_DDEFLD }, +{ u"TYP_DOCINFOFLD", SbxINTEGER, CPROP_, SbRtl_TYP_DOCINFOFLD }, +{ u"TYP_DOCSTATFLD", SbxINTEGER, CPROP_, SbRtl_TYP_DOCSTATFLD }, +{ u"TYP_EXTUSERFLD", SbxINTEGER, CPROP_, SbRtl_TYP_EXTUSERFLD }, +{ u"TYP_FILENAMEFLD", SbxINTEGER, CPROP_, SbRtl_TYP_FILENAMEFLD }, +{ u"TYP_FIXDATEFLD", SbxINTEGER, CPROP_, SbRtl_TYP_FIXDATEFLD }, +{ u"TYP_FIXTIMEFLD", SbxINTEGER, CPROP_, SbRtl_TYP_FIXTIMEFLD }, +{ u"TYP_FORMELFLD", SbxINTEGER, CPROP_, SbRtl_TYP_FORMELFLD }, +{ u"TYP_GETFLD", SbxINTEGER, CPROP_, SbRtl_TYP_GETFLD }, +{ u"TYP_GETREFFLD", SbxINTEGER, CPROP_, SbRtl_TYP_GETREFFLD }, +{ u"TYP_GETREFPAGEFLD", SbxINTEGER, CPROP_, SbRtl_TYP_GETREFPAGEFLD }, +{ u"TYP_HIDDENPARAFLD", SbxINTEGER, CPROP_, SbRtl_TYP_HIDDENPARAFLD }, +{ u"TYP_HIDDENTXTFLD", SbxINTEGER, CPROP_, SbRtl_TYP_HIDDENTXTFLD }, +{ u"TYP_INPUTFLD", SbxINTEGER, CPROP_, SbRtl_TYP_INPUTFLD }, +{ u"TYP_INTERNETFLD", SbxINTEGER, CPROP_, SbRtl_TYP_INTERNETFLD }, +{ u"TYP_JUMPEDITFLD", SbxINTEGER, CPROP_, SbRtl_TYP_JUMPEDITFLD }, +{ u"TYP_MACROFLD", SbxINTEGER, CPROP_, SbRtl_TYP_MACROFLD }, +{ u"TYP_NEXTPAGEFLD", SbxINTEGER, CPROP_, SbRtl_TYP_NEXTPAGEFLD }, +{ u"TYP_PAGENUMBERFLD", SbxINTEGER, CPROP_, SbRtl_TYP_PAGENUMBERFLD }, +{ u"TYP_POSTITFLD", SbxINTEGER, CPROP_, SbRtl_TYP_POSTITFLD }, +{ u"TYP_PREVPAGEFLD", SbxINTEGER, CPROP_, SbRtl_TYP_PREVPAGEFLD }, +{ u"TYP_SEQFLD", SbxINTEGER, CPROP_, SbRtl_TYP_SEQFLD }, +{ u"TYP_SETFLD", SbxINTEGER, CPROP_, SbRtl_TYP_SETFLD }, +{ u"TYP_SETINPFLD", SbxINTEGER, CPROP_, SbRtl_TYP_SETINPFLD }, +{ u"TYP_SETREFFLD", SbxINTEGER, CPROP_, SbRtl_TYP_SETREFFLD }, +{ u"TYP_SETREFPAGEFLD", SbxINTEGER, CPROP_, SbRtl_TYP_SETREFPAGEFLD }, +{ u"TYP_TEMPLNAMEFLD", SbxINTEGER, CPROP_, SbRtl_TYP_TEMPLNAMEFLD }, +{ u"TYP_TIMEFLD", SbxINTEGER, CPROP_, SbRtl_TYP_TIMEFLD }, +{ u"TYP_USERFLD", SbxINTEGER, CPROP_, SbRtl_TYP_USERFLD }, +{ u"TYP_USRINPFLD", SbxINTEGER, CPROP_, SbRtl_TYP_USRINPFLD }, + +{ u"TypeLen", SbxINTEGER, 1 | FUNCTION_, SbRtl_TypeLen }, + arg(u"Var", SbxVARIANT), + +{ u"TypeName", SbxSTRING, 1 | FUNCTION_, SbRtl_TypeName }, + arg(u"Var", SbxVARIANT), + +{ u"UBound", SbxLONG, 1 | FUNCTION_, SbRtl_UBound }, + arg(u"Var", SbxVARIANT), + +{ u"UCase", SbxSTRING, 1 | FUNCTION_, SbRtl_UCase }, + arg(u"String", SbxSTRING), + +{ u"Unload", SbxNULL, 1 | FUNCTION_, SbRtl_Unload }, + arg(u"Dialog", SbxOBJECT), + +{ u"Val", SbxDOUBLE, 1 | FUNCTION_, SbRtl_Val }, + arg(u"String", SbxSTRING), + +{ u"VarType", SbxINTEGER, 1 | FUNCTION_, SbRtl_VarType }, + arg(u"Var", SbxVARIANT), + +{ u"V_EMPTY", SbxINTEGER, CPROP_, SbRtl_V_EMPTY }, +{ u"V_NULL", SbxINTEGER, CPROP_, SbRtl_V_NULL }, +{ u"V_INTEGER", SbxINTEGER, CPROP_, SbRtl_V_INTEGER }, +{ u"V_LONG", SbxINTEGER, CPROP_, SbRtl_V_LONG }, +{ u"V_SINGLE", SbxINTEGER, CPROP_, SbRtl_V_SINGLE }, +{ u"V_DOUBLE", SbxINTEGER, CPROP_, SbRtl_V_DOUBLE }, +{ u"V_CURRENCY", SbxINTEGER, CPROP_, SbRtl_V_CURRENCY }, +{ u"V_DATE", SbxINTEGER, CPROP_, SbRtl_V_DATE }, +{ u"V_STRING", SbxINTEGER, CPROP_, SbRtl_V_STRING }, + +{ u"Wait", SbxNULL, 1 | FUNCTION_, SbRtl_Wait }, + arg(u"Milliseconds", SbxLONG), + +{ u"FuncCaller", SbxVARIANT, FUNCTION_, SbRtl_FuncCaller }, +//#i64882# +{ u"WaitUntil", SbxNULL, 1 | FUNCTION_, SbRtl_WaitUntil }, + arg(u"Date", SbxDOUBLE), + +{ u"Weekday", SbxINTEGER, 2 | FUNCTION_, SbRtl_Weekday }, + arg(u"Date", SbxDATE), + arg(u"Firstdayofweek", SbxINTEGER, OPT_), + +{ u"WeekdayName", SbxSTRING, 3 | FUNCTION_ | COMPATONLY_, SbRtl_WeekdayName }, + arg(u"Weekday", SbxINTEGER), + arg(u"Abbreviate", SbxBOOL, OPT_), + arg(u"Firstdayofweek", SbxINTEGER, OPT_), + +{ u"Year", SbxINTEGER, 1 | FUNCTION_, SbRtl_Year }, + arg(u"Date", SbxDATE), + +{ {}, SbxNULL, -1, nullptr }}; // end of the table + +static_assert(MethodsTableValid(aMethods)); + +SbiStdObject::SbiStdObject( const OUString& r, StarBASIC* pb ) : SbxObject( r ) +{ // #i92642: Remove default properties Remove( "Name", SbxClassType::DontCare ); Remove( "Parent", SbxClassType::DontCare ); @@ -761,7 +954,7 @@ SbxVariable* SbiStdObject::Find( const OUString& rName, SbxClassType t ) { // else search one sal_uInt16 nHash_ = SbxVariable::MakeHashCode( rName ); - Methods* p = aMethods; + const Method* p = aMethods; bool bFound = false; short nIndex = 0; sal_uInt16 nSrchMask = TYPEMASK_; @@ -776,7 +969,7 @@ SbxVariable* SbiStdObject::Find( const OUString& rName, SbxClassType t ) { if( ( p->nArgs & nSrchMask ) && ( p->nHash == nHash_ ) - && ( rName.equalsIgnoreAsciiCaseAscii( p->pName ) ) ) + && (rName.equalsIgnoreAsciiCase(p->sName))) { bFound = true; if( p->nArgs & COMPTMASK_ ) @@ -810,7 +1003,6 @@ SbxVariable* SbiStdObject::Find( const OUString& rName, SbxClassType t ) short nType = ( p->nArgs & TYPEMASK_ ); if( p->nArgs & CONST_ ) nAccess |= SbxFlagBits::Const; - OUString aName_ = OUString::createFromAscii( p->pName ); SbxClassType eCT = SbxClassType::Object; if( nType & PROPERTY_ ) { @@ -820,7 +1012,7 @@ SbxVariable* SbiStdObject::Find( const OUString& rName, SbxClassType t ) { eCT = SbxClassType::Method; } - pVar = Make( aName_, eCT, p->eType, ( p->nArgs & FUNCTION_ ) == FUNCTION_ ); + pVar = Make(OUString(p->sName), eCT, p->eType, (p->nArgs & FUNCTION_) == FUNCTION_); pVar->SetUserData( nIndex + 1 ); pVar->SetFlags( nAccess ); } @@ -878,19 +1070,18 @@ SbxInfo* SbiStdObject::GetInfo( short nIdx ) { if( !nIdx ) return nullptr; - Methods* p = &aMethods[ --nIdx ]; + const Method* p = &aMethods[ --nIdx ]; SbxInfo* pInfo_ = new SbxInfo; short nPar = p->nArgs & ARGSMASK_; for( short i = 0; i < nPar; i++ ) { p++; - OUString aName_ = OUString::createFromAscii( p->pName ); SbxFlagBits nFlags_ = static_cast<SbxFlagBits>(( p->nArgs >> 8 ) & 0x03); if( p->nArgs & OPT_ ) { nFlags_ |= SbxFlagBits::Optional; } - pInfo_->AddParam( aName_, p->eType, nFlags_ ); + pInfo_->AddParam(OUString(p->sName), p->eType, nFlags_); } return pInfo_; } diff --git a/basic/source/sbx/sbxvar.cxx b/basic/source/sbx/sbxvar.cxx index 8e5b80ef1e08..34ab5bc24a4b 100644 --- a/basic/source/sbx/sbxvar.cxx +++ b/basic/source/sbx/sbxvar.cxx @@ -305,29 +305,6 @@ const OUString& SbxVariable::GetName( SbxNameType t ) const return aToolString; } -// Create a simple hashcode: the first six characters are evaluated. - -sal_uInt16 SbxVariable::MakeHashCode( const OUString& rName ) -{ - sal_uInt16 n = 0; - sal_Int32 nLen = rName.getLength(); - if( nLen > 6 ) - { - nLen = 6; - } - for( sal_Int32 i=0; i<nLen; ++i ) - { - sal_uInt8 c = static_cast<sal_uInt8>(rName[i]); - // If we have a comment sign break!! - if( c >= 0x80 ) - { - return 0; - } - n = sal::static_int_cast< sal_uInt16 >( ( n << 3 ) + rtl::toAsciiUpperCase( c ) ); - } - return n; -} - // Operators SbxVariable& SbxVariable::operator=( const SbxVariable& r ) |