Mercurial > projects > ldc
view tango/lib/common/tango/core/Runtime.d @ 237:a168a2c3ea48 trunk
[svn r253] Removed -inlineasm option. inline asm is now enabled by default unless the new -noasm option is passed.
Tried adding a stack trace print when compiler crashes, not sure it's working though.
Changed data layouts to match that of llvm-gcc.
Fixed casting function pointers.
Added support checks in AsmStatement.
author | lindquist |
---|---|
date | Sun, 08 Jun 2008 19:09:24 +0200 |
parents | 1700239cab2e |
children |
line wrap: on
line source
/** * The runtime module exposes information specific to the D runtime code. * * Copyright: Copyright (C) 2005-2006 Sean Kelly. All rights reserved. * License: BSD style: $(LICENSE) * Authors: Sean Kelly */ module tango.core.Runtime; private { extern (C) bool rt_isHalting(); alias bool function() moduleUnitTesterType; } //////////////////////////////////////////////////////////////////////////////// // Runtime //////////////////////////////////////////////////////////////////////////////// /** * This struct encapsulates all functionality related to the underlying runtime * module for the calling context. */ struct Runtime { /** * Returns true if the runtime is halting. Under normal circumstances, * this will be set between the time that normal application code has * exited and before module dtors are called. * * Returns: * true if the runtime is halting. */ static bool isHalting() { return rt_isHalting(); } /** * Overrides the default module unit tester with a user-supplied version. * * Params: * h = The new unit tester. Set to null to use the default unit tester. */ static void moduleUnitTester( moduleUnitTesterType h ) { sm_moduleUnitTester = h; } private: static moduleUnitTesterType sm_moduleUnitTester = null; } //////////////////////////////////////////////////////////////////////////////// // Overridable Callbacks //////////////////////////////////////////////////////////////////////////////// /** * This routine is called by the runtime to run module unit tests on startup. * The user-supplied unit tester will be called if one has been supplied, * otherwise all unit tests will be run in sequence. * * Returns: * true if execution should continue after testing is complete and false if * not. Default behavior is to return true. */ extern (C) bool runModuleUnitTests() { if( Runtime.sm_moduleUnitTester is null ) { foreach( m; ModuleInfo ) { if( m.unitTest ) m.unitTest(); } return true; } return Runtime.sm_moduleUnitTester(); }