diff options
Diffstat (limited to 'core')
| -rw-r--r-- | core/bind/core_bind.cpp | 7 | ||||
| -rw-r--r-- | core/bind/core_bind.h | 3 | ||||
| -rw-r--r-- | core/io/config_file.cpp | 8 | ||||
| -rw-r--r-- | core/io/http_client.cpp | 11 | ||||
| -rw-r--r-- | core/io/json.cpp | 2 | ||||
| -rw-r--r-- | core/os/file_access.h | 1 | ||||
| -rw-r--r-- | core/os/os.cpp | 2 | ||||
| -rw-r--r-- | core/os/os.h | 2 | ||||
| -rw-r--r-- | core/register_core_types.cpp | 2 | ||||
| -rw-r--r-- | core/ustring.cpp | 15 | ||||
| -rw-r--r-- | core/ustring.h | 1 | ||||
| -rw-r--r-- | core/variant_call.cpp | 6 | ||||
| -rw-r--r-- | core/variant_parser.cpp | 53 | ||||
| -rw-r--r-- | core/variant_parser.h | 6 |
14 files changed, 91 insertions, 28 deletions
diff --git a/core/bind/core_bind.cpp b/core/bind/core_bind.cpp index f1edc3d7d7..f951237971 100644 --- a/core/bind/core_bind.cpp +++ b/core/bind/core_bind.cpp @@ -494,8 +494,8 @@ uint64_t _OS::get_unix_time() const { return OS::get_singleton()->get_unix_time(); }; -uint64_t _OS::get_system_time_msec() const { - return OS::get_singleton()->get_system_time_msec(); +uint64_t _OS::get_system_time_secs() const { + return OS::get_singleton()->get_system_time_secs(); } void _OS::delay_usec(uint32_t p_usec) const { @@ -810,7 +810,7 @@ void _OS::_bind_methods() { ObjectTypeDB::bind_method(_MD("get_time","utc"),&_OS::get_time,DEFVAL(false)); ObjectTypeDB::bind_method(_MD("get_time_zone_info"),&_OS::get_time_zone_info); ObjectTypeDB::bind_method(_MD("get_unix_time"),&_OS::get_unix_time); - ObjectTypeDB::bind_method(_MD("get_system_time_msec"), &_OS::get_system_time_msec); + ObjectTypeDB::bind_method(_MD("get_system_time_secs"), &_OS::get_system_time_secs); ObjectTypeDB::bind_method(_MD("set_icon","icon"),&_OS::set_icon); @@ -1509,6 +1509,7 @@ void _File::_bind_methods() { BIND_CONSTANT( READ ); BIND_CONSTANT( WRITE ); BIND_CONSTANT( READ_WRITE ); + BIND_CONSTANT( WRITE_READ ); } _File::_File(){ diff --git a/core/bind/core_bind.h b/core/bind/core_bind.h index 172f33dac5..62572d7761 100644 --- a/core/bind/core_bind.h +++ b/core/bind/core_bind.h @@ -208,7 +208,7 @@ public: Dictionary get_time(bool utc) const; Dictionary get_time_zone_info() const; uint64_t get_unix_time() const; - uint64_t get_system_time_msec() const; + uint64_t get_system_time_secs() const; int get_static_memory_usage() const; int get_static_memory_peak_usage() const; @@ -329,6 +329,7 @@ public: READ=1, WRITE=2, READ_WRITE=3, + WRITE_READ=7, }; Error open_encrypted(const String& p_path, int p_mode_flags,const Vector<uint8_t>& p_key); diff --git a/core/io/config_file.cpp b/core/io/config_file.cpp index a01e935baa..fd20ec9404 100644 --- a/core/io/config_file.cpp +++ b/core/io/config_file.cpp @@ -127,6 +127,8 @@ Error ConfigFile::save(const String& p_path){ FileAccess *file = FileAccess::open(p_path,FileAccess::WRITE,&err); if (err) { + if (file) + memdelete(file); return err; } @@ -177,9 +179,11 @@ Error ConfigFile::load(const String& p_path) { next_tag.fields.clear(); next_tag.name=String(); - err = VariantParser::parse_tag_assign_eof(&stream,lines,error_text,next_tag,assign,value,NULL); - if (err==ERR_FILE_EOF) + err = VariantParser::parse_tag_assign_eof(&stream,lines,error_text,next_tag,assign,value,NULL,true); + if (err==ERR_FILE_EOF) { + memdelete(f); return OK; + } else if (err!=OK) { ERR_PRINTS("ConfgFile::load - "+p_path+":"+itos(lines)+" error: "+error_text); memdelete(f); diff --git a/core/io/http_client.cpp b/core/io/http_client.cpp index 4d8cf121ee..19a7286dcf 100644 --- a/core/io/http_client.cpp +++ b/core/io/http_client.cpp @@ -248,7 +248,7 @@ Error HTTPClient::poll(){ status=STATUS_SSL_HANDSHAKE_ERROR; return ERR_CANT_CONNECT; } - print_line("SSL! TURNED ON!"); + //print_line("SSL! TURNED ON!"); connection=ssl; } status=STATUS_CONNECTED; @@ -295,7 +295,7 @@ Error HTTPClient::poll(){ response_str.push_back(0); String response; response.parse_utf8((const char*)response_str.ptr()); - print_line("END OF RESPONSE? :\n"+response+"\n------"); + //print_line("END OF RESPONSE? :\n"+response+"\n------"); Vector<String> responses = response.split("\n"); body_size=0; chunked=false; @@ -307,16 +307,17 @@ Error HTTPClient::poll(){ for(int i=0;i<responses.size();i++) { String s = responses[i].strip_edges(); + s = s.to_lower(); if (s.length()==0) continue; - if (s.begins_with("Content-Length:")) { + if (s.begins_with("content-length:")) { body_size = s.substr(s.find(":")+1,s.length()).strip_edges().to_int(); body_left=body_size; } - if (s.begins_with("Transfer-Encoding:")) { + if (s.begins_with("transfer-encoding:")) { String encoding = s.substr(s.find(":")+1,s.length()).strip_edges(); - print_line("TRANSFER ENCODING: "+encoding); + //print_line("TRANSFER ENCODING: "+encoding); if (encoding=="chunked") { chunked=true; } diff --git a/core/io/json.cpp b/core/io/json.cpp index 45a97ed720..f9a8638d06 100644 --- a/core/io/json.cpp +++ b/core/io/json.cpp @@ -86,7 +86,7 @@ String JSON::_print_var(const Variant& p_var) { s+="}"; return s; }; - default: return "\""+String(p_var).c_escape()+"\""; + default: return "\""+String(p_var).json_escape()+"\""; } diff --git a/core/os/file_access.h b/core/os/file_access.h index 35514a129f..51cf839117 100644 --- a/core/os/file_access.h +++ b/core/os/file_access.h @@ -78,6 +78,7 @@ public: READ=1, WRITE=2, READ_WRITE=3, + WRITE_READ=7, }; virtual void close()=0; ///< close a file diff --git a/core/os/os.cpp b/core/os/os.cpp index 9ff1eeb9f7..be447d511e 100644 --- a/core/os/os.cpp +++ b/core/os/os.cpp @@ -50,7 +50,7 @@ uint64_t OS::get_unix_time() const { return 0; }; -uint64_t OS::get_system_time_msec() const { +uint64_t OS::get_system_time_secs() const { return 0; } void OS::debug_break() { diff --git a/core/os/os.h b/core/os/os.h index 670695f83a..83ea2c2101 100644 --- a/core/os/os.h +++ b/core/os/os.h @@ -256,7 +256,7 @@ public: virtual Time get_time(bool local=false) const=0; virtual TimeZoneInfo get_time_zone_info() const=0; virtual uint64_t get_unix_time() const; - virtual uint64_t get_system_time_msec() const; + virtual uint64_t get_system_time_secs() const; virtual void delay_usec(uint32_t p_usec) const=0; virtual uint64_t get_ticks_usec() const=0; diff --git a/core/register_core_types.cpp b/core/register_core_types.cpp index fb17156df4..d977ea3e18 100644 --- a/core/register_core_types.cpp +++ b/core/register_core_types.cpp @@ -101,10 +101,12 @@ void register_core_types() { resource_loader_binary = memnew( ResourceFormatLoaderBinary ); ResourceLoader::add_resource_format_loader(resource_loader_binary); +#ifdef XML_ENABLED resource_saver_xml = memnew( ResourceFormatSaverXML ); ResourceSaver::add_resource_format_saver(resource_saver_xml); resource_loader_xml = memnew( ResourceFormatLoaderXML ); ResourceLoader::add_resource_format_loader(resource_loader_xml); +#endif ObjectTypeDB::register_type<Object>(); diff --git a/core/ustring.cpp b/core/ustring.cpp index 21c0d78fdb..ee750c39e5 100644 --- a/core/ustring.cpp +++ b/core/ustring.cpp @@ -3158,6 +3158,21 @@ String String::c_escape() const { return escaped; } +String String::json_escape() const { + + String escaped=*this; + escaped=escaped.replace("\\","\\\\"); + escaped=escaped.replace("\b","\\b"); + escaped=escaped.replace("\f","\\f"); + escaped=escaped.replace("\n","\\n"); + escaped=escaped.replace("\r","\\r"); + escaped=escaped.replace("\t","\\t"); + escaped=escaped.replace("\v","\\v"); + escaped=escaped.replace("\"","\\\""); + + return escaped; +} + String String::xml_escape(bool p_escape_quotes) const { String str=*this; diff --git a/core/ustring.h b/core/ustring.h index 2b967d368a..9276afa0f7 100644 --- a/core/ustring.h +++ b/core/ustring.h @@ -211,6 +211,7 @@ public: String http_unescape() const; String c_escape() const; String c_unescape() const; + String json_escape() const; String world_wrap(int p_chars_per_line) const; String percent_encode() const; diff --git a/core/variant_call.cpp b/core/variant_call.cpp index 2122640be8..90f868c866 100644 --- a/core/variant_call.cpp +++ b/core/variant_call.cpp @@ -272,6 +272,9 @@ static void _call_##m_type##_##m_method(Variant& r_ret,Variant& p_self,const Var VCALL_LOCALMEM0R(String,get_file); VCALL_LOCALMEM0R(String,xml_escape); VCALL_LOCALMEM0R(String,xml_unescape); + VCALL_LOCALMEM0R(String,c_escape); + VCALL_LOCALMEM0R(String,c_unescape); + VCALL_LOCALMEM0R(String,json_escape); VCALL_LOCALMEM0R(String,percent_encode); VCALL_LOCALMEM0R(String,percent_decode); VCALL_LOCALMEM0R(String,is_valid_identifier); @@ -1286,6 +1289,9 @@ _VariantCall::addfunc(Variant::m_vtype,Variant::m_ret,_SCS(#m_method),VCALL(m_cl ADDFUNC0(STRING,STRING,String,get_file,varray()); ADDFUNC0(STRING,STRING,String,xml_escape,varray()); ADDFUNC0(STRING,STRING,String,xml_unescape,varray()); + ADDFUNC0(STRING,STRING,String,c_escape,varray()); + ADDFUNC0(STRING,STRING,String,c_unescape,varray()); + ADDFUNC0(STRING,STRING,String,json_escape,varray()); ADDFUNC0(STRING,STRING,String,percent_encode,varray()); ADDFUNC0(STRING,STRING,String,percent_decode,varray()); ADDFUNC0(STRING,BOOL,String,is_valid_identifier,varray()); diff --git a/core/variant_parser.cpp b/core/variant_parser.cpp index 5ca0984103..3efa87de80 100644 --- a/core/variant_parser.cpp +++ b/core/variant_parser.cpp @@ -448,7 +448,7 @@ Error VariantParser::_parse_construct(Stream *p_stream,Vector<T>& r_construct,in if (!first) { get_token(p_stream,token,line,r_err_str); if (token.type==TK_COMMA) { - //do none + //do none } else if (token.type==TK_PARENTHESIS_CLOSE) { break; } else { @@ -458,7 +458,10 @@ Error VariantParser::_parse_construct(Stream *p_stream,Vector<T>& r_construct,in } } get_token(p_stream,token,line,r_err_str); - if (token.type!=TK_NUMBER) { + + if (first && token.type==TK_PARENTHESIS_CLOSE) { + break; + } else if (token.type!=TK_NUMBER) { r_err_str="Expected float in constructor"; return ERR_PARSE_ERROR; } @@ -1189,7 +1192,7 @@ Error VariantParser::parse_value(Token& token,Variant &value,Stream *p_stream,in get_token(p_stream,token,line,r_err_str); if (token.type==TK_COMMA) { //do none - } else if (token.type!=TK_PARENTHESIS_CLOSE) { + } else if (token.type==TK_PARENTHESIS_CLOSE) { break; } else { r_err_str="Expected ',' or ')'"; @@ -1198,11 +1201,13 @@ Error VariantParser::parse_value(Token& token,Variant &value,Stream *p_stream,in } } get_token(p_stream,token,line,r_err_str); + if (token.type!=TK_STRING) { - r_err_str="Expected string"; + r_err_str="Expected string"; return ERR_PARSE_ERROR; } + first=false; cs.push_back(token.value); } @@ -1580,7 +1585,7 @@ Error VariantParser::_parse_dictionary(Dictionary &object, Stream *p_stream, int } -Error VariantParser::_parse_tag(Token& token, Stream *p_stream, int &line, String &r_err_str, Tag& r_tag, ResourceParser *p_res_parser) { +Error VariantParser::_parse_tag(Token& token, Stream *p_stream, int &line, String &r_err_str, Tag& r_tag, ResourceParser *p_res_parser,bool p_simple_tag) { r_tag.fields.clear(); @@ -1590,6 +1595,29 @@ Error VariantParser::_parse_tag(Token& token, Stream *p_stream, int &line, Strin } + if (p_simple_tag) { + + r_tag.name=""; + r_tag.fields.clear(); + + while(true) { + + CharType c = p_stream->get_char(); + if (p_stream->is_eof()) { + r_err_str="Unexpected EOF while parsing simple tag"; + return ERR_PARSE_ERROR; + } + if (c==']') + break; + r_tag.name+=String::chr(c); + } + + r_tag.name = r_tag.name.strip_edges(); + + return OK; + + } + get_token(p_stream,token,line,r_err_str); @@ -1654,7 +1682,7 @@ Error VariantParser::_parse_tag(Token& token, Stream *p_stream, int &line, Strin } -Error VariantParser::parse_tag(Stream *p_stream, int &line, String &r_err_str, Tag& r_tag, ResourceParser *p_res_parser) { +Error VariantParser::parse_tag(Stream *p_stream, int &line, String &r_err_str, Tag& r_tag, ResourceParser *p_res_parser, bool p_simple_tag) { Token token; get_token(p_stream,token,line,r_err_str); @@ -1668,11 +1696,11 @@ Error VariantParser::parse_tag(Stream *p_stream, int &line, String &r_err_str, T return ERR_PARSE_ERROR; } - return _parse_tag(token,p_stream,line,r_err_str,r_tag,p_res_parser); + return _parse_tag(token,p_stream,line,r_err_str,r_tag,p_res_parser,p_simple_tag); } -Error VariantParser::parse_tag_assign_eof(Stream *p_stream, int &line, String &r_err_str, Tag& r_tag, String &r_assign, Variant &r_value, ResourceParser *p_res_parser) { +Error VariantParser::parse_tag_assign_eof(Stream *p_stream, int &line, String &r_err_str, Tag& r_tag, String &r_assign, Variant &r_value, ResourceParser *p_res_parser, bool p_simple_tag) { //assign.. @@ -1710,7 +1738,7 @@ Error VariantParser::parse_tag_assign_eof(Stream *p_stream, int &line, String &r //it's a tag! p_stream->saved='['; //go back one - Error err = parse_tag(p_stream,line,r_err_str,r_tag,p_res_parser); + Error err = parse_tag(p_stream,line,r_err_str,r_tag,p_res_parser,p_simple_tag); return err; } @@ -1776,7 +1804,10 @@ Error VariantWriter::write(const Variant& p_variant, StoreStringFunc p_store_str } break; case Variant::REAL: { - p_store_string_func(p_store_string_ud, rtoss(p_variant.operator real_t()) ); + String s = rtoss(p_variant.operator real_t()); + if (s.find(".")==-1 && s.find("e")==-1) + s+=".0"; + p_store_string_func(p_store_string_ud, s ); } break; case Variant::STRING: { @@ -2095,7 +2126,7 @@ Error VariantWriter::write(const Variant& p_variant, StoreStringFunc p_store_str if (i>0) p_store_string_func(p_store_string_ud,", "); String str=ptr[i]; - p_store_string_func(p_store_string_ud,""+str.c_escape()+"\""); + p_store_string_func(p_store_string_ud,"\""+str.c_escape()+"\""); } p_store_string_func(p_store_string_ud," )"); diff --git a/core/variant_parser.h b/core/variant_parser.h index 0912271537..00f6910b29 100644 --- a/core/variant_parser.h +++ b/core/variant_parser.h @@ -104,12 +104,12 @@ private: static Error _parse_enginecfg(Stream *p_stream, Vector<String>& strings, int &line, String &r_err_str); static Error _parse_dictionary(Dictionary &object, Stream *p_stream, int &line, String &r_err_str,ResourceParser *p_res_parser=NULL); static Error _parse_array(Array &array, Stream *p_stream, int &line, String &r_err_str,ResourceParser *p_res_parser=NULL); - static Error _parse_tag(Token& token,Stream *p_stream, int &line, String &r_err_str,Tag& r_tag,ResourceParser *p_res_parser=NULL); + static Error _parse_tag(Token& token,Stream *p_stream, int &line, String &r_err_str,Tag& r_tag,ResourceParser *p_res_parser=NULL,bool p_simple_tag=false); public: - static Error parse_tag(Stream *p_stream, int &line, String &r_err_str,Tag& r_tag,ResourceParser *p_res_parser=NULL); - static Error parse_tag_assign_eof(Stream *p_stream, int &line, String &r_err_str, Tag& r_tag, String &r_assign, Variant &r_value,ResourceParser *p_res_parser=NULL); + static Error parse_tag(Stream *p_stream, int &line, String &r_err_str,Tag& r_tag,ResourceParser *p_res_parser=NULL,bool p_simple_tag=false); + static Error parse_tag_assign_eof(Stream *p_stream, int &line, String &r_err_str, Tag& r_tag, String &r_assign, Variant &r_value,ResourceParser *p_res_parser=NULL,bool p_simple_tag=false); static Error parse_value(Token& token,Variant &value, Stream *p_stream, int &line, String &r_err_str,ResourceParser *p_res_parser=NULL); static Error get_token(Stream *p_stream,Token& r_token,int &line,String &r_err_str); |