Mercurial > projects > ldc
view test/funcptr.d @ 275:665b81613475 trunk
[svn r296] Removed: the 'suite' dir, it never took off!
Fixed: foreach statement, key-type checks were buggy.
Fixed: setting LLVMDC versions on the command line is now an error.
Fixed: array compare runtime had incorrect param attrs on call.
Fixed: index expressions on dynamic array slices w/o storage was broken.
Fixed: scope classes had incorrect finalization in some cases.
Fixed: when outputting !ClassInfoS !OffsetTypeInfoS, static class members were trying to be included, crashing the compiler.
Fixed: calling LLVMDC with -inline but not any -O option caused assertion failure.
Changed: the runtime now uses a single interface to "get" to !TypeInfoS, part of eliminating duplicate !TypeInfo codegen.
author | lindquist |
---|---|
date | Thu, 19 Jun 2008 17:30:32 +0200 |
parents | d9d5d59873d8 |
children |
line wrap: on
line source
extern(C) int printf(char*, ...); int return_six() { return 6; } int add_int(int a, int b) { return a+b; } int sub_int(int a, int b) { return a-b; } alias int function(int,int) binfn_t; int binop_int(binfn_t op, int a, int b) { return op(a,b); } binfn_t get_binop_int(char op) { binfn_t fn; if (op == '+') fn = &add_int; else if (op == '-') fn = &sub_int; return fn; } extern(C) float mul_float(float a, float b) { return a * b; } void function_pointers() { int function() fn = &return_six; assert(fn() == 6); binfn_t binfn = &add_int; assert(binfn(4,1045) == 1049); assert(binop_int(binfn, 10,656) == 666); binfn = get_binop_int('+'); assert(binop_int(binfn, 10,100) == 110); binfn = get_binop_int('-'); assert(binop_int(binfn, 10,100) == -90); { auto ffn = &mul_float; float ftmp = mul_float(2.5,5); assert(ftmp == 12.5); assert(ftmp > 12.49 && ftmp < 12.51); } } void main() { printf("Function pointer test\n"); function_pointers(); printf(" SUCCESS\n"); }