1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #ifndef _SB_SBMOD_HXX 25 #define _SB_SBMOD_HXX 26 27 #include <com/sun/star/script/XInvocation.hpp> 28 #include <basic/sbdef.hxx> 29 #include <basic/sbxobj.hxx> 30 #include <basic/sbxdef.hxx> 31 #include <rtl/ustring.hxx> 32 #include <vector> 33 34 #include <deque> 35 36 class SbMethod; 37 class SbProperty; 38 class SbiRuntime; 39 typedef std::deque< sal_uInt16 > SbiBreakpoints; 40 class SbiImage; 41 class SbProcedureProperty; 42 class SbIfaceMapperMethod; 43 class SbClassModuleObject; 44 45 class ModuleInitDependencyMap; 46 struct ClassModuleRunInitItem; 47 struct SbClassData; 48 class SbModuleImpl; 49 50 class SbModule : public SbxObject 51 { 52 friend class TestToolObj; // allows module initialisation at runtime 53 friend class SbiCodeGen; 54 friend class SbMethod; 55 friend class SbiRuntime; 56 friend class StarBASIC; 57 friend class SbClassModuleObject; 58 59 SbModuleImpl* mpSbModuleImpl; // Impl data 60 std::vector< String > mModuleVariableNames; 61 62 void implClearIfVarDependsOnDeletedBasic( SbxVariable* pVar, StarBASIC* pDeletedBasic ); 63 64 protected: 65 com::sun::star::uno::Reference< com::sun::star::script::XInvocation > mxWrapper; 66 ::rtl::OUString aOUSource; 67 String aComment; 68 SbiImage* pImage; // the Image 69 SbiBreakpoints* pBreaks; // Breakpoints 70 SbClassData* pClassData; 71 sal_Bool mbVBACompat; 72 sal_Int32 mnType; 73 SbxObjectRef pDocObject; // an impl object ( used by Document Modules ) 74 bool bIsProxyModule; 75 76 static void implProcessModuleRunInit( ModuleInitDependencyMap& rMap, ClassModuleRunInitItem& rItem ); 77 void StartDefinitions(); 78 SbMethod* GetMethod( const String&, SbxDataType ); 79 SbProperty* GetProperty( const String&, SbxDataType ); 80 SbProcedureProperty* GetProcedureProperty( const String&, SbxDataType ); 81 SbIfaceMapperMethod* GetIfaceMapperMethod( const String&, SbMethod* ); 82 void EndDefinitions( sal_Bool=sal_False ); 83 sal_uInt16 Run( SbMethod* ); 84 void RunInit(); 85 void ClearPrivateVars(); 86 void ClearVarsDependingOnDeletedBasic( StarBASIC* pDeletedBasic ); 87 void GlobalRunInit( sal_Bool bBasicStart ); // for all modules 88 void GlobalRunDeInit( void ); 89 const sal_uInt8* FindNextStmnt( const sal_uInt8*, sal_uInt16&, sal_uInt16& ) const; 90 const sal_uInt8* FindNextStmnt( const sal_uInt8*, sal_uInt16&, sal_uInt16&, 91 sal_Bool bFollowJumps, const SbiImage* pImg=NULL ) const; 92 virtual sal_Bool LoadData( SvStream&, sal_uInt16 ); 93 virtual sal_Bool StoreData( SvStream& ) const; 94 virtual sal_Bool LoadCompleted(); 95 virtual void SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType, 96 const SfxHint& rHint, const TypeId& rHintType ); 97 void handleProcedureProperties( SfxBroadcaster& rBC, const SfxHint& rHint ); 98 virtual ~SbModule(); 99 public: 100 SBX_DECL_PERSIST_NODATA(SBXCR_SBX,SBXID_BASICMOD,2); 101 TYPEINFO(); 102 SbModule( const String&, sal_Bool bCompat = sal_False ); 103 virtual void SetParent( SbxObject* ); 104 virtual void Clear(); 105 106 virtual SbxVariable* Find( const String&, SbxClassType ); 107 108 virtual const String& GetSource() const; 109 const ::rtl::OUString& GetSource32() const; 110 const String& GetComment() const { return aComment; } 111 virtual void SetSource( const String& r ); 112 void SetSource32( const ::rtl::OUString& r ); 113 void SetComment( const String& r ); 114 115 virtual sal_Bool Compile(); 116 sal_Bool Disassemble( String& rText ); 117 virtual sal_Bool IsCompiled() const; 118 const SbxObject* FindType( String aTypeName ) const; 119 120 virtual sal_Bool IsBreakable( sal_uInt16 nLine ) const; 121 virtual size_t GetBPCount() const; 122 virtual sal_uInt16 GetBP( size_t n ) const; 123 virtual sal_Bool IsBP( sal_uInt16 nLine ) const; 124 virtual sal_Bool SetBP( sal_uInt16 nLine ); 125 virtual sal_Bool ClearBP( sal_uInt16 nLine ); 126 virtual void ClearAllBP(); 127 128 // Lines of Subs 129 virtual SbMethod* GetFunctionForLine( sal_uInt16 ); 130 131 // Store only image, no source (needed for new password protection) 132 sal_Bool StoreBinaryData( SvStream& ); 133 sal_Bool StoreBinaryData( SvStream&, sal_uInt16 nVer ); 134 sal_Bool LoadBinaryData( SvStream&, sal_uInt16 nVer ); 135 sal_Bool LoadBinaryData( SvStream& ); 136 sal_Bool ExceedsLegacyModuleSize(); 137 void fixUpMethodStart( bool bCvtToLegacy, SbiImage* pImg = NULL ) const; 138 sal_Bool IsVBACompat() const; 139 void SetVBACompat( sal_Bool bCompat ); 140 sal_Int32 GetModuleType() { return mnType; } 141 void SetModuleType( sal_Int32 nType ) { mnType = nType; } 142 bool isProxyModule() { return bIsProxyModule; } 143 void AddVarName( const String& aName ); 144 void RemoveVars(); 145 ::com::sun::star::uno::Reference< ::com::sun::star::script::XInvocation > GetUnoModule(); 146 bool createCOMWrapperForIface( ::com::sun::star::uno::Any& o_rRetAny, SbClassModuleObject* pProxyClassModuleObject ); 147 }; 148 149 #ifndef __SB_SBMODULEREF_HXX 150 #define __SB_SBMODULEREF_HXX 151 152 SV_DECL_IMPL_REF(SbModule) 153 154 #endif 155 156 class SbClassModuleImpl; 157 158 // Object class for instances of class modules 159 class SbClassModuleObject : public SbModule 160 { 161 SbClassModuleImpl* mpSbClassModuleImpl; 162 163 SbModule* mpClassModule; 164 bool mbInitializeEventDone; 165 166 public: 167 TYPEINFO(); 168 SbClassModuleObject( SbModule* pClassModule ); 169 ~SbClassModuleObject(); 170 171 // Overridden to support NameAccess etc. 172 virtual SbxVariable* Find( const String&, SbxClassType ); 173 174 virtual void SFX_NOTIFY( SfxBroadcaster&, const TypeId&, const SfxHint& rHint, const TypeId& ); 175 176 SbModule* getClassModule( void ) 177 { return mpClassModule; } 178 179 void triggerInitializeEvent( void ); 180 void triggerTerminateEvent( void ); 181 }; 182 183 #ifndef __SB_SBCLASSMODULEREF_HXX 184 #define __SB_SBCLASSMODULEREF_HXX 185 186 SV_DECL_IMPL_REF(SbClassModuleObject); 187 188 #endif 189 190 #endif 191