From a3603b5cc6abd098c637f9daf1f2d88f376bc044 Mon Sep 17 00:00:00 2001 From: fesily Date: Tue, 17 Jan 2023 11:36:38 +0800 Subject: [PATCH 1/2] add ffi-reflect doc --- meta/3rd/ffi-reflect/config.json | 3 + meta/3rd/ffi-reflect/library/reflect.lua | 126 +++++++++++++++++++++++ 2 files changed, 129 insertions(+) create mode 100644 meta/3rd/ffi-reflect/config.json create mode 100644 meta/3rd/ffi-reflect/library/reflect.lua diff --git a/meta/3rd/ffi-reflect/config.json b/meta/3rd/ffi-reflect/config.json new file mode 100644 index 000000000..544b7b4dd --- /dev/null +++ b/meta/3rd/ffi-reflect/config.json @@ -0,0 +1,3 @@ +{ + +} \ No newline at end of file diff --git a/meta/3rd/ffi-reflect/library/reflect.lua b/meta/3rd/ffi-reflect/library/reflect.lua new file mode 100644 index 000000000..1a24eaa68 --- /dev/null +++ b/meta/3rd/ffi-reflect/library/reflect.lua @@ -0,0 +1,126 @@ +---@meta + +---@alias ffi.typeinfo.what "int" +---|"void" +---|"float" +---|"enum" +---|"constant" +---|"ptr" +---|"ref" +---|"array" +---|"struct" +---|"union" +---|"func" +---|"field" +---|"bitfield" +---|"typedef" + +---@class ffi.typeinfo +---@field what ffi.typeinfo.what + +---@class ffi.enuminfo : ffi.typeinfo +---@field name string? +---@field size number|string +---@field alignment number +---@field type ffi.typeinfo +local enuminfo = {} + +---@return ffi.constantinfo[] +function enuminfo:values() +end + +---@return ffi.constantinfo +function enuminfo:value(name_or_index) +end + +---@class ffi.funcinfo : ffi.typeinfo +---@field name string? +---@field sym_name string? +---@field return_type ffi.funcinfo +---@field nargs integer +---@field vararg boolean +---@field sse_reg_params boolean +---@field convention "cdecl"|"thiscall"|"fastcall"|"stdcall" +local funcinfo = {} + +---@return ffi.fieldinfo[] +function funcinfo:arguments() +end + +---@return ffi.fieldinfo +function funcinfo:argument(name_or_index) +end + +---@class ffi.unioninfo : ffi.typeinfo +---@field name string? +---@field size integer +---@field alignment number +---@field const boolean +---@field volatile boolean +---@field transparent boolean +local unioninfo = {} + +---@return ffi.typeinfo[] +function unioninfo:members() +end + +---@return ffi.typeinfo +function unioninfo:member(name_or_index) +end + +---@class ffi.structinfo : ffi.unioninfo +---@field vla boolean + +---@class ffi.floatinfo : ffi.typeinfo +---@field size integer +---@field alignment number +---@field const boolean +---@field volatile boolean + +---@alias ffi.voidinfo ffi.floatinfo + +---@class ffi.intinfo : ffi.floatinfo +---@field bool boolean +---@field unsigned boolean +---@field long boolean + +---@class ffi.constantinfo : ffi.typeinfo +---@field name string? +---@field type ffi.typeinfo +---@field value integer + +---@class ffi.ptrinfo : ffi.typeinfo +---@field size integer +---@field alignment number +---@field const boolean +---@field volatile boolean +---@field element_type ffi.typeinfo + +---@alias ffi.refinfo ffi.ptrinfo + +---@class ffi.arrayinfo : ffi.ptrinfo +---@field vla boolean +---@field vector boolean +---@field complex boolean + +---@class ffi.fieldinfo : ffi.typeinfo +---@field name string? +---@field offset number +---@field type ffi.typeinfo + +---@class ffi.bitfield : ffi.fieldinfo +---@field size integer|string + +local reflect = {} + +---reflection cdata c defined +---@param v ffi.cdata* +---@return ffi.typeinfo +function reflect.typeof(v) +end + +---try get cdata metatable +---@param v ffi.cdata* +---@return table +function reflect.getmetatable(v) +end \ No newline at end of file From 2c72eb8fe458412ca48c7c0d73f1f7f14c952243 Mon Sep 17 00:00:00 2001 From: fesily Date: Tue, 17 Jan 2023 11:37:54 +0800 Subject: [PATCH 2/2] doc add return --- meta/3rd/ffi-reflect/library/reflect.lua | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/meta/3rd/ffi-reflect/library/reflect.lua b/meta/3rd/ffi-reflect/library/reflect.lua index 1a24eaa68..8a9b759c2 100644 --- a/meta/3rd/ffi-reflect/library/reflect.lua +++ b/meta/3rd/ffi-reflect/library/reflect.lua @@ -123,4 +123,6 @@ end ---@param v ffi.cdata* ---@return table function reflect.getmetatable(v) -end \ No newline at end of file +end + +return reflect \ No newline at end of file