Quellcode durchsuchen

[cpp] Use auto-cast wrappers to allow chaining of types that return AutoCast

Hugh vor 9 Jahren
Ursprung
Commit
7e010523a4
3 geänderte Dateien mit 37 neuen und 12 gelöschten Zeilen
  1. 1 7
      src/generators/gencpp.ml
  2. 15 2
      std/cpp/Function.hx
  3. 21 3
      std/cpp/Pointer.hx

+ 1 - 7
src/generators/gencpp.ml

@@ -585,12 +585,6 @@ let is_cpp_function_class haxe_type =
    | _ -> false
    ;;
 
-let is_fromStaticFunction_call func =
-   match (remove_parens func).eexpr with
-   | TField (_,FStatic ({cl_path=["cpp"],"Function"},{cf_name="fromStaticFunction"} ) ) -> true
-   | _ -> false
-;;
-
 let is_objc_call field =
   match field with
   | FStatic(cl,_) | FInstance(cl,_,_) ->
@@ -2325,7 +2319,7 @@ let retype_expression ctx request_type function_args expression_tree forInjectio
                  )
                end
 
-            | FStatic ( {cl_path=(["cpp"],"Function")}, ({cf_name="fromStaticFunction"} as member) ) ->
+            | FStatic ( _, ({cf_name="::cpp::Function_obj::fromStaticFunction"} as member) ) ->
                let funcReturn = cpp_member_return_type ctx member in
                let exprType = cpp_type_of member.cf_type in
                CppFunction( FuncFromStaticFunction, funcReturn ), exprType

+ 15 - 2
std/cpp/Function.hx

@@ -29,8 +29,21 @@ extern class Function<T,ABI:cpp.abi.Abi>
    // Actually a function pointer, but can be called using haxe notation
 	public var call(default,null):T;
 
-   public static function getProcAddress<T,ABI:cpp.abi.Abi>(inModule:String, inFunction:String) : Function<T,ABI>;
-   public static function fromStaticFunction<T>(inStaticFunction:T) : Callable<T>;
+   @:native("::cpp::Function_obj::getProcAddress")
+   static function nativeGetProcAddress<T,ABI:cpp.abi.Abi>(inModule:String, inFunction:String) : Function<T,ABI>;
+   public static function getProcAddress<T,ABI:cpp.abi.Abi>(inModule:String, inFunction:String) : Function<T,ABI>
+   {
+      var autoCast = nativeGetProcAddress(inModule, inFunction);
+      return autoCast;
+   }
+
+   @:native("::cpp::Function_obj::fromStaticFunction")
+   static function nativeFromStaticFunction<T>(inStaticFunction:T) : Callable<T>;
+   inline public static function fromStaticFunction<T>(inStaticFunction:T) : Callable<T>
+   {
+      var autoCast = nativeFromStaticFunction(inStaticFunction);
+      return autoCast;
+   }
 
 	public function lt(inOther:Function<T,ABI>):Bool;
 	public function leq(inOther:Function<T,ABI>):Bool;

+ 21 - 3
std/cpp/Pointer.hx

@@ -33,7 +33,13 @@ extern class Pointer<T> extends ConstPointer<T> implements ArrayAccess<T>
 
    public static function fromRaw<T>(ptr:RawPointer<T>) : Pointer<T>;
 
-   public static function fromHandle<T>(inHandle:Dynamic,?inKind:String) : Pointer<T>;
+   @:native("::cpp::Pointer_obj::fromHandle")
+   static function nativeFromHandle<T>(inHandle:Dynamic,?inKind:String):Pointer<T>;
+   inline public static function fromHandle<T>(inHandle:Dynamic,?inKind:String) : Pointer<T>
+   {
+     var autoCast = nativeFromHandle(inHandle,inKind);
+     return autoCast;
+   }
 
    public static function fromPointer<T>(inNativePointer:Dynamic) : Pointer<T>;
 
@@ -41,9 +47,21 @@ extern class Pointer<T> extends ConstPointer<T> implements ArrayAccess<T>
 
    public static function endOf<T:{}>(inVariable:T) : Pointer<cpp.Void>;
 
-   public static function arrayElem<T>(array:Array<T>, inElem:Int):Pointer<T>;
+   @:native("::cpp::Pointer_obj::arrayElem")
+   static function nativeArrayElem<T>(array:Array<T>, inElem:Int):Pointer<T>;
+   inline static function arrayElem<T>(array:Array<T>, inElem:Int):Pointer<T>
+   {
+      var autoCast = nativeArrayElem(array,inElem);
+      return autoCast;
+   }
 
-   public static function ofArray<T>(array:Array<T>):Pointer<T>;
+   @:native("::cpp::Pointer_obj::ofArray")
+   static function nativeOfArray<T>(array:Array<T>):Pointer<T>;
+   inline public static function ofArray<T>(array:Array<T>):Pointer<T>
+   {
+     var autoCast = nativeOfArray(array);
+     return autoCast;
+   }
 
    inline public function toUnmanagedArray(elementCount:Int) : Array<T>
    {