1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
#include "stdafx.h"
#include "SharedReader.h"
#include "Engine.h"
namespace storm {
namespace shared {
namespace win {
PkgReader *reader(Array<Url *> *files, Package *pkg) {
return new (files) SharedReader(files, pkg);
}
}
namespace posix {
PkgReader *reader(Array<Url *> *files, Package *pkg) {
return new (files) SharedReader(files, pkg);
}
}
SharedReader::SharedReader(Array<Url *> *files, Package *pkg) : PkgReader(files, pkg) {
toLoad = null;
}
void SharedReader::readTypes() {
load();
for (Nat i = 0; i < toLoad->count(); i++) {
toLoad->at(i).loadTypes();
toLoad->at(i).loadThreads();
toLoad->at(i).loadTemplates();
toLoad->at(i).loadPackages();
}
}
void SharedReader::resolveTypes() {
load();
for (Nat i = 0; i < toLoad->count(); i++) {
toLoad->at(i).loadSuper();
toLoad->at(i).loadVariables();
}
}
void SharedReader::readFunctions() {
load();
for (Nat i = 0; i < toLoad->count(); i++) {
toLoad->at(i).loadFunctions();
toLoad->at(i).loadMeta();
}
}
void SharedReader::load() {
if (toLoad)
return;
toLoad = new (this) Array<CppLoader>();
for (Nat i = 0; i < files->count(); i++) {
SharedLib *lib = engine().loadShared(files->at(i));
if (lib)
toLoad->push(lib->createLoader(engine(), pkg));
}
}
}
}
|