Mercurial > projects > ldc
comparison dmd/attrib.c @ 94:61615fa85940 trunk
[svn r98] Added support for std.c.stdlib.alloca via pragma(LLVM_internal, "alloca").
Added support for array .sort and .reverse properties.
Fixed some bugs with pointer arithmetic.
Disabled some DMD AST optimizations that was messing things up, destroying valuable information.
Added a KDevelop project file, this is what I use for coding LLVMDC now :)
Other minor stuff.
author | lindquist |
---|---|
date | Mon, 12 Nov 2007 06:32:46 +0100 |
parents | eb379601d445 |
children | 5acec6b2eef8 |
comparison
equal
deleted
inserted
replaced
93:08508eebbb3e | 94:61615fa85940 |
---|---|
877 } | 877 } |
878 else if (strcmp(str,"notypeinfo")==0) { | 878 else if (strcmp(str,"notypeinfo")==0) { |
879 llvm_internal = LLVMnotypeinfo; | 879 llvm_internal = LLVMnotypeinfo; |
880 assert(args->dim == 1); | 880 assert(args->dim == 1); |
881 } | 881 } |
882 else if (strcmp(str,"alloca")==0) { | |
883 llvm_internal = LLVMalloca; | |
884 assert(args->dim == 1); | |
885 } | |
882 else { | 886 else { |
883 error("unknown pragma command: %s", str); | 887 error("unknown pragma command: %s", str); |
884 } | 888 } |
885 } | 889 } |
886 else | 890 else |
902 break; | 906 break; |
903 | 907 |
904 case LLVMva_arg: | 908 case LLVMva_arg: |
905 case LLVMva_start: | 909 case LLVMva_start: |
906 case LLVMnotypeinfo: | 910 case LLVMnotypeinfo: |
911 case LLVMalloca: | |
907 break; | 912 break; |
908 | 913 |
909 default: | 914 default: |
910 assert(0); | 915 assert(0); |
911 } | 916 } |
956 } | 961 } |
957 break; | 962 break; |
958 | 963 |
959 case LLVMnotypeinfo: | 964 case LLVMnotypeinfo: |
960 s->llvmInternal = llvm_internal; | 965 s->llvmInternal = llvm_internal; |
966 break; | |
967 | |
968 case LLVMalloca: | |
969 if (FuncDeclaration* fd = s->isFuncDeclaration()) { | |
970 fd->llvmInternal = llvm_internal; | |
971 } | |
972 else { | |
973 error("may only be used on function declarations"); | |
974 assert(0); | |
975 } | |
961 break; | 976 break; |
962 | 977 |
963 default: | 978 default: |
964 assert(0 && "invalid LLVM_internal pragma got through :/"); | 979 assert(0 && "invalid LLVM_internal pragma got through :/"); |
965 } | 980 } |