| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -16,7 +16,7 @@ namespace Bk::Json | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    Parser::Parser(const char* str, int length) | 
					 | 
					 | 
					 | 
					    Parser::Parser(const char* str, int length) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    { | 
					 | 
					 | 
					 | 
					    { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        Type::DataStream data; | 
					 | 
					 | 
					 | 
					        Type::DataStream data; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        data.payload = std::vector<char>(str, str + length); | 
					 | 
					 | 
					 | 
					        data.push<char>(str, length); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        data.reverse(); | 
					 | 
					 | 
					 | 
					        data.reverse(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        lexer = Lexer(data); | 
					 | 
					 | 
					 | 
					        lexer = Lexer(data); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    } | 
					 | 
					 | 
					 | 
					    } | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -41,36 +41,31 @@ namespace Bk::Json | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    case TokenType::CURLY_OPEN: 
 | 
					 | 
					 | 
					 | 
					                    case TokenType::CURLY_OPEN: 
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    { | 
					 | 
					 | 
					 | 
					                    { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                        std::shared_ptr<Json::Node> parsed_object = parse_object(); | 
					 | 
					 | 
					 | 
					                        std::shared_ptr<Json::Node> parsed_object = parse_object(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                        if (!root) { | 
					 | 
					 | 
					 | 
					                        root = parsed_object; | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                            root = parsed_object; | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                        } | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                        break; | 
					 | 
					 | 
					 | 
					                        break; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    } | 
					 | 
					 | 
					 | 
					                    } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    case TokenType::ARRAY_OPEN: { | 
					 | 
					 | 
					 | 
					                    case TokenType::ARRAY_OPEN: 
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                    { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                        std::shared_ptr<Json::Node> parsed_list = parse_list(); | 
					 | 
					 | 
					 | 
					                        std::shared_ptr<Json::Node> parsed_list = parse_list(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                        if (!root) { | 
					 | 
					 | 
					 | 
					                        root = parsed_list; | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                            root = parsed_list; | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                        } | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                        break; | 
					 | 
					 | 
					 | 
					                        break; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    } | 
					 | 
					 | 
					 | 
					                    } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    case TokenType::STRING: { | 
					 | 
					 | 
					 | 
					                    case TokenType::STRING: 
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                        
 | 
					 | 
					 | 
					 | 
					                    { | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                        std::shared_ptr<Json::Node> parsed_string = parse_string(); | 
					 | 
					 | 
					 | 
					                        std::shared_ptr<Json::Node> parsed_string = parse_string(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                        if (!root) { | 
					 | 
					 | 
					 | 
					                        root = parsed_string; | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                            root = parsed_string; | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                        } | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                        break; | 
					 | 
					 | 
					 | 
					                        break; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    } | 
					 | 
					 | 
					 | 
					                    } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    case TokenType::NUMBER: { | 
					 | 
					 | 
					 | 
					                    case TokenType::NUMBER: 
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                    { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                        std::shared_ptr<Json::Node> parsed_number = parse_number(); | 
					 | 
					 | 
					 | 
					                        std::shared_ptr<Json::Node> parsed_number = parse_number(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                        if (!root) { | 
					 | 
					 | 
					 | 
					                        root = parsed_number; | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                            root = parsed_number; | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                        } | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                        break; | 
					 | 
					 | 
					 | 
					                        break; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    } | 
					 | 
					 | 
					 | 
					                    } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    
 | 
					 | 
					 | 
					 | 
					                    
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    case TokenType::BOOLEAN: { | 
					 | 
					 | 
					 | 
					                    case TokenType::BOOLEAN: 
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                    { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                        std::shared_ptr<Json::Node> parsed_boolean = parse_boolean(); | 
					 | 
					 | 
					 | 
					                        std::shared_ptr<Json::Node> parsed_boolean = parse_boolean(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                        break; | 
					 | 
					 | 
					 | 
					                        break; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    } | 
					 | 
					 | 
					 | 
					                    } | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -91,7 +86,7 @@ namespace Bk::Json | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    std::shared_ptr<Json::Node> Parser::parse_list() 
 | 
					 | 
					 | 
					 | 
					    std::shared_ptr<Json::Node> Parser::parse_list() 
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    { | 
					 | 
					 | 
					 | 
					    { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        std::shared_ptr<Json::Node> node = std::make_shared<Json::Node>(); | 
					 | 
					 | 
					 | 
					        std::shared_ptr<Json::Node> node = std::make_shared<Json::Node>(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        Json::List *list = new Json::List(); | 
					 | 
					 | 
					 | 
					        Json::List* list = new Json::List(); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        bool has_completed = false; | 
					 | 
					 | 
					 | 
					        bool has_completed = false; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        Token next_token; | 
					 | 
					 | 
					 | 
					        Token next_token; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        while (!has_completed) { | 
					 | 
					 | 
					 | 
					        while (!has_completed) { | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -104,6 +99,10 @@ namespace Bk::Json | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                next_token = lexer.get_token(); | 
					 | 
					 | 
					 | 
					                next_token = lexer.get_token(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                if (next_token.type == TokenType::COLON || next_token.type == TokenType::COMMA) | 
					 | 
					 | 
					 | 
					                if (next_token.type == TokenType::COLON || next_token.type == TokenType::COMMA) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    continue; | 
					 | 
					 | 
					 | 
					                    continue; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                if (next_token.type == TokenType::ARRAY_CLOSE) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                    has_completed = true; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                    break; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                std::shared_ptr<Json::Node> node; | 
					 | 
					 | 
					 | 
					                std::shared_ptr<Json::Node> node; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                switch (next_token.type) 
 | 
					 | 
					 | 
					 | 
					                switch (next_token.type) 
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                { | 
					 | 
					 | 
					 | 
					                { | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -138,9 +137,6 @@ namespace Bk::Json | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    } | 
					 | 
					 | 
					 | 
					                    } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                } | 
					 | 
					 | 
					 | 
					                } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                list->push_back(node); | 
					 | 
					 | 
					 | 
					                list->push_back(node); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                if (next_token.type == TokenType::ARRAY_CLOSE) { | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    has_completed = true; | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                } | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            } | 
					 | 
					 | 
					 | 
					            } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        } | 
					 | 
					 | 
					 | 
					        } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        node->set_list(list); | 
					 | 
					 | 
					 | 
					        node->set_list(list); | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |