Commit Graph

1126 Commits

Author SHA1 Message Date
pierre
c881aae7e9 * fix for bug0216 1999-02-15 13:13:15 +00:00
pierre
520da0fc92 * pred/succ with overflow check must use ADD DEC !! 1999-02-15 11:40:21 +00:00
pierre
0e9f344ef6 * memory leaks removed 1999-02-15 11:30:39 +00:00
florian
45da1362e4 * internal error 10 with ansistrings fixed 1999-02-12 10:43:56 +00:00
pierre
f59803f7d2 * fix for normal method calls inside static methods :
WARNING there were both parser and codegen errors !!
    added static_call boolean to calln tree
1999-02-11 09:46:21 +00:00
pierre
88605549b8 * ExtDebug conditionnal infinite loop on temp problem removed 1999-02-11 09:35:19 +00:00
florian
b876c29e62 * check for duplicate field names in inherited classes/objects
* bug with self from the mailing list solved (the problem
    was that classes were sometimes pushed wrong)
1999-02-09 23:03:08 +00:00
florian
1b5fda2764 * some false warnings "function result doesn't seems to be set" are
avoided
1999-02-09 17:15:52 +00:00
florian
b73b83a01b + complex results for assembler functions, fixes bug0155 1999-02-09 15:45:46 +00:00
pierre
85e61ae63b * fix for bug0214
several problems where combined
   search_class_member did not set srsymtable
   => in do_member_read the call node got a wrong symtable
   in cg386cal the vmt was pushed twice without chacking if it exists
   now %esi is set to zero and pushed if not vmt
   (not very efficient but should work !)
1999-02-08 11:29:04 +00:00
pierre
800af168b0 * gdb info for local functions was wrong 1999-02-08 09:51:21 +00:00
florian
af2262f9d7 * potential bug in secondvecn fixed 1999-02-07 22:53:07 +00:00
michael
1865f22466 + Fixed gluing of options 1999-02-05 16:45:47 +00:00
florian
d17abfd1ad + openstring id is now supported 1999-02-05 12:51:21 +00:00
florian
9bcf29803e * in some cases a writeln of temp. ansistrings cause a memory leak, fixed 1999-02-05 10:56:19 +00:00
pierre
9709b802ba + linkofiles splitted inot linkofiles and linkunitfiles
because linkofiles must be stored with directory
    to enabled linking of different objects with same name
    in a different directory
1999-02-05 08:54:24 +00:00
pierre
92ce0fb888 * $L default extension from resext to objext 1999-02-05 08:51:16 +00:00
peter
abbd27e3df * fixed crash with temp ansistring indexing 1999-02-04 17:16:51 +00:00
florian
0d65d4126f * fixed indexed access of ansistrings to temp. ansistring, i.e.
c:=(s1+s2)[i], the temp is now correctly remove and the generated
    code is also fixed
1999-02-04 11:44:46 +00:00
florian
9b3fd7f5b6 + range checking for ansi- and widestrings
* made it compilable with TP
1999-02-04 10:49:39 +00:00
pierre
2952458f80 + added objects and records symbol tables 1999-02-04 09:31:59 +00:00
pierre
b186605bc4 * conditionnal code for extended check of virtual methods 1999-02-03 10:18:14 +00:00
pierre
c18fdf95f3 * fix for bug0211 for i386 1999-02-03 10:11:11 +00:00
pierre
dae387cd49 * symbol nubering begins with 1 in number_symbols
* program tmodule has globalsymtable for its staticsymtable
    (to get it displayed in IDE globals list)
  + list of symbol (browcol) greatly improved for IDE
1999-02-03 09:44:32 +00:00
florian
2ac877d04f * problem with calls to method pointers in methods fixed
- double ansistrings temp management removed
1999-02-02 23:52:32 +00:00
peter
71107624d2 * reset c,pattern,orgpattern also at startup 1999-02-02 16:39:41 +00:00
peter
c0229c3f4d * no endless loop with localst=staticsymtable 1999-02-02 16:38:38 +00:00
florian
039eeee40d * ltemptoremove handling corrected 1999-02-02 12:35:02 +00:00
peter
9159e69b07 * fixed ansi2short 1999-02-02 11:47:55 +00:00
florian
491c20797c * class destructors fixed, class instances weren't disposed correctly 1999-02-02 11:04:36 +00:00
florian
1941182a11 + c styled comments 1999-02-02 00:15:09 +00:00
florian
4ec3402851 * compiler crash fixed when constant arguments passed to round/trunc
exceeds the longint range
1999-02-01 00:00:50 +00:00
pierre
bd13b83a00 readme 1999-01-29 11:39:45 +00:00
pierre
19f6b92bc0 + better info for impossible type conversion in calln 1999-01-29 11:34:50 +00:00
pierre
8f5a141f9b * incompatible size warning or error suppressed for sizes > 4 1999-01-29 11:24:02 +00:00
pierre
d9ee9a43c3 * saving and restoring old ltemptoremove 1999-01-29 11:22:13 +00:00
peter
3db62868d8 * objectsearchpath is now also searched if an object is not found 1999-01-29 10:33:07 +00:00
florian
02b4722695 * the reference in the result location of a function call wasn't resetted =>
problem with unallowed far pointer, is solved now
1999-01-28 23:56:44 +00:00
peter
92a42e35dc * removed warning 1999-01-28 19:50:15 +00:00
peter
cc14343c7b * fixed high generation for ansistrings with str,writeln 1999-01-28 19:43:43 +00:00
peter
b49c75e37b * mssing endif added 1999-01-28 19:42:03 +00:00
pierre
9cd2a98429 * error adds for bug0175 1999-01-28 14:33:26 +00:00
pierre
094fde4f06 * bug0175 solved give error on $R+ and warning otherwise 1999-01-28 14:12:59 +00:00
florian
3134c9352e * small fix for method pointers
* found the annoying strpas bug, mainly nested call to type cast which
    use ansistrings crash
1999-01-28 14:06:45 +00:00
pierre
4aba3f4ee5 * bug0157 solved : write(x:5.3) is rejected now 1999-01-27 16:28:22 +00:00
pierre
633f56fb4e * typo error corrected solves bug0190 and bug0204 1999-01-27 14:56:56 +00:00
pierre
c24fa14e89 * bug0209 corrected (introduce while solving other bool to int related bugs) 1999-01-27 14:15:25 +00:00
pierre
c3080c078e htypechk.pas 1999-01-27 13:53:27 +00:00
pierre
dfc4adb603 * dos end of line problem 1999-01-27 13:51:44 +00:00
pierre
1623b4fcfe * slightly rewritten code 1999-01-27 13:20:37 +00:00
pierre
36ddf5811b * bool to int must be explicit 1999-01-27 13:12:10 +00:00
pierre
7885677f56 * problem related with libc : go32v2 and linux differences 1999-01-27 13:07:58 +00:00
pierre
714da479ee * memory leak in case optimization fixed 1999-01-27 13:06:57 +00:00
pierre
f7732dfcee * give include file name on error 1999-01-27 13:05:41 +00:00
pierre
b285b17fed * bug with static vars in assembler readers 1999-01-27 13:04:11 +00:00
pierre
04b19b1d77 boolean to int conversion problems bug0205 bug0208 1999-01-27 13:02:21 +00:00
pierre
d61dcbb1e0 tccnv.pas 1999-01-27 12:59:32 +00:00
pierre
75c443fcf8 * memory leaks with hightree solved by adding a new disposetyp
dt_leftrighthigh
1999-01-27 12:57:22 +00:00
florian
ccd94e19cc * "procedure of object"-stuff fixed 1999-01-27 00:13:52 +00:00
pierre
699b53f316 * ppheap init code can be called before any getmem 1999-01-26 11:32:13 +00:00
pierre
0109220005 * bug0152 for i:=1 to i-5 do (i-5) evaluated first 1999-01-26 11:26:21 +00:00
pierre
34b0307b1a * open arrays stabs changed 1999-01-26 09:57:29 +00:00
peter
eadf1f63b4 * more fixes for the on bug with unknown id 1999-01-25 22:49:09 +00:00
peter
ad379bc2dd * fixed crash with forward declared class of ... 1999-01-25 20:13:48 +00:00
peter
ea2c9773fb * link libc always as last 1999-01-25 15:02:13 +00:00
florian
8936581df6 * very rare problem with in-operator fixed, mainly it was a problem of
emit_to_reg32 (typo in case ranges)
1999-01-25 09:29:38 +00:00
florian
48c5580258 * first check version 1999-01-24 22:39:14 +00:00
florian
a184e5ff43 * well, more changes, especially parts of secondload ported 1999-01-24 22:32:33 +00:00
florian
ce1b4eff9e + first versions 1999-01-23 23:35:02 +00:00
florian
90d0bea35a * first running version of the new code generator
* when compiling exceptions under Linux fixed
1999-01-23 23:29:31 +00:00
pierre
f0c36a6ce2 * overflow in addname for open arrays removed 1999-01-22 17:29:30 +00:00
pierre
7ffa0f6ac0 + currently compiled file name added on errors 1999-01-22 12:19:30 +00:00
pierre
7974fe193c * with bug introduced with DIRECTWITH removed 1999-01-22 12:18:34 +00:00
peter
902adb903a * fixed typo 1999-01-22 10:19:43 +00:00
peter
4517f917fd * fixed array of const
* generic platform independent high() support
1999-01-21 22:10:35 +00:00
pierre
0cfc4c8f6b * fix for constructor inside with statements 1999-01-21 16:40:51 +00:00
peter
02ed01ca21 * updates from gabor 1999-01-21 11:49:14 +00:00
peter
55640c751c * fixed set operations which still had array constructor as type 1999-01-20 21:05:09 +00:00
Jonas Maebe
e7b59e15ee * fixed set1 <= set2 for small sets 1999-01-20 19:23:10 +00:00
Jonas Maebe
653a798afd * small bugfix (memory corruption could occur when certain fpu instructions
were encountered)
1999-01-20 17:41:26 +00:00
Jonas Maebe
b9a674b9fe + fixed bug0163 (set1 <= set2 support) 1999-01-20 17:39:22 +00:00
pierre
10d97a9144 * bugs related to mangledname solved
- linux external without name
    -external procs already used
    (added count and is_used boolean fiels in tprocvar)
1999-01-20 14:18:32 +00:00
pierre
debe89f4e7 * fix to bug0191 1999-01-20 14:09:28 +00:00
peter
10aa438409 * fixed typed file read/write 1999-01-20 12:34:22 +00:00
peter
ffddbaccac * don't make localvar copies for assembler procedures 1999-01-20 10:20:18 +00:00
peter
9219d7777b * don't update crc when writing objs,libs and sources 1999-01-20 10:16:46 +00:00
pierre
f01a9ec364 * fix for boolean to comp conversion (now disabled) 1999-01-19 15:55:32 +00:00
peter
8740d63a3a * shortstring truncated after 255 chars 1999-01-19 14:21:59 +00:00
peter
abd2a106b0 * fixed [char] crash 1999-01-19 14:20:16 +00:00
peter
564865b58c * removed rangecheck warning which was shown twice 1999-01-19 12:17:45 +00:00
peter
fbfdeee09e * fixed constant strings > 255 chars 1999-01-19 12:17:00 +00:00
peter
f52b051f7d * fixed eof bug with includefiles 1999-01-19 12:14:38 +00:00
pierre
e74708aa48 * bug with @procvar=procvar fiwed 1999-01-19 12:05:27 +00:00
daniel
48ebf8cd94 + Tdictionary object: Tsymtable will become object(TTdictionary) in the
future
+ Tnamed_item object:  Tsym will become object(Tnamed_item) in the future
1999-01-19 11:00:33 +00:00
pierre
e4dadb6b3b typeof(object) without vmt generates an error instead of an internalerror 1999-01-19 10:56:05 +00:00
pierre
e92f07f542 * fix to bug0183 in secondnot 1999-01-19 10:51:32 +00:00
pierre
2d793b8c98 * avoid result no set warning in regtoreg64 1999-01-19 10:50:01 +00:00
florian
77f7afffa9 * bug with mul. of dwords fixed, reported by Alexander Stohr
* some changes to compile with TP
  + small enhancements for the new code generator
1999-01-19 10:18:58 +00:00
pierre
ddfe0eeecc * better error info with -Co 1999-01-18 16:02:20 +00:00
peter
951c1707d1 * doneverbose sets msg to nil 1999-01-15 16:08:21 +00:00
peter
f67fb1b0eb * error if upper<lower in array decl 1999-01-15 13:08:19 +00:00
peter
b5075769be * removed path from output, was there only for debugging 1999-01-15 12:27:23 +00:00
pierre
057ecba6d7 + better info for temp allocation debugging 1999-01-15 11:34:23 +00:00
pierre
3f6f33cd60 * bug in mmx code removed 1999-01-15 11:33:03 +00:00
peter
f8f66faad4 * fixed forwardpointer problem with multiple forwards for the same
typesym. It now uses a linkedlist instead of a single pointer
1999-01-14 21:49:58 +00:00
peter
abb72c5d48 * status.currentmodule is now also updated
+ status.currentsourcepath
1999-01-14 21:47:09 +00:00
daniel
425308ccdc * Exe name derived from target_info instead of target_os 1999-01-14 11:38:39 +00:00
florian
097498cc3c + YES, finally the new code generator is compilable, but it doesn't run yet :( 1999-01-13 22:52:36 +00:00
daniel
679ac86edd * Tinputfile.readbuf eof bugfix 1999-01-13 15:02:00 +00:00
peter
54fed4a08f * fixed crash with counter var 1999-01-13 12:01:43 +00:00
florian
a518b21bb8 * unified i386.pas for the old and new code generator 1999-01-13 11:34:06 +00:00
peter
9bcb14e503 * splitted from symtable.pas 1999-01-12 14:32:49 +00:00
peter
f379498229 + BrowserLog for browser.log generation
+ BrowserCol for browser info in TCollections
  * released all other UseBrowser
1999-01-12 14:25:24 +00:00
peter
1ace0dc9b8 * moved some tables from ra386*.pas -> i386.pas
+ start of coff writer
  * renamed asmutils unit to rautils
1999-01-10 15:37:51 +00:00
florian
1896be988f Changes of Alexander Stohr integrated:
+ added KNI opcodes
    + added KNI registers
    + added 3DNow! opcodes
    + added 64 bit and 128 bit register flags
    * translated a few comments into english
1999-01-08 12:39:22 +00:00
florian
b9968f4a43 + some stuff for the new code generator 1999-01-06 22:58:47 +00:00
michael
168918c002 + Fixed wrong unit name. 1999-01-06 14:38:09 +00:00
peter
2bec71cd5b * fixed typo :( 1999-01-06 12:56:01 +00:00
peter
b55566c201 * renamed resource -> comprsrc (conflicted with FV) 1999-01-06 12:39:46 +00:00
florian
9920e3ffef * str(...) for ansi/long and widestrings fixed 1999-01-06 12:23:29 +00:00
Jonas Maebe
0bcc355213 * don't output inc/dec if cs_check_overflow is on, because inc/dec don't change
the carry flag
1999-01-05 17:03:36 +00:00
florian
d15d426756 * mainly problem with invalid case ranges fixed (reported by Jonas) 1999-01-05 08:19:59 +00:00
Jonas Maebe
0d51aa650c + mov reg, mem1 to mov reg, mem1
mov mem2, reg           cmp reg, mem2
     cmp mem1, reg
    # reg released
1999-01-04 22:04:15 +00:00
Jonas Maebe
4f997fddd1 * no fistp/fild optimization for S_IQ (fistq doesn't exist) 1999-01-04 12:58:55 +00:00
peter
6ee9d913cd + farpointer type
* absolutesym now also stores if its far
1998-12-30 22:15:45 +00:00
peter
7e775e2708 * if explicit cnv then also handle the ordinal consts direct 1998-12-30 22:13:47 +00:00
peter
f73ad7cb37 * check the amount of paras for Str() 1998-12-30 22:13:13 +00:00
michael
2c476b0d22 + Added -Sh switch 1998-12-30 22:04:30 +00:00
peter
000336a586 * released valuepara 1998-12-30 13:41:05 +00:00
peter
e7b4349a7f * fix for boolean=true compares 1998-12-30 13:35:35 +00:00
Jonas Maebe
64c509adb8 * fixed crash when there are two asm blocks right after each other 1998-12-29 19:58:27 +00:00
Jonas Maebe
8cf4da6d5e + optimize pascal code surrounding assembler blocks 1998-12-29 18:48:15 +00:00
peter
c7637424cf + resource file handling ($R directive) for Win32 1998-12-28 23:26:14 +00:00
peter
88599f754f * no it table necessary if no asm parser is used 1998-12-28 15:49:03 +00:00
peter
7d90cad6c0 * general constant solution. Constant expressions are now almost
everywhere allowed and correctly parsed
1998-12-28 15:47:09 +00:00
peter
e628968eac + read/write of constnil 1998-12-26 15:35:44 +00:00
florian
151e5a82cf + more changes for the new version 1998-12-26 15:20:28 +00:00
peter
ce3e2aec84 + rec.field(%esi) support
+ [esi+rec.field] support
1998-12-23 22:55:55 +00:00
peter
f986459350 * don't count ait_marker for lineinfo 1998-12-23 22:53:44 +00:00
peter
2f303a746d * fixed new(x) crash if x contains an error 1998-12-23 22:52:56 +00:00
Jonas Maebe
0395e5e0b6 * change "inc x/dec x; test x, x" to "add 1, x/sub 1,x" because inc and dec
don't affect the carry flag (test does). This *doesn't* fix the problem with
   cardinal, that's a cg issue.
1998-12-23 15:16:21 +00:00
peter
a09375865f * daniels patches against the latest versions 1998-12-23 14:02:01 +00:00
daniel
8aaf209cec + Make script to make compiler under OS/2. 1998-12-23 12:41:56 +00:00
daniel
5b341c7f21 * Added begin to globtype and version to avoid empty object files.
* Fileexists no longer finds volume labels.
1998-12-23 12:40:48 +00:00
florian
802fd8fb5c * memory leaks for ansistring type casts fixed 1998-12-22 13:10:56 +00:00
pierre
0252e17f0e * procvar stabs correction 1998-12-21 14:03:08 +00:00
peter
250a45a988 * makecfg updated 1998-12-21 13:13:08 +00:00
peter
7c90404c78 * smartlinking doesn't crash anymore 1998-12-20 16:21:22 +00:00
florian
d656d708b7 * ansistring memory leaks fixed 1998-12-19 00:23:40 +00:00
peter
6585e3e089 * don't include intel list if not necessary 1998-12-18 17:24:51 +00:00
peter
6fec6f714a * added 'in []' support 1998-12-18 17:15:40 +00:00
Jonas Maebe
09f430de39 + extra checks in RegsEquivalent so some more optimizations can be done (which
where disabled by the second fix from revision 1.22)
1998-12-17 16:37:38 +00:00
peter
ec85c3d6fb * update -h page 1998-12-16 16:40:00 +00:00
peter
83b6dcb67d * updated email address 1998-12-16 16:31:26 +00:00
Jonas Maebe
75331d6648 * released CaseRange 1998-12-16 12:30:59 +00:00
Jonas Maebe
f3d215d12d * fixed fistp/fild optimization 1998-12-16 12:09:29 +00:00
peter
f76d2b328c * removed some obsolete version checks 1998-12-16 00:27:16 +00:00
michael
f5eeedee0b + Removed underscores in heaptrc unit 1998-12-15 23:49:51 +00:00
Jonas Maebe
401078117f + convert consecutive case labels to a single range (-dCaseRange) 1998-12-15 22:32:24 +00:00
Jonas Maebe
97966cb9b5 + change "sub/add const1, reg" or "dec reg" followed by "sub const2, reg" to one
"sub const3, reg"
  * some small cleaning up
1998-12-15 22:30:39 +00:00
florian
a0e7569800 * first rough conversion 1998-12-15 22:21:53 +00:00
florian
3f56077131 * some code added 1998-12-15 22:18:55 +00:00
florian
e42b0657cd * first version 1998-12-15 22:17:02 +00:00
florian
3baa79797b * first version, all planned processors (?) added 1998-12-15 22:16:03 +00:00
Jonas Maebe
2b0c6c2951 * uncommented OpsEqual & added to interface because popt386 uses it now 1998-12-15 19:33:58 +00:00
peter
c7230805a2 * fixed const s : ^string
* first things for const pchar : @string[1]
1998-12-15 17:16:00 +00:00
peter
4fbc61f5ea * fix for tp7 1998-12-15 17:14:17 +00:00
peter
6b4aa2289a * pointer+ord not allowed in tp mode 1998-12-15 17:12:35 +00:00
peter
a22d732459 * string:=pchar not allowed in tp mode 1998-12-15 17:11:37 +00:00
florian
9c7239cfbe + first version, derived from old routines 1998-12-15 16:32:58 +00:00
Jonas Maebe
5da43943cd * fixed bug in shr/shl optimization 1998-12-15 15:43:20 +00:00
peter
9a889d1750 * removed commentlevel 1998-12-15 11:53:54 +00:00
peter
ff335d3911 * fixed dup release of statement label in case 1998-12-15 11:52:18 +00:00
peter
02904d8319 + -iSO, -iSP, -iTO, -iTP 1998-12-15 10:23:23 +00:00
Jonas Maebe
30fa4efbd4 - removed {$ifdef ver0_99_11}'s 1998-12-14 22:01:45 +00:00
peter
c91c9bb341 * version 0.99.11 1998-12-14 12:58:45 +00:00
florian
6283947c69 + again more stuff for int64/qword:
- comparision operators
       - code generation for: str, read(ln), write(ln)
1998-12-11 23:36:06 +00:00
florian
d439e323fd * fixed previous commit bug fix of getexplicitregister32
(usableregs32 was decremented twice, thnaks Pierre for that hint)
1998-12-11 17:22:40 +00:00
florian
1b4cf9afb5 + typed const int64 and qword
+ unary minus-operator  q1:=-q2;
  + not-operator
1998-12-11 16:50:22 +00:00
florian
8534a40b75 + shifting for 64 bit ints added
* bug in getexplicitregister32 fixed: usableregs wasn't decremented !!
1998-12-11 16:10:07 +00:00
pierre
1b4990c597 * #0 char removed 1998-12-11 10:48:11 +00:00
pierre
ad717054b5 * internal gdb types for booleans and 64bit integers 1998-12-11 08:57:22 +00:00
peter
1bae98d429 * splitted from globals.pas 1998-12-11 00:05:27 +00:00
peter
1b369bb4bb + globtype,tokens,version unit splitted from globals 1998-12-11 00:02:37 +00:00
pierre
4a85a1b59e * fix for operators 1998-12-10 14:57:52 +00:00
florian
467c0de643 * bug with p(const a : ansistring) fixed
* duplicate constant ansistrings were handled wrong, fixed
1998-12-10 14:39:29 +00:00
florian
86b17cd44f + some basic operations with qwords and int64 added: +, xor, and, or;
the register allocation works fine
1998-12-10 11:16:00 +00:00
florian
4244dda54b + basic operations with int64/qord (compiler with -dint64)
+ rtti of enumerations extended: names are now written
1998-12-10 09:47:13 +00:00
Jonas Maebe
2fcfb2ce50 * corrected small syntax error in part between {ifdef ver0_99_11}
+ added fistp/fild optimization between {ifdef ver0_99_11}
1998-12-09 18:16:13 +00:00
Jonas Maebe
f6e600a839 * replaced two "in [A_...]" constructs I had missed before
* for shrd/shld: "if operands[1].operandtype = OPR_CONSTANT" instead of
    "if operands[3].operandtype ..."
1998-12-09 13:23:40 +00:00
Jonas Maebe
7aaa973e8f * allow constant offsets for go32v2 in assembler blocks 1998-12-08 23:03:46 +00:00
peter
6e7f776c4f + -gh for heaptrc unit 1998-12-08 10:18:07 +00:00
pierre
917fc582ad + constructor destructor info for gdbpas 1998-12-08 09:06:30 +00:00
florian
061be51016 * better code generation for classes which are passed as parameters to
subroutines
1998-12-06 13:12:44 +00:00
florian
df1edc9bc0 * some stuff for procedures of object added
* bug with overridden virtual constructors fixed (reported by Italo Gomes)
1998-12-04 10:18:06 +00:00
peter
37c2997e50 * target_os.use_bound_instruction boolean 1998-12-03 10:17:32 +00:00
Jonas Maebe
242244016d * changed "if longintvar in set" to case or "if () or () .." statements
* tree.pas: changed inlinenumber (and associated constructor/vars) to a byte
1998-12-02 16:23:29 +00:00
pierre
9cfedd8bb0 * writing of .edata was wrong for indexes above number of exported items
* importing by index only did not work !
1998-12-02 10:26:13 +00:00
pierre
c89458e721 * new try for correct debug info generation 1998-12-01 23:40:53 +00:00
pierre
44f5d0a911 * postprocessexec for win32 changed 1998-12-01 23:39:46 +00:00