view dmd/Global.d @ 173:d237b38b5858

Small changes
author korDen
date Sun, 10 Oct 2010 01:55:35 +0400
parents 96c0fff6897d
children af724d3510d7
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();
		params.imppath = 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);
	}
}

__gshared Global global;