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 .. ' }' end function _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 .. ")" end end function _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 "" end elseif tstr == "function" then return "" elseif tstr == "thread" then return "" 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 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 first = true buffer = {} for k,v in pairs(obj) 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 "" end end function _hx_error(obj) print(obj) if obj.value then _G.print("Runtime Error: " .. _hx_tostring(obj.value)); else _G.print("Runtime Error: " .. tostring(obj)); end if _G.debug and _G.debug.traceback then _G.print(debug.traceback()); end end