{
if (global.params.verbose)
{
- message ("binary %s", global.params.argv0);
- message ("version %s", global.version);
+ message ("binary %s", global.params.argv0.ptr);
+ message ("version %s", global.version.ptr);
if (global.params.versionids)
{
OutBuffer buf;
json_generate (&buf, &modules);
- const char *name = global.params.jsonfilename;
+ const char *name = global.params.jsonfilename.ptr;
if (name && (name[0] != '-' || name[1] != '\0'))
{
- const char *nameext = FileName::defaultExt (name, global.json_ext);
+ const char *nameext
+ = FileName::defaultExt (name, global.json_ext.ptr);
File *fjson = File::create (nameext);
fjson->setbuffer ((void *) buf.data, buf.offset);
fjson->ref = 1;
-740f3d1eab81d88d11451083d955d5075f60d4e0
+cef1e7991121a22f50e9966ea407805015922bc7
The first line of this file holds the git revision number of the last
merge done from the dlang/dmd repository.
name[se->len] = 0;
if (global.params.verbose)
message("library %s", name);
- if (global.params.moduleDeps && !global.params.moduleDepsFile)
+ if (global.params.moduleDeps && !global.params.moduleDepsFile.length)
{
OutBuffer *ob = global.params.moduleDeps;
Module *imod = sc->instantiatingModule();
// Helper for printing dependency information
void printDepsConditional(Scope *sc, DVCondition* condition, const char* depType)
{
- if (!global.params.moduleDeps || global.params.moduleDepsFile)
+ if (!global.params.moduleDeps || global.params.moduleDepsFile.length)
return;
OutBuffer *ob = global.params.moduleDeps;
Module* imod = sc ? sc->instantiatingModule() : condition->mod;
OutBuffer *ob = global.params.moduleDeps;
Module* imod = sc->instantiatingModule();
- if (!global.params.moduleDepsFile)
+ if (!global.params.moduleDepsFile.length)
ob->writestring("depsImport ");
ob->writestring(imod->toPrettyChars());
ob->writestring(" (");
nameoffset = 0;
namelen = 0;
- srcfilename = FileName::defaultExt(filename, global.mars_ext);
+ srcfilename = FileName::defaultExt(filename, global.mars_ext.ptr);
if (global.run_noext && global.params.run &&
!FileName::ext(filename) &&
FileName::free(srcfilename);
srcfilename = FileName::removeExt(filename); // just does a mem.strdup(filename)
}
- else if (!FileName::equalsExt(srcfilename, global.mars_ext) &&
- !FileName::equalsExt(srcfilename, global.hdr_ext) &&
+ else if (!FileName::equalsExt(srcfilename, global.mars_ext.ptr) &&
+ !FileName::equalsExt(srcfilename, global.hdr_ext.ptr) &&
!FileName::equalsExt(srcfilename, "dd"))
{
error("source file name '%s' must have .%s extension", srcfilename, global.mars_ext);
if (!FileName::absolute(srcfilename))
srcfilePath = getcwd(NULL, 0);
- objfile = setOutfile(global.params.objname, global.params.objdir, filename, global.obj_ext);
+ objfile = setOutfile(global.params.objname.ptr, global.params.objdir.ptr, filename, global.obj_ext.ptr);
if (doDocComment)
setDocfile();
if (doHdrGen)
- hdrfile = setOutfile(global.params.hdrname, global.params.hdrdir, arg, global.hdr_ext);
+ hdrfile = setOutfile(global.params.hdrname.ptr, global.params.hdrdir.ptr, arg, global.hdr_ext.ptr);
//objfile = new File(objfilename);
}
void Module::setDocfile()
{
- docfile = setOutfile(global.params.docname, global.params.docdir, arg, global.doc_ext);
+ docfile = setOutfile(global.params.docname.ptr, global.params.docdir.ptr, arg, global.doc_ext.ptr);
}
/*********************************************
{
::error(loc, "cannot find source code for runtime library file 'object.d'");
errorSupplemental(loc, "dmd might not be correctly installed. Run 'dmd -man' for installation instructions.");
- const char *dmdConfFile = global.inifilename ? FileName::canonicalName(global.inifilename) : NULL;
+ const char *dmdConfFile = global.inifilename.length ? FileName::canonicalName(global.inifilename.ptr) : NULL;
errorSupplemental(loc, "config file: %s", dmdConfFile ? dmdConfFile : "not found");
}
else
*/
*path = NULL;
- const char *sdi = FileName::forceExt(filename, global.hdr_ext);
+ const char *sdi = FileName::forceExt(filename, global.hdr_ext.ptr);
if (FileName::exists(sdi) == 1)
return sdi;
- const char *sd = FileName::forceExt(filename, global.mars_ext);
+ const char *sd = FileName::forceExt(filename, global.mars_ext.ptr);
if (FileName::exists(sd) == 1)
return sd;
OutBuffer *ob = global.params.moduleDeps;
Module* imod = sc->instantiatingModule();
- if (!global.params.moduleDepsFile)
+ if (!global.params.moduleDepsFile.length)
ob->writestring("depsFile ");
ob->writestring(imod->toPrettyChars());
ob->writestring(" (");
escapePath(ob, imod->srcfile->toChars());
ob->writestring(") : ");
- if (global.params.moduleDepsFile)
+ if (global.params.moduleDepsFile.length)
ob->writestring("string : ");
ob->writestring((char *) se->string);
ob->writestring(" (");
CHECKACTION checkAction; // action to take when bounds, asserts or switch defaults are violated
- const char *argv0; // program name
+ DString argv0; // program name
Array<const char *> *modFileAliasStrings; // array of char*'s of -I module filename alias strings
Array<const char *> *imppath; // array of char*'s of where to look for import modules
Array<const char *> *fileImppath; // array of char*'s of where to look for file import modules
- const char *objdir; // .obj/.lib file output directory
- const char *objname; // .obj file output name
- const char *libname; // .lib file output name
+ DString objdir; // .obj/.lib file output directory
+ DString objname; // .obj file output name
+ DString libname; // .lib file output name
bool doDocComments; // process embedded documentation comments
- const char *docdir; // write documentation file to docdir directory
- const char *docname; // write documentation file to docname
+ DString docdir; // write documentation file to docdir directory
+ DString docname; // write documentation file to docname
Array<const char *> *ddocfiles; // macro include files for Ddoc
bool doHdrGeneration; // process embedded documentation comments
- const char *hdrdir; // write 'header' file to docdir directory
- const char *hdrname; // write 'header' file to docname
+ DString hdrdir; // write 'header' file to docdir directory
+ DString hdrname; // write 'header' file to docname
bool hdrStripPlainFunctions; // strip the bodies of plain (non-template) functions
bool doJsonGeneration; // write JSON file
- const char *jsonfilename; // write JSON file to jsonfilename
+ DString jsonfilename; // write JSON file to jsonfilename
unsigned debuglevel; // debug level
Array<const char *> *debugids; // debug identifiers
unsigned versionlevel; // version level
Array<const char *> *versionids; // version identifiers
- const char *defaultlibname; // default library for non-debug builds
- const char *debuglibname; // default library for debug builds
- const char *mscrtlib; // MS C runtime library
+ DString defaultlibname; // default library for non-debug builds
+ DString debuglibname; // default library for debug builds
+ DString mscrtlib; // MS C runtime library
- const char *moduleDepsFile; // filename for deps output
+ DString moduleDepsFile; // filename for deps output
OutBuffer *moduleDeps; // contents to be written to deps file
// Hidden debug switches
Array<const char *> *linkswitches;
Array<const char *> *libfiles;
Array<const char *> *dllfiles;
- const char *deffile;
- const char *resfile;
- const char *exefile;
- const char *mapfile;
+ DString deffile;
+ DString resfile;
+ DString exefile;
+ DString mapfile;
};
typedef unsigned structalign_t;
struct Global
{
- const char *inifilename;
- const char *mars_ext;
- const char *obj_ext;
- const char *lib_ext;
- const char *dll_ext;
- const char *doc_ext; // for Ddoc generated files
- const char *ddoc_ext; // for Ddoc macro include files
- const char *hdr_ext; // for D 'header' import files
- const char *json_ext; // for JSON files
- const char *map_ext; // for .map files
+ DString inifilename;
+ DString mars_ext;
+ DString obj_ext;
+ DString lib_ext;
+ DString dll_ext;
+ DString doc_ext; // for Ddoc generated files
+ DString ddoc_ext; // for Ddoc macro include files
+ DString hdr_ext; // for D 'header' import files
+ DString cxxhdr_ext; // for C/C++ 'header' files
+ DString json_ext; // for JSON files
+ DString map_ext; // for .map files
bool run_noext; // allow -run sources without extensions.
- const char *copyright;
- const char *written;
+ DString copyright;
+ DString written;
const char *main_d; // dummy filename for dummy main()
Array<const char *> *path; // Array of char*'s which form the import lookup path
Array<const char *> *filePath; // Array of char*'s which form the file import lookup path
- const char *version; // Compiler version string
- const char *vendor; // Compiler backend name
+ DString version; // Compiler version string
+ DString vendor; // Compiler backend name
Param params;
unsigned errors; // number of errors reported so far
}
else if (id == Id::VENDOR)
{
- t->ustring = (utf8_t *)const_cast<char *>(global.vendor);
+ t->ustring = (utf8_t *)const_cast<char *>(global.vendor.ptr);
goto Lstr;
}
else if (id == Id::TIMESTAMP)
unsigned minor = 0;
bool point = false;
- for (const char *p = global.version + 1; 1; p++)
+ for (const char *p = global.version.ptr + 1; 1; p++)
{
c = *p;
if (isdigit((utf8_t)c))
{
size_t length;
T *ptr;
+
+ DArray() : length(0), ptr(NULL) { }
+
+ DArray(size_t length_in, T *ptr_in)
+ : length(length_in), ptr(ptr_in) { }
+};
+
+struct DString : public DArray<const char>
+{
+ DString() : DArray<const char>() { }
+
+ DString(const char *ptr)
+ : DArray<const char>(ptr ? strlen(ptr) : 0, ptr) { }
+
+ DString(size_t length, const char *ptr)
+ : DArray<const char>(length, ptr) { }
};
/// Corresponding C++ type that maps to D size_t