[pypy-svn] r63146 - pypy/trunk/pypy/module/rctime
afa at codespeak.net
afa at codespeak.net
Fri Mar 20 17:25:19 CET 2009
Author: afa
Date: Fri Mar 20 17:25:17 2009
New Revision: 63146
Modified:
pypy/trunk/pypy/module/rctime/__init__.py
pypy/trunk/pypy/module/rctime/interp_time.py
Log:
Initialize time.timezone &co when pypy-c loads the module,
*not* at translation time.
Modified: pypy/trunk/pypy/module/rctime/__init__.py
==============================================================================
--- pypy/trunk/pypy/module/rctime/__init__.py (original)
+++ pypy/trunk/pypy/module/rctime/__init__.py Fri Mar 20 17:25:17 2009
@@ -1,15 +1,11 @@
from pypy.interpreter.mixedmodule import MixedModule
+import os
class Module(MixedModule):
applevel_name = 'time'
interpleveldefs = {
- 'accept2dyear': 'interp_time.accept2dyear',
- 'timezone': 'interp_time.timezone',
- 'daylight': 'interp_time.daylight',
- 'tzname': 'interp_time.tzname',
- 'altzone': 'interp_time.altzone',
'time': 'interp_time.time',
'clock': 'interp_time.clock',
'ctime': 'interp_time.ctime',
@@ -21,30 +17,20 @@
'sleep' : 'interp_time.sleep',
}
- def buildloaders(cls):
- from pypy.module.rctime import interp_time
- import os
-
- if os.name == "posix":
- Module.interpleveldefs['tzset'] = 'interp_time.tzset'
-
- # this machinery is needed to expose constants
- # that have to be initialized one time only
-
- Module.interpleveldefs["accept2dyear"] = 'space.wrap(%r)' %\
- interp_time._init_accept2dyear()
-
- timezone, daylight, tzname, altzone = interp_time._init_timezone()
- Module.interpleveldefs['timezone'] = 'space.wrap(%r)' % timezone
- Module.interpleveldefs['daylight'] = 'space.wrap(%r)' % daylight
- Module.interpleveldefs['tzname'] = \
- 'space.newtuple([space.wrap(%r), space.wrap(%r)])' % tuple(tzname)
- Module.interpleveldefs['altzone'] = 'space.wrap(%r)' % altzone
- super(Module, cls).buildloaders()
- buildloaders = classmethod(buildloaders)
+ if os.name == "posix":
+ interpleveldefs['tzset'] = 'interp_time.tzset'
appleveldefs = {
'struct_time': 'app_time.struct_time',
'__doc__': 'app_time.__doc__',
'strptime': 'app_time.strptime',
}
+
+ def startup(self, space):
+ # this machinery is needed to expose constants
+ # that have to be initialized one time only
+ from pypy.module.rctime import interp_time
+
+ interp_time._init_timezone(space)
+ interp_time._init_accept2dyear(space)
+
Modified: pypy/trunk/pypy/module/rctime/interp_time.py
==============================================================================
--- pypy/trunk/pypy/module/rctime/interp_time.py (original)
+++ pypy/trunk/pypy/module/rctime/interp_time.py Fri Mar 20 17:25:17 2009
@@ -86,27 +86,34 @@
if _WIN:
win_eci = ExternalCompilationInfo(
includes = ["time.h"],
- separate_module_sources = [ """
- long get_timezone() { return timezone; }
- int get_daylight() { return daylight; }
- char** get_tzname() { return tzname; }
- """
- ],
- export_symbols = ['_tzset', 'get_timezone', 'get_daylight', 'get_tzname'],
+ post_include_bits = ["long pypy_get_timezone();",
+ "int pypy_get_daylight();",
+ "char** pypy_get_tzname();"],
+ separate_module_sources = ["""
+ long pypy_get_timezone() { return timezone; }
+ int pypy_get_daylight() { return daylight; }
+ char** pypy_get_tzname() { return tzname; }
+ """],
+ export_symbols = [
+ '_tzset', 'pypy_get_timezone', 'pypy_get_daylight', 'pypy_get_tzname'],
)
# Ensure sure that we use _tzset() and timezone from the same C Runtime.
c_tzset = external('_tzset', [], lltype.Void, win_eci)
- c_get_timezone = external('get_timezone', [], rffi.LONG, win_eci)
- c_get_daylight = external('get_daylight', [], rffi.INT, win_eci)
- c_get_tzname = external('get_tzname', [], rffi.CCHARPP, win_eci)
+ c_get_timezone = external('pypy_get_timezone', [], rffi.LONG, win_eci)
+ c_get_daylight = external('pypy_get_daylight', [], rffi.INT, win_eci)
+ c_get_tzname = external('pypy_get_tzname', [], rffi.CCHARPP, win_eci)
c_strftime = external('strftime', [rffi.CCHARP, rffi.SIZE_T, rffi.CCHARP, TM_P],
rffi.SIZE_T)
-def _init_accept2dyear():
- return (1, 0)[bool(os.getenv("PYTHONY2K"))]
+def _init_accept2dyear(space):
+ if os.environ.get("PYTHONY2K"):
+ accept2dyear = 0
+ else:
+ accept2dyear = 1
+ _set_module_object(space, "accept2dyear", space.wrap(accept2dyear))
-def _init_timezone():
+def _init_timezone(space):
timezone = daylight = altzone = 0
tzname = ["", ""]
@@ -149,7 +156,11 @@
daylight = int(janzone != julyzone)
tzname = [janname, julyname]
- return timezone, daylight, tzname, altzone
+ _set_module_object(space, "timezone", space.wrap(timezone))
+ _set_module_object(space, 'daylight', space.wrap(daylight))
+ tzname_w = [space.wrap(tzname[0]), space.wrap(tzname[1])]
+ _set_module_object(space, 'tzname', space.newtuple(tzname_w))
+ _set_module_object(space, 'altzone', space.wrap(altzone))
def _get_error_msg():
errno = rposix.get_errno()
@@ -402,12 +413,7 @@
c_tzset()
# reset timezone, altzone, daylight and tzname
- timezone, daylight, tzname, altzone = _init_timezone()
- _set_module_object(space, "timezone", space.wrap(timezone))
- _set_module_object(space, 'daylight', space.wrap(daylight))
- tzname_w = [space.wrap(tzname[0]), space.wrap(tzname[1])]
- _set_module_object(space, 'tzname', space.newtuple(tzname_w))
- _set_module_object(space, 'altzone', space.wrap(altzone))
+ timezone, daylight, tzname, altzone = _init_timezone(space)
tzset.unwrap_spec = [ObjSpace]
def strftime(space, format, w_tup=None):
More information about the Pypy-commit
mailing list