示例#1
0
Package* Package::loadPackage(const char *name, EmojicodeChar ns, const Token *errorToken) {
    Package *package = findPackage(name);
    
    if (package) {
        if (!package->finishedLoading()) {
            compilerError(errorToken, "Circular dependency detected: %s tried to load a package which intiatiated %s’s own loading.", name, name);
        }
    }
    else {
        char *path;
        asprintf(&path, packageDirectory "%s/header.emojic", name);
        
        package = new Package(name);
        
        if (strcmp("s", name) != 0) {
            package->loadPackage("s", globalNamespace, errorToken);
        }
        package->parse(path, errorToken);
    }
    
    package->loadInto(this, ns, errorToken);
    return package;
}