diff --git a/src/generators/genhl.ml b/src/generators/genhl.ml index 434339fef31..622992fdada 100644 --- a/src/generators/genhl.ml +++ b/src/generators/genhl.ml @@ -473,6 +473,7 @@ let rec to_type ?tref ctx t = | ["hl"], "UI16" -> HUI16 | ["hl"], "UI8" -> HUI8 | ["hl"], "I64" -> HI64 + | ["hl"], "GUID" -> HGUID | ["hl"], "NativeArray" -> HArray (to_type ctx (List.hd pl)) | ["haxe";"macro"], "Position" -> HAbstract ("macro_pos", alloc_string ctx "macro_pos") | _ -> failwith ("Unknown core type " ^ s_type_path a.a_path)) @@ -4027,6 +4028,8 @@ let write_code ch code debug = | HPacked t -> byte 22; write_type t + | HGUID -> + byte 23 ) all_types; let write_debug_infos debug = diff --git a/src/generators/hl2c.ml b/src/generators/hl2c.ml index ea3989ed4a7..9f28d6a17dc 100644 --- a/src/generators/hl2c.ml +++ b/src/generators/hl2c.ml @@ -124,11 +124,11 @@ let tname str = ident n let is_gc_ptr = function - | HVoid | HUI8 | HUI16 | HI32 | HI64 | HF32 | HF64 | HBool | HType | HRef _ | HMethod _ | HPacked _ -> false + | HVoid | HUI8 | HUI16 | HI32 | HI64 | HF32 | HF64 | HBool | HType | HRef _ | HMethod _ | HPacked _ | HGUID -> false | HBytes | HDyn | HFun _ | HObj _ | HArray _ | HVirtual _ | HDynObj | HAbstract _ | HEnum _ | HNull _ | HStruct _ -> true let is_ptr = function - | HVoid | HUI8 | HUI16 | HI32 | HI64 | HF32 | HF64 | HBool -> false + | HVoid | HUI8 | HUI16 | HI32 | HI64 | HF32 | HF64 | HBool | HGUID -> false | _ -> true let rec ctype_no_ptr = function @@ -156,6 +156,7 @@ let rec ctype_no_ptr = function | HPacked t -> let name,v = ctype_no_ptr t in "struct _" ^ name, v + | HGUID -> "int64", 0 let ctype t = let t, nptr = ctype_no_ptr t in @@ -203,6 +204,7 @@ let type_id t = | HMethod _ -> "HMETHOD" | HStruct _ -> "HSTRUCT" | HPacked _ -> "HPACKED" + | HGUID -> "HGUID" let var_type n t = ctype t ^ " " ^ ident n @@ -237,7 +239,7 @@ let define ctx s = let rec define_type ctx t = match t with - | HVoid | HUI8 | HUI16 | HI32 | HI64 | HF32 | HF64 | HBool | HBytes | HDyn | HArray _ | HType | HDynObj | HNull _ | HRef _ -> () + | HVoid | HUI8 | HUI16 | HI32 | HI64 | HF32 | HF64 | HBool | HBytes | HDyn | HArray _ | HType | HDynObj | HNull _ | HRef _ | HGUID -> () | HAbstract _ -> define ctx "#include "; | HFun (args,ret) | HMethod (args,ret) -> @@ -1138,7 +1140,7 @@ let make_types_idents htypes = let types_descs = ref PMap.empty in let rec make_desc t = match t with - | HVoid | HUI8 | HUI16 | HI32 | HI64 | HF32 | HF64 | HBool | HBytes | HDyn | HArray _ | HType | HRef _ | HDynObj | HNull _ -> + | HVoid | HUI8 | HUI16 | HI32 | HI64 | HF32 | HF64 | HBool | HBytes | HDyn | HArray _ | HType | HRef _ | HDynObj | HNull _ | HGUID -> DSimple t | HFun (tl,t) -> DFun (List.map make_desc tl, make_desc t, true) diff --git a/src/generators/hlcode.ml b/src/generators/hlcode.ml index ff7549792bc..ed2d67debc1 100644 --- a/src/generators/hlcode.ml +++ b/src/generators/hlcode.ml @@ -49,6 +49,7 @@ type ttype = | HMethod of ttype list * ttype | HStruct of class_proto | HPacked of ttype + | HGUID and class_proto = { pname : string; @@ -259,7 +260,7 @@ let list_mapi f l = let is_nullable t = match t with | HBytes | HDyn | HFun _ | HObj _ | HArray _ | HVirtual _ | HDynObj | HAbstract _ | HEnum _ | HNull _ | HRef _ | HType | HMethod _ | HStruct _ -> true - | HUI8 | HUI16 | HI32 | HI64 | HF32 | HF64 | HBool | HVoid | HPacked _ -> false + | HUI8 | HUI16 | HI32 | HI64 | HF32 | HF64 | HBool | HVoid | HPacked _ | HGUID -> false let is_struct = function | HStruct _ | HPacked _ -> true @@ -358,6 +359,8 @@ let rec safe_cast t1 t2 = List.for_all2 (fun t1 t2 -> safe_cast t2 t1 || (t1 = HDyn && is_dynamic t2)) args1 args2 && safe_cast t1 t2 | HArray t1,HArray t2 -> compatible_element_types t1 t2 + | (HI64|HGUID), (HI64|HGUID) -> + true | _ -> tsame t1 t2 @@ -490,6 +493,7 @@ let rec tstr ?(stack=[]) ?(detailed=false) t = "enum(" ^ e.ename ^ ")" | HNull t -> "null(" ^ tstr t ^ ")" | HPacked t -> "packed(" ^ tstr t ^ ")" + | HGUID -> "guid" let ostr fstr o = match o with diff --git a/src/generators/hlinterp.ml b/src/generators/hlinterp.ml index 82cf2afd5cd..b39fb97108a 100644 --- a/src/generators/hlinterp.ml +++ b/src/generators/hlinterp.ml @@ -1083,7 +1083,8 @@ let interp ctx f args = | HNull _ -> 19 | HMethod _ -> 20 | HStruct _ -> 21 - | HPacked _ -> 22))) + | HPacked _ -> 22 + | HGUID -> 23))) | _ -> Globals.die "" __LOC__); | ORef (r,v) -> set r (VRef (RStack (v + spos),rtype v)) diff --git a/std/hl/Api.hx b/std/hl/Api.hx index 0913fabed94..18cd3075135 100644 --- a/std/hl/Api.hx +++ b/std/hl/Api.hx @@ -52,4 +52,11 @@ extern class Api { #if (hl_ver >= version("1.13.0")) @:hlNative("?std", "sys_has_debugger") static function hasDebugger() : Bool; #end + #if (hl_ver >= version("1.15.0")) + @:hlNative("?std", "register_guid_name") private static function _registerGUIDName( guid : hl.I64, bytes : hl.Bytes ) : Void; + static inline function registerGUIDName( guid : GUID, name : String ) { + return _registerGUIDName(guid,@:privateAccess name.bytes); + } + #end + } diff --git a/std/hl/GUID.hx b/std/hl/GUID.hx new file mode 100644 index 00000000000..f3793099e54 --- /dev/null +++ b/std/hl/GUID.hx @@ -0,0 +1,25 @@ +/* + * Copyright (C)2005-2019 Haxe Foundation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package hl; + +@:coreType @:notNull @:runtimeValue abstract GUID to I64 from I64 {}