2010-10-12 15:53:47 +02:00
|
|
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2012-07-17 12:30:48 +01:00
|
|
|
/*
|
|
|
|
* 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 .
|
|
|
|
*/
|
2000-09-18 15:18:56 +00:00
|
|
|
|
2006-09-17 09:03:16 +00:00
|
|
|
|
2007-06-27 13:20:58 +00:00
|
|
|
#include <basic/sbx.hxx>
|
2015-05-17 10:08:59 +02:00
|
|
|
#include "parser.hxx"
|
2000-09-18 15:18:56 +00:00
|
|
|
#include "image.hxx"
|
2013-12-11 10:39:57 +02:00
|
|
|
#include "sbobjmod.hxx"
|
GSOC work week 2, getting infromation from variables and print on terminal
This is an early version. I use the BASIC parser to parse the source,
then the infromation is extracted from the symbol table built by parser.
Error reporting is suppressed, beacuse it is not needed fro code completition.
I placed my function inside SbModule, and created a struct called CodeCompletitionData, which holds the object's name, it's parent, and it's type name.
This function, SbMethod::GetCodeCompleteDataFromParse() is called from Basic IDE's Notify function, which updates a cache(actually, reassigns a viariable :) ).
Later, in the EditorWindow::KeyInput function there is a check wheteher dot key is pressed. After that, the actual variable (or word) is being looked up in the vector that holds code completition data. And finally, if it is found, it's methods are printed on the terminal.
Change-Id: Idaf19baa8f720b8b117a76dc3cc2f90dd04fd155
2013-06-21 14:10:31 +02:00
|
|
|
#include <svtools/miscopt.hxx>
|
2011-03-30 13:17:45 +02:00
|
|
|
#include <stdio.h>
|
2015-01-25 13:58:08 +01:00
|
|
|
#include <rtl/character.hxx>
|
2015-09-17 17:10:47 +01:00
|
|
|
#include <memory>
|
2000-09-18 15:18:56 +00:00
|
|
|
|
2011-08-27 21:37:14 +02:00
|
|
|
// This routine is defined here, so that the
|
|
|
|
// compiler can be loaded as a discrete segment.
|
2000-09-18 15:18:56 +00:00
|
|
|
|
2014-03-26 11:18:51 +02:00
|
|
|
bool SbModule::Compile()
|
2000-09-18 15:18:56 +00:00
|
|
|
{
|
|
|
|
if( pImage )
|
2014-03-26 11:18:51 +02:00
|
|
|
return true;
|
2015-09-28 11:42:43 +02:00
|
|
|
StarBASIC* pBasic = dynamic_cast<StarBASIC*>( GetParent() );
|
2000-09-18 15:18:56 +00:00
|
|
|
if( !pBasic )
|
2014-03-26 11:18:51 +02:00
|
|
|
return false;
|
2000-09-18 15:18:56 +00:00
|
|
|
SbxBase::ResetError();
|
2011-08-27 21:37:14 +02:00
|
|
|
|
2012-01-15 16:15:08 +01:00
|
|
|
SbModule* pOld = GetSbData()->pCompMod;
|
|
|
|
GetSbData()->pCompMod = this;
|
2000-09-18 15:18:56 +00:00
|
|
|
|
2015-09-17 17:10:47 +01:00
|
|
|
std::unique_ptr<SbiParser> pParser(new SbiParser( static_cast<StarBASIC*>(GetParent()), this ));
|
2000-09-18 15:18:56 +00:00
|
|
|
while( pParser->Parse() ) {}
|
|
|
|
if( !pParser->GetErrors() )
|
|
|
|
pParser->aGen.Save();
|
2014-05-29 09:27:30 +09:00
|
|
|
pParser.reset();
|
2011-08-27 21:37:14 +02:00
|
|
|
// for the disassembler
|
2000-09-18 15:18:56 +00:00
|
|
|
if( pImage )
|
2003-04-23 15:56:59 +00:00
|
|
|
pImage->aOUSource = aOUSource;
|
2000-09-18 15:18:56 +00:00
|
|
|
|
2012-01-15 16:15:08 +01:00
|
|
|
GetSbData()->pCompMod = pOld;
|
2000-09-18 15:18:56 +00:00
|
|
|
|
2011-08-27 21:37:14 +02:00
|
|
|
// compiling a module, the module-global
|
|
|
|
// variables of all modules become invalid
|
2014-03-26 11:18:51 +02:00
|
|
|
bool bRet = IsCompiled();
|
2000-09-18 15:18:56 +00:00
|
|
|
if( bRet )
|
|
|
|
{
|
2015-11-10 10:10:36 +01:00
|
|
|
if( nullptr == dynamic_cast<const SbObjModule*>( this) )
|
2010-09-15 08:45:40 +02:00
|
|
|
pBasic->ClearAllModuleVars();
|
2010-07-05 13:58:36 +02:00
|
|
|
RemoveVars(); // remove 'this' Modules variables
|
2008-07-02 08:58:48 +00:00
|
|
|
// clear all method statics
|
2011-01-10 14:40:57 +01:00
|
|
|
for( sal_uInt16 i = 0; i < pMethods->Count(); i++ )
|
2008-07-02 08:58:48 +00:00
|
|
|
{
|
2015-09-28 11:42:43 +02:00
|
|
|
SbMethod* p = dynamic_cast<SbMethod*>( pMethods->Get( i ) );
|
2008-07-02 08:58:48 +00:00
|
|
|
if( p )
|
|
|
|
p->ClearStatics();
|
|
|
|
}
|
2000-09-18 15:18:56 +00:00
|
|
|
|
2005-01-13 17:47:36 +00:00
|
|
|
// #i31510 Init other libs only if Basic isn't running
|
2015-11-10 10:10:36 +01:00
|
|
|
if( GetSbData()->pInst == nullptr )
|
2005-01-13 17:47:36 +00:00
|
|
|
{
|
2006-06-19 16:42:54 +00:00
|
|
|
SbxObject* pParent_ = pBasic->GetParent();
|
|
|
|
if( pParent_ )
|
2015-09-28 11:42:43 +02:00
|
|
|
pBasic = dynamic_cast<StarBASIC*>( pParent_ );
|
2005-01-13 17:47:36 +00:00
|
|
|
if( pBasic )
|
|
|
|
pBasic->ClearAllModuleVars();
|
|
|
|
}
|
2000-09-18 15:18:56 +00:00
|
|
|
}
|
2003-03-18 15:28:40 +00:00
|
|
|
|
2000-09-18 15:18:56 +00:00
|
|
|
return bRet;
|
|
|
|
}
|
2010-10-12 15:53:47 +02:00
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|