Tomas Lindquist Olsen
575038bfbd
Fixed classinfo.interfaces for .. interfaces!
2009-04-21 20:19:53 +02:00
Tomas Lindquist Olsen
4567a55f7f
Fixed emitting declarations nested inside interfaces.
2009-04-21 19:32:22 +02:00
Tomas Lindquist Olsen
f5ce8eda1d
Resolve all base classes, including interfaces (!) before resolving the class itself.
2009-04-17 03:01:43 +02:00
Tomas Lindquist Olsen
803fbf4882
Make !TypeInfo output lazy unless we need to provide full definitions in general.
2009-04-16 22:20:26 +02:00
Tomas Lindquist Olsen
9a86f9c0b5
Fixed some minitest regressions.
2009-04-16 19:21:30 +02:00
Tomas Lindquist Olsen
bb98d68f64
Now compiles again, and fixed type of the Interface[N] ClassInfo symbol.
2009-04-16 11:01:49 +02:00
Tomas Lindquist Olsen
37cf5a5789
Added Doxygen file.
...
Completely seperated type and symbol generation. Should fix a lot of bugs, but is not yet 100% complete.
2009-04-15 20:06:25 +02:00
Frits van Bommel
071bad95dc
Add some alignment info where LLVM might otherwise be more pessimistic.
...
In particular, %.nest_arg is always aligned even though it's bitcast from i8*.
Pointers in vtables are also guaranteed to be stored at aligned addresses.
2009-04-12 21:56:43 +02:00
Frits van Bommel
b5af30636e
Isolate all knowledge of what a function's nested context looks like in a
...
single place. No functional change.
2009-04-12 13:08:24 +02:00
Tomas Lindquist Olsen
be3bfbff5d
Fixed problems introduced by previous commits that prevented Tango from compiling.
2009-03-27 23:17:04 +01:00
Tomas Lindquist Olsen
ec986231e5
Eliminated the need for resolve, declare, const-init and define lists to drive code generation.
2009-03-27 21:50:32 +01:00
Tomas Lindquist Olsen
daef67acc3
Changed use of toObjFile to a new codegen method.
...
More versioning of DMD specific codegen code.
2009-03-27 17:54:27 +01:00
Frits van Bommel
d0a8ee9573
Return null from a static class to interface cast if the class reference was
...
null. Fixes #237 .
2009-03-20 15:50:01 +01:00
Frits van Bommel
27d3ab4546
Some calling convention work for x86-64:
...
- Implement x86-64 extern(C), hopefully correctly.
- Tried to be a bit smarter about extern(D) while I was there.
Interestingly, this code seems to be generating more efficient code than
gcc and llvm-gcc in some edge cases, like returning a `{ [7 x i8] }` loaded from
a stack slot from an extern(C) function. (gcc generates 7 1-byte loads, while
this code generates a 4-byte, a 2-byte and a 1-byte load)
I also added some changes to make sure structs being returned from functions or
passed in as parameters are stored in memory where the rest of the backend seems
to expect them to be. These should be removed when support for first-class
aggregates improves.
2009-03-06 16:00:47 +01:00
Frits van Bommel
dd41366a99
Use llvm::CallSite instead of custom CallOrInvoke class.
2009-02-28 22:16:52 +01:00
Tomas Lindquist Olsen
fc480b7fd8
SWITCHED TO LLVM 2.5 !
...
Applied patch from ticket #129 to compile against latest LLVM. Thanks Frits van Bommel.
Fixed implicit return by asm block at the end of a function on x86-32. Other architectures will produce an error at the moment. Adding support for new targets is fairly simple.
Fixed return calling convention for complex numbers, ST and ST(1) were switched around.
Added some testcases.
I've run a dstress test and there are no regressions. However, the runtime does not seem to compile with symbolic debug information. -O3 -release -inline works well and is what I used for the dstress run. Tango does not compile, a small workaround is needed in tango.io.digest.Digest.Digest.hexDigest. See ticket #206 .
2009-02-08 05:26:54 +01:00
Tomas Lindquist Olsen
9bd52922bd
Changed the way LDC determines if a template instantiation needs to get a definition, seems to speed up compile times quite a bit in some cases.
2009-02-04 18:48:03 +01:00
Tomas Lindquist Olsen
dc5944df99
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
...
Fixed align N; in asm blocks.
Fixed inreg parameter passing on x86 for ref/out params.
Removed support for lazy initialization of function local static variables, I have no idea why I ever implemented this, it's not in the D spec, and DMD doesn't support it :P
Some of the global variable related changes might cause minor regressions, but they should be easily fixable.
2009-02-03 08:54:57 +01:00
Christian Kamm
f82ca73c76
Casts from interface to class generally need to be dynamic. Fixes #189 .
2009-01-25 12:35:11 +01:00
Tomas Lindquist Olsen
637c59a422
more moreatatime fixes
2008-12-09 18:45:25 +01:00
Tomas Lindquist Olsen
827113a0b2
Fixed another moreatatime (as opposed to oneatatime) issue with indexing unresolved class.
2008-12-09 17:14:52 +01:00
Tomas Lindquist Olsen
3c400ff21c
Removed error on naked, not fully complete, but I'll be doing more work on it during this Christmas, and some things do work.
...
Fixed taking delegate of final class method. see mini/delegate3.d.
2008-12-09 14:07:30 +01:00
Tomas Lindquist Olsen
a2bf0796ce
Added back a bunch of static's to gen/classes.cpp, it's not superfluous, it makes the functions internal to the compilation unit, and we don't call them anywhere else.
2008-12-09 02:07:24 +01:00
Christian Kamm
c8fdab1715
Add all base interfaces to interfaceMap, not just direct parents.
...
Removed some superfluous 'static'.
2008-12-07 16:43:20 +01:00
Tomas Lindquist Olsen
2532856f1c
Commented some logging that could be '''very''' long, cuts -vv output size of a gtkd gl sample down 1.2GB by 3/4.
...
Fixed wrong pointer type for multidimension "deep" slicing.
2008-12-04 16:11:09 +01:00
Tomas Lindquist Olsen
879bed7df6
Added CMake option to disable generation of ClassInfo.offTi arrays, defaults to OFF.
2008-12-02 01:44:17 +01:00
Tomas Lindquist Olsen
2788a2a0f1
Made ClassInfo.interfaces generation consistent with DMD, fixes #134
...
Removed unneeded includes from dmd/attrib.c
2008-12-01 18:34:02 +01:00
Tomas Lindquist Olsen
8ee1fbca26
Fixed a nasty bug with how interface vtables for class initializers were output, causing some class fields to be skipped.
...
Fixed a problem in definition of ClassInfos where an invalid constant was potentially used. This needs to be looked into proper as it might happen again in the future.
2008-12-01 04:37:54 +01:00
Tomas Lindquist Olsen
577237e073
Changed some hardcoded offset/alignment for classes in DMD, broke offsets for 64bits.
...
Changed ClassInfo generation to no longer access the default initializer of ClassInfo, fixes problems with index mismatch.
2008-11-30 20:22:09 +01:00
Christian Kamm
f14d97d786
Move storage of final vtbl from BaseClass to IrInterface: BaseClass instances are shared!
...
Always use the target's irstruct interfaceMap when building the const initializer.
Tango helloworld works again.
2008-11-30 11:25:40 +01:00
Tomas Lindquist Olsen
dcf3c96f65
Ensure all logging of llvm values/types is only called when -vv is passed
2008-11-29 23:39:04 +01:00
Tomas Lindquist Olsen
d522fef71f
Removed use of DMD's toPrettyChars function for providing llvm value names.
2008-11-29 22:37:36 +01:00
Tomas Lindquist Olsen
5d1366d27f
Removed DtoConstFieldInitializer, it's no longer needed and was buggy.
2008-11-29 21:26:50 +01:00
Tomas Lindquist Olsen
4da2cf066e
Fixed some problems with the addZeros forward declarations having type mismatches.
2008-11-29 20:57:52 +01:00
Tomas Lindquist Olsen
3a2e29d434
merge
2008-11-29 18:28:32 +01:00
Tomas Lindquist Olsen
13e0399ab0
Changed aggregate field initializers to be created lazily, fixes problem with static void arrays in aggregates.
2008-11-29 18:28:17 +01:00
Tomas Lindquist Olsen
f46f865375
Removed KDevelop3 project files, CMake can generate them just fine!
...
Fixed function literals in static initializers.
Changed alignment of delegates from 2*PTRSIZE to just PTRSIZE.
Changed errors to go to stderr instead of stdout.
Fairly major rewriting of struct/union/class handling, STILL A BIT BUGGY !!!
2008-11-29 21:25:43 +01:00
Christian Kamm
497c7e87df
Do put zero in vtable initializer for function without body in abstract class.
2008-11-29 17:13:38 +01:00
Christian Kamm
049e24cef8
Error instead of assert when trying to build a default initializer for void[n].
2008-11-29 12:28:10 +01:00
Christian Kamm
6efc9a3324
Get rid of DtoBoolean - use DtoCast(... Type::tbool) instead.
...
Fixed some casts to bool that were using truncation.
2008-11-22 18:35:52 +01:00
Tomas Lindquist Olsen
c4c1c1d72e
Added initial D2 support, D2 frontend and changes to codegen to make things compile.
2008-11-11 01:38:48 +01:00
Tomas Lindquist Olsen
6cf5ca6aba
Removed warnings on ignored aligns. Only do aligment on packed structs, align(1) struct Packed { ... }
...
Changed the way struct/class fields are added, first small part of cleaning up these...
Make struct/class/union fields aware of any anonymous struct/union they might be part of, not yet really useful, but part of getting better union support.
2008-10-28 15:41:09 +01:00
Christian Kamm
cfcda83291
Change _d_newclass into _d_allocclass. Add initialization to ClassInfo.create.
2008-10-26 14:12:03 +01:00
Tomas Lindquist Olsen
379bd9c330
Fixed weird struct problem from downs, see mini/compile_structs1.d
...
Rewrote DtoIndexStruct/Class , the old implementation were way too complex for what we really need now - since the DotVar changes.
2008-10-14 15:35:49 +02:00
Christian Kamm
4d610bcd7e
Fix odd interfaceInfoType bug.
2008-10-08 20:28:59 +02:00
Tomas Lindquist Olsen
e109025c00
Removed some checks for abstract llvm types that were too strict, a 'opaque* null' is a valid initializer... when structs in D can be just a forward reference.
2008-10-06 14:37:00 +02:00
Christian Kamm
b3d4bc83f8
Move check for access of context for nested class from backend into frontend.
2008-10-02 23:12:19 +02:00
Tomas Lindquist Olsen
bcafbe169d
Wrapped all the most potentially expensive logging calls in a conditional to only do work when actually requested.
...
Commented some logging calls that could potentially write out many megabytes of type dumps.
2008-10-01 18:32:31 +02:00
Tomas Lindquist Olsen
04f7c18f95
Removed some excessive llvm type logging
2008-09-28 15:22:39 +02:00
Christian Kamm
e4ee8907cb
Fix line number for error when trying to new a nested class without a context.
2008-09-12 12:48:16 +02:00