ParseBody now has a loop, and errors on unrecognized section type
This commit is contained in:
		
							parent
							
								
									d081f363b1
								
							
						
					
					
						commit
						85b7938843
					
				| @ -1,26 +1,34 @@ | ||||
| package parser | ||||
| 
 | ||||
| import "git.tebibyte.media/sashakoshka/arf/file" | ||||
| import "git.tebibyte.media/sashakoshka/arf/lexer" | ||||
| 
 | ||||
| // parse body parses the body of an arf file, after the metadata header. | ||||
| func (parser *ParsingOperation) parseBody () (err error) { | ||||
| 	err = parser.nextToken(lexer.TokenKindName) | ||||
| 	if err != nil { return } | ||||
| 
 | ||||
| 	switch parser.token.Value().(string) { | ||||
| 	case "data": | ||||
| 		var section *DataSection | ||||
| 		section, err = parser.parseDataSection() | ||||
| 	for { | ||||
| 		err = parser.expect(lexer.TokenKindName) | ||||
| 		if err != nil { return } | ||||
| 		if parser.tree.dataSections == nil { | ||||
| 			parser.tree.dataSections = make(map[string] *DataSection) | ||||
| 		} | ||||
| 		parser.tree.dataSections[section.name] = section | ||||
| 	case "type": | ||||
| 	case "face": | ||||
| 	case "enum": | ||||
| 	case "func": | ||||
| 	} | ||||
| 
 | ||||
| 	return | ||||
| 		sectionType := parser.token.Value().(string) | ||||
| 		switch sectionType { | ||||
| 		case "data": | ||||
| 			var section *DataSection | ||||
| 			section, err = parser.parseDataSection() | ||||
| 			if err != nil { return } | ||||
| 			if parser.tree.dataSections == nil { | ||||
| 				parser.tree.dataSections = | ||||
| 					make(map[string] *DataSection) | ||||
| 			} | ||||
| 			parser.tree.dataSections[section.name] = section | ||||
| 		case "type": | ||||
| 		case "face": | ||||
| 		case "enum": | ||||
| 		case "func": | ||||
| 		default: | ||||
| 			err = parser.token.NewError ( | ||||
| 				"unknown section type \"" + sectionType + "\"", | ||||
| 				file.ErrorKindError) | ||||
| 			return | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user