| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 | 
function _hx_print_class(obj, depth)    local first = true    local result = ''    for k,v in pairs(obj) do        if _hx_hidden[k] == nil then            if first then                first = false            else                result = result .. ', '            end            if _hx_hidden[k] == nil then                result = result .. k .. ':' .. _hx_tostring(v, depth+1)            end        end    end    return '{ ' .. result .. ' }'endfunction _hx_print_enum(o, depth)    if o.length == 2 then        return o[0]    else        local str = o[0] .. "("        for i = 2, (o.length-1) do            if i ~= 2 then                str = str .. "," .. _hx_tostring(o[i], depth+1)            else                str = str .. _hx_tostring(o[i], depth+1)            end        end        return str .. ")"    endendfunction _hx_tostring(obj, depth)    if depth == nil then        depth = 0    elseif depth > 5 then        return "<...>"    end    local tstr = _G.type(obj)    if tstr == "string" then return obj    elseif tstr == "nil" then return "null"    elseif tstr == "number" then        if obj == _G.math.POSITIVE_INFINITY then return "Infinity"        elseif obj == _G.math.NEGATIVE_INFINITY then return "-Infinity"        elseif obj == 0 then return "0"        elseif obj ~= obj then return "NaN"        else return _G.tostring(obj)        end    elseif tstr == "boolean" then return _G.tostring(obj)    elseif tstr == "userdata" then        local mt = _G.getmetatable(obj)        if mt ~= nil and mt.__tostring ~= nil then            return _G.tostring(obj)        else            return "<userdata>"        end    elseif tstr == "function" then return "<function>"    elseif tstr == "thread" then return "<thread>"    elseif tstr == "table" then        if obj.__enum__ ~= nil then            return _hx_print_enum(obj, depth)        elseif obj.toString ~= nil and not _hx_is_array(obj) then return obj:toString()        elseif _hx_is_array(obj) then            if obj.length > 5 then                return "[...]"            else                local str = ""                for i=0, (obj.length-1) do                    if i == 0 then                        str = str .. _hx_tostring(obj[i], depth+1)                    else                        str = str .. "," .. _hx_tostring(obj[i], depth+1)                    end                end                return "[" .. str .. "]"            end        elseif obj.__class__ ~= nil then            return _hx_print_class(obj, depth)        else            local buffer = {}            local ref = obj            if obj.__fields__ ~= nil then                ref = obj.__fields__            end            for k,v in pairs(ref) do                if _hx_hidden[k] == nil then                    _G.table.insert(buffer, _hx_tostring(k, depth+1) .. ' : ' .. _hx_tostring(obj[k], depth+1))                end            end            return "{ " .. table.concat(buffer, ", ") .. " }"        end    else        _G.error("Unknown Lua type", 0)        return ""    endend
 |