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 | package parser | ||||||
| 
 | 
 | ||||||
|  | import "git.tebibyte.media/sashakoshka/arf/file" | ||||||
| import "git.tebibyte.media/sashakoshka/arf/lexer" | import "git.tebibyte.media/sashakoshka/arf/lexer" | ||||||
| 
 | 
 | ||||||
| // parse body parses the body of an arf file, after the metadata header. | // parse body parses the body of an arf file, after the metadata header. | ||||||
| func (parser *ParsingOperation) parseBody () (err error) { | func (parser *ParsingOperation) parseBody () (err error) { | ||||||
| 	err = parser.nextToken(lexer.TokenKindName) | 	for { | ||||||
| 	if err != nil { return } | 		err = parser.expect(lexer.TokenKindName) | ||||||
| 
 |  | ||||||
| 	switch parser.token.Value().(string) { |  | ||||||
| 	case "data": |  | ||||||
| 		var section *DataSection |  | ||||||
| 		section, err = parser.parseDataSection() |  | ||||||
| 		if err != nil { return } | 		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