summaryrefslogtreecommitdiff
path: root/cpp/src/FreezeScript/Util.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/FreezeScript/Util.cpp')
-rw-r--r--cpp/src/FreezeScript/Util.cpp308
1 files changed, 0 insertions, 308 deletions
diff --git a/cpp/src/FreezeScript/Util.cpp b/cpp/src/FreezeScript/Util.cpp
deleted file mode 100644
index 941b9cf9b76..00000000000
--- a/cpp/src/FreezeScript/Util.cpp
+++ /dev/null
@@ -1,308 +0,0 @@
-// **********************************************************************
-//
-// Copyright (c) 2003-2015 ZeroC, Inc. All rights reserved.
-//
-// This copy of Ice is licensed to you under the terms described in the
-// ICE_LICENSE file included in this distribution.
-//
-// **********************************************************************
-
-#include <FreezeScript/Util.h>
-#include <FreezeScript/Exception.h>
-#include <Freeze/Catalog.h>
-#include <Freeze/Connection.h>
-#include <Freeze/Initialize.h>
-#include <Slice/Preprocessor.h>
-#include <db_cxx.h>
-#include <sys/stat.h>
-
-using namespace std;
-using namespace Slice;
-
-string
-FreezeScript::typeToString(const TypePtr& type)
-{
- BuiltinPtr b = BuiltinPtr::dynamicCast(type);
- ContainedPtr c = ContainedPtr::dynamicCast(type);
- if(b)
- {
- return b->kindAsString();
- }
- else if(c)
- {
- return c->scoped();
- }
- else
- {
- ProxyPtr p = ProxyPtr::dynamicCast(type);
- assert(p);
- return p->_class()->scoped() + "*";
- }
-}
-
-bool
-FreezeScript::ignoreType(const string& type)
-{
- //
- // Suppress descriptors for the following pre-defined types. Must be kept in ascending alphabetical order.
- //
- static const string ignoreTypeList[] =
- {
- "::Freeze::ObjectRecord",
- "::Freeze::Statistics",
- "::Ice::Identity"
- };
-
- return binary_search(&ignoreTypeList[0], &ignoreTypeList[sizeof(ignoreTypeList) / sizeof(*ignoreTypeList)], type);
-}
-
-void
-FreezeScript::createEvictorSliceTypes(const Slice::UnitPtr& u)
-{
- Slice::TypeList l;
- Slice::ContainedList c;
-
- //
- // Create the Ice module if necessary.
- //
- c = u->lookupContained("Ice", false);
- Slice::ModulePtr ice;
- if(c.empty())
- {
- ice = u->createModule("Ice");
- }
- else
- {
- ice = Slice::ModulePtr::dynamicCast(c.front());
- if(!ice)
- {
- throw FailureException(__FILE__, __LINE__, "the symbol `::Ice' is defined in Slice but is not a module");
- }
- }
-
- //
- // Create the Slice definition for Ice::Identity if it doesn't exist.
- //
- string scoped = "::Ice::Identity";
- l = u->lookupTypeNoBuiltin(scoped, false);
- Slice::StructPtr identity;
- if(l.empty())
- {
- identity = ice->createStruct("Identity", false);
- Slice::TypePtr str = u->builtin(Slice::Builtin::KindString);
- identity->createDataMember("name", str, false, 0, 0, "", "");
- identity->createDataMember("category", str, false, 0, 0, "", "");
- }
- else
- {
- identity = Slice::StructPtr::dynamicCast(l.front());
- if(!identity)
- {
- throw FailureException(__FILE__, __LINE__,
- "the symbol `::Ice::Identity' is defined in Slice but is not a struct");
- }
- }
-
- //
- // Create the Freeze module if necessary.
- //
- c = u->lookupContained("Freeze", false);
- Slice::ModulePtr freeze;
- if(c.empty())
- {
- freeze = u->createModule("Freeze");
- }
- else
- {
- freeze = Slice::ModulePtr::dynamicCast(c.front());
- if(!freeze)
- {
- throw FailureException(__FILE__, __LINE__,
- "the symbol `::Freeze' is defined in Slice but is not a module");
- }
- }
-
- //
- // Create the Slice definition for Freeze::Statistics if it doesn't exist.
- //
- scoped = "::Freeze::Statistics";
- l = u->lookupTypeNoBuiltin(scoped, false);
- Slice::StructPtr stats;
- if(l.empty())
- {
- stats = freeze->createStruct("Statistics", false);
- Slice::TypePtr tl = u->builtin(Slice::Builtin::KindLong);
- stats->createDataMember("creationTime", tl, false, 0, 0, "", "");
- stats->createDataMember("lastSaveTime", tl, false, 0, 0, "", "");
- stats->createDataMember("avgSaveTime", tl, false, 0, 0, "", "");
- }
- else
- {
- stats = Slice::StructPtr::dynamicCast(l.front());
- if(!stats)
- {
- throw FailureException(__FILE__, __LINE__, "the symbol `::Freeze::Statistics' is defined in "
- "Slice but is not a struct");
- }
- }
-
- //
- // Create the Slice definition for Freeze::ObjectRecord if it doesn't exist.
- //
- scoped = "::Freeze::ObjectRecord";
- l = u->lookupTypeNoBuiltin(scoped, false);
- if(l.empty())
- {
- Slice::StructPtr rec = freeze->createStruct("ObjectRecord", false);
- Slice::TypePtr obj = u->builtin(Slice::Builtin::KindObject);
- rec->createDataMember("servant", obj, false, 0, 0, "", "");
- rec->createDataMember("stats", stats, false, 0, 0, "", "");
- }
- else
- {
- if(!Slice::StructPtr::dynamicCast(l.front()))
- {
- throw FailureException(__FILE__, __LINE__, "the symbol `::Freeze::ObjectRecord' is defined in "
- "Slice but is not a struct");
- }
- }
-}
-
-bool
-FreezeScript::parseSlice(const string& n, const Slice::UnitPtr& u, const vector<string>& files,
- const vector<string>& cppArgs, bool debug, const std::string& extraArgs)
-{
- //
- // Parse the Slice files.
- //
- for(vector<string>::const_iterator p = files.begin(); p != files.end(); ++p)
- {
- PreprocessorPtr icecpp = Preprocessor::create(n, *p, cppArgs);
-
- FILE* cppHandle = icecpp->preprocess(false, extraArgs);
-
- if(cppHandle == 0)
- {
- return false;
- }
-
- int status = u->parse(*p, cppHandle, debug);
-
- if(!icecpp->close())
- {
- return false;
- }
-
- if(status != EXIT_SUCCESS)
- {
- return false;
- }
- }
-
- u->mergeModules();
-
- return true;
-}
-
-FreezeScript::CatalogDataMap
-FreezeScript::readCatalog(const Ice::CommunicatorPtr& communicator, const string& dbEnvName)
-{
- CatalogDataMap result;
-
- DbEnv dbEnv(0);
- try
- {
-#ifdef _WIN32
- //
- // Berkeley DB may use a different C++ runtime.
- //
- dbEnv.set_alloc(::malloc, ::realloc, ::free);
-#endif
-
- //
- // Open the database environment.
- //
- {
- u_int32_t flags = DB_THREAD | DB_CREATE | DB_INIT_TXN | DB_INIT_MPOOL;
- dbEnv.open(dbEnvName.c_str(), flags, 0);
- }
-
- Freeze::ConnectionPtr connection = Freeze::createConnection(communicator, dbEnvName, dbEnv);
- Freeze::Catalog catalog(connection, Freeze::catalogName());
- for(Freeze::Catalog::const_iterator p = catalog.begin(); p != catalog.end(); ++p)
- {
- result.insert(make_pair(p->first, p->second));
- }
- }
- catch(const DbException& ex)
- {
- dbEnv.close(0);
- throw FailureException(__FILE__, __LINE__, string("database error: ") + ex.what());
- }
- catch(const IceUtil::FileLockException&)
- {
- dbEnv.close(0);
- throw FailureException(__FILE__, __LINE__, "environment `" + dbEnvName + "' is locked");
- }
- catch(...)
- {
- dbEnv.close(0);
- throw;
- }
-
- dbEnv.close(0);
-
- return result;
-}
-
-string
-FreezeScript::CompactIdResolverI::resolve(Ice::Int id) const
-{
- string type;
- map<Ice::Int, string>::const_iterator p = _ids.find(id);
- if(p != _ids.end())
- {
- type = p->second;
- }
- return type;
-}
-
-void
-FreezeScript::CompactIdResolverI::add(Ice::Int id, const string& type)
-{
-#ifndef NDEBUG
- map<Ice::Int, string>::const_iterator p = _ids.find(id);
-#else
- _ids.find(id);
-#endif
- assert(p == _ids.end());
-
- _ids[id] = type;
-}
-
-void
-FreezeScript::collectCompactIds(const UnitPtr& unit, const FreezeScript::CompactIdResolverIPtr& r)
-{
- class Visitor : public ParserVisitor
- {
- public:
-
- Visitor(const FreezeScript::CompactIdResolverIPtr& resolver) : _r(resolver)
- {
- }
-
- virtual bool visitClassDefStart(const ClassDefPtr& p)
- {
- if(p->compactId() != -1)
- {
- _r->add(p->compactId(), p->scoped());
- }
- return true;
- }
-
- FreezeScript::CompactIdResolverIPtr _r;
- };
-
- Visitor v(r);
- unit->visit(&v, false);
-}