view dmd/Global.d @ 170:96c0fff6897d

more global state cleanup
author korDen
date Thu, 30 Sep 2010 14:09:50 +0400
parents e7769d53e750
children d237b38b5858
line wrap: on
line source

module dmd.Global;

import dmd.common;
import dmd.Array;
import dmd.Param;
import dmd.ClassDeclaration;
import dmd.DsymbolTable;
import dmd.StringTable;
import dmd.OutBuffer;
import dmd.Token;
import dmd.Scope;
import dmd.Module;
import dmd.Id;

import dmd.codegen.Util;
import dmd.backend.Classsym;

import core.stdc.time;
import core.stdc.stdio;

class Global
{
    string mars_ext = "d";
    string sym_ext	= "d";
	
version (TARGET_WINDOS) {
    string obj_ext = "obj";
} else version (POSIX) {	// TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS
    string obj_ext = "o";
} else version (TARGET_NET) {
} else {
	static assert (false);
}

version (TARGET_WINDOS) {
    string lib_ext = "lib";
} else version (POSIX) {	// TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS
	string lib_ext = "a";
} else version (TARGET_NET) {
} else {
	static assert (false);
}
    string doc_ext	= "html";	// for Ddoc generated files
    string ddoc_ext	= "ddoc";	// for Ddoc macro include files
    string json_ext = "json";
    string hdr_ext	= "di";	// for D 'header' import files
    string copyright= "Copyright (c) 1999-2009 by Digital Mars";
    string written	= "written by Walter Bright, ported to D by community";
///version (TARGET_NET) {
///    "\nMSIL back-end (alpha release) by Cristian L. Vlasceanu and associates.";
///}
	
    string[] path;	// Array of char*'s which form the import lookup path
    string[] filePath;	// Array of char*'s which form the file import lookup path
    int structalign = 8;
    string version_ = "v2.039";

    Param params;
    uint errors;	// number of errors reported so far
    uint gag;	// !=0 means gag reporting of errors
	
	ClassDeclaration object;
    ClassDeclaration classinfo;
	
	// Used in FuncDeclaration.genCfunc()
	DsymbolTable st;
	
	// Used in Lexer.uniqueId()
	int num;
	
	// Used in Identifier.generateId()
	size_t i;
	
	// Used in Lexer
	StringTable stringtable;
    OutBuffer stringbuffer;
    Token* freelist;
	
	char date[11+1];
	char time[8+1];
	char timestamp[24+1];
	
	// Used in Module
	Module rootModule;
    DsymbolTable modules;	// symbol table of all modules
    Array amodules;		// array of all modules
    Array deferred;	// deferred Dsymbol's needing semantic() run on them
    uint dprogress;	// progress resolving the deferred list
	int nested;
	Classsym* scc;
	ClassDeclaration moduleinfo;
	
	// Used in PowExp
	bool importMathChecked = false;
	
	// Used in Scope
	Scope scope_freelist;
	
	// Used in TemplateMixin
	int nest;
	
	this()
	{
		params.versionids = new Array();
		st = new DsymbolTable();
		stringtable = new StringTable();
		stringbuffer = new OutBuffer();
		
		modules = new DsymbolTable();
		amodules = new Array();
		deferred = new Array();
		
		init_time();
	}
	
	void initClasssym()
	{
		scc = fake_classsym(Id.ClassInfo);
	}
	
	void init_time()
	{
		time_t tm;
		char* p;

		.time(&tm);
		p = ctime(&tm);
		assert(p);
		sprintf(date.ptr, "%.6s %.4s", p + 4, p + 20);
		sprintf(time.ptr, "%.8s", p + 11);
		sprintf(timestamp.ptr, "%.24s", p);
	}
}

Global global;