72 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| // RUN: %clang_cc1 -emit-llvm-only -std=c++11 -fblocks -o - -triple x86_64-apple-darwin10 -fobjc-runtime=macosx-fragile-10.5 %s
 | |
| // rdar://9362021
 | |
| 
 | |
| @class DYFuture;
 | |
| @interface NSCache
 | |
| - (void)setObject:(id)obj forKey:(id)key;
 | |
| @end
 | |
| 
 | |
| template <typename T>
 | |
| class ResourceManager
 | |
| {
 | |
| public:
 | |
|  ~ResourceManager();
 | |
|  DYFuture* XXX();
 | |
|  NSCache* _spDeviceCache;
 | |
| };
 | |
| 
 | |
| template <typename T>
 | |
| DYFuture* ResourceManager<T>::XXX()
 | |
| {
 | |
|  ^ {
 | |
|    [_spDeviceCache setObject:0 forKey:0];
 | |
|   }();
 | |
| 
 | |
|  return 0;
 | |
| }
 | |
| 
 | |
| struct AnalyzerBaseObjectTypes { };
 | |
| 
 | |
| void FUNC()
 | |
| {
 | |
|     ResourceManager<AnalyzerBaseObjectTypes> *rm;
 | |
|     ^(void) { rm->XXX(); }();
 | |
| }
 | |
| 
 | |
| namespace PR9982 {
 | |
|   template<typename T> struct Curry;
 | |
| 
 | |
|   template<typename R, typename Arg0, typename Arg1, typename Arg2>
 | |
|     struct Curry<R (^)(Arg0, Arg1, Arg2)>
 | |
|     {
 | |
|       typedef R (^FType)(Arg0, Arg1, Arg2);
 | |
|     
 | |
|     Curry(FType _f) : f(_f) {}
 | |
|       ~Curry() {;}
 | |
|     
 | |
|       R (^(^operator()(Arg0 a))(Arg1))(Arg2) 
 | |
|       { 
 | |
|         auto block = ^(Arg1 b) {
 | |
|           auto inner_block = ^(Arg2 c) {
 | |
|             return f(a, b, c);
 | |
|           };
 | |
|           return inner_block; 
 | |
|         };
 | |
|         return block;
 | |
|       }
 | |
|     
 | |
|     private:
 | |
|       FType f;
 | |
|     };
 | |
| 
 | |
|   auto add = ^(int a, int b, int c)
 | |
|     {
 | |
|       return a + b + c;
 | |
|     };
 | |
| 
 | |
|   void curry() {
 | |
|     Curry<__decltype(add)> c = Curry<__decltype(add)>(add);
 | |
|     auto t = c(1)(10)(100);
 | |
|   }
 | |
| }
 |