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 }