| 88 | } |
| 89 | |
| 90 | bool ScriptReader::readOne(UInt8 type,DataWriter& writer) { |
| 91 | |
| 92 | SCRIPT_BEGIN(_pState) |
| 93 | |
| 94 | UInt32 reference((Mona::UInt64)lua_topointer(_pState, _current)); |
| 95 | if (reference && tryToRepeat(writer, reference)) { |
| 96 | ++_current; |
| 97 | return true; |
| 98 | } |
| 99 | |
| 100 | switch (type) { |
| 101 | |
| 102 | case STRING: { |
| 103 | writer.writeString(lua_tostring(_pState, _current), lua_objlen(_pState, _current)); |
| 104 | ++_current; |
| 105 | return true; |
| 106 | } |
| 107 | case BOOLEAN: |
| 108 | writer.writeBoolean(lua_toboolean(_pState,_current++)==0 ? false : true); |
| 109 | return true; |
| 110 | case NUMBER: |
| 111 | writer.writeNumber(lua_tonumber(_pState,_current++)); |
| 112 | return true; |
| 113 | case NIL: |
| 114 | writer.writeNull(); |
| 115 | ++_current; |
| 116 | return true; |
| 117 | |
| 118 | case BYTES: |
| 119 | lua_getfield(_pState, _current++, "__raw"); |
| 120 | writeBytes(writer,reference,(const UInt8*)lua_tostring(_pState,-1),lua_objlen(_pState,-1)); |
| 121 | lua_pop(_pState,1); |
| 122 | return true; |
| 123 | |
| 124 | case DATE: { |
| 125 | lua_getfield(_pState, _current++, "__time"); |
| 126 | Date date((Int64)lua_tonumber(_pState, -1)); |
| 127 | writeDate(writer,reference,date); |
| 128 | lua_pop(_pState,1); |
| 129 | return true; |
| 130 | } |
| 131 | |
| 132 | } |
| 133 | |
| 134 | bool object=true; |
| 135 | bool started=false; |
| 136 | Reference* pReference(NULL); |
| 137 | UInt32 size(0); |
| 138 | |
| 139 | // Dictionary |
| 140 | lua_getfield(_pState,_current,"__size"); |
| 141 | if(lua_isnumber(_pState,-1)) { |
| 142 | size = (UInt32)lua_tonumber(_pState,-1); |
| 143 | |
| 144 | bool weakKeys = false; |
| 145 | if(lua_getmetatable(_pState,_current)!=0) { |
| 146 | lua_getfield(_pState,-1,"__mode"); |
| 147 | if(lua_isstring(_pState,-1) && strcmp(lua_tostring(_pState,-1),"k")==0) |
nothing calls this directly
no test coverage detected