|
1 |
| -// |
| 1 | +// |
2 | 2 | // Copyright (c) .NET Foundation and Contributors
|
3 | 3 | // Portions Copyright (c) Microsoft Corporation. All rights reserved.
|
4 | 4 | // See LICENSE file in the project root for full license information.
|
|
7 | 7 | #include "CorLib.h"
|
8 | 8 | #include <nanoCLR_Interop.h>
|
9 | 9 |
|
| 10 | +///////////////////////////////////////////////////////////////////////// |
| 11 | +// !!! KEEP IN SYNC WITH DateTime._ticksAtOrigin (in managed code) !!! // |
| 12 | +///////////////////////////////////////////////////////////////////////// |
| 13 | +#define TICKS_AT_ORIGIN 504911232000000000 |
| 14 | + |
10 | 15 | ///////////////////////////////////////////////////////////////////////
|
11 | 16 | // !!! KEEP IN SYNC WITH DateTime.DateTimePart (in managed code) !!! //
|
12 | 17 | ///////////////////////////////////////////////////////////////////////
|
@@ -147,60 +152,30 @@ HRESULT Library_corlib_native_System_DateTime::DaysInMonth___STATIC__I4__I4__I4(
|
147 | 152 | NANOCLR_NOCLEANUP();
|
148 | 153 | }
|
149 | 154 |
|
150 |
| -HRESULT Library_corlib_native_System_DateTime::get_UtcNow___STATIC__SystemDateTime(CLR_RT_StackFrame &stack) |
| 155 | +HRESULT Library_corlib_native_System_DateTime::GetUtcNowAsTicks___STATIC__I8(CLR_RT_StackFrame &stack) |
151 | 156 | {
|
152 |
| - NATIVE_PROFILE_CLR_CORE(); |
153 | 157 | NANOCLR_HEADER();
|
154 | 158 |
|
155 |
| - CLR_INT64 *val; |
156 |
| - |
157 |
| - CLR_RT_HeapBlock &ref = stack.PushValue(); |
158 |
| - |
159 |
| - val = Library_corlib_native_System_DateTime::NewObject(ref); |
160 |
| - FAULT_ON_NULL(val); |
161 |
| - |
162 |
| - // load with full date&time |
163 |
| - // including UTC flag |
164 |
| - *val = (CLR_INT64)(HAL_Time_CurrentDateTime(false) | s_UTCMask); |
| 159 | + CLR_INT64 value = HAL_Time_CurrentDateTime(false); |
| 160 | + value += TICKS_AT_ORIGIN; |
| 161 | + stack.SetResult_I8(value); |
165 | 162 |
|
166 |
| - NANOCLR_NOCLEANUP(); |
| 163 | + NANOCLR_NOCLEANUP_NOLABEL(); |
167 | 164 | }
|
168 | 165 |
|
169 |
| -HRESULT Library_corlib_native_System_DateTime::get_Today___STATIC__SystemDateTime(CLR_RT_StackFrame &stack) |
| 166 | +HRESULT Library_corlib_native_System_DateTime::GetTodayAsTicks___STATIC__I8(CLR_RT_StackFrame &stack) |
170 | 167 | {
|
171 |
| - NATIVE_PROFILE_CLR_CORE(); |
172 | 168 | NANOCLR_HEADER();
|
173 | 169 |
|
174 |
| - CLR_RT_HeapBlock &ref = stack.PushValue(); |
175 |
| - |
176 |
| - CLR_INT64 *val = NewObject(ref); |
177 |
| - |
178 |
| - // load with date part only |
179 |
| - // including UTC flag |
180 |
| - *val = (CLR_INT64)(HAL_Time_CurrentDateTime(true) | s_UTCMask); |
| 170 | + CLR_INT64 value = HAL_Time_CurrentDateTime(true); |
| 171 | + value += TICKS_AT_ORIGIN; |
| 172 | + stack.SetResult_I8(value); |
181 | 173 |
|
182 | 174 | NANOCLR_NOCLEANUP_NOLABEL();
|
183 | 175 | }
|
184 | 176 |
|
185 | 177 | //--//
|
186 | 178 |
|
187 |
| -CLR_INT64 *Library_corlib_native_System_DateTime::NewObject(CLR_RT_HeapBlock &ref) |
188 |
| -{ |
189 |
| - NATIVE_PROFILE_CLR_CORE(); |
190 |
| - |
191 |
| - CLR_RT_TypeDescriptor dtType; |
192 |
| - |
193 |
| - // initialize <DateTime> type descriptor |
194 |
| - dtType.InitializeFromType(g_CLR_RT_WellKnownTypes.m_DateTime); |
195 |
| - |
196 |
| - // create an instance of <DateTime> |
197 |
| - g_CLR_RT_ExecutionEngine.NewObject(ref, dtType.m_handlerCls); |
198 |
| - |
199 |
| - return GetValuePtr(ref); |
200 |
| -} |
201 |
| - |
202 |
| -//--// |
203 |
| - |
204 | 179 | CLR_INT64 *Library_corlib_native_System_DateTime::GetValuePtr(CLR_RT_StackFrame &stack)
|
205 | 180 | {
|
206 | 181 | NATIVE_PROFILE_CLR_CORE();
|
|
0 commit comments