data-section #3
@ -24,27 +24,44 @@ func (parser *ParsingOperation) parseDataSection () (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	err = parser.nextToken(lexer.TokenKindColon)
 | 
						err = parser.nextToken(lexer.TokenKindColon)
 | 
				
			||||||
	if err != nil { return }
 | 
						if err != nil { return }
 | 
				
			||||||
 | 
						err = parser.nextToken()
 | 
				
			||||||
 | 
						if err != nil { return }
 | 
				
			||||||
	section.what, err = parser.parseType()
 | 
						section.what, err = parser.parseType()
 | 
				
			||||||
	if err != nil { return }
 | 
						if err != nil { return }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if parser.token.Is(lexer.TokenKindNewline) {
 | 
				
			||||||
 | 
							// TODO: parse arguments
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							var argument Argument
 | 
				
			||||||
 | 
							argument, err = parser.parseArgument()
 | 
				
			||||||
 | 
							section.value = append(section.value, argument)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							err = parser.expect(lexer.TokenKindNewline)
 | 
				
			||||||
 | 
							if err != nil { return }
 | 
				
			||||||
 | 
							err = parser.nextToken()
 | 
				
			||||||
 | 
							if err != nil { return }
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	return
 | 
						return
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// parseType parses a type notation of the form Name, {Name}, etc.
 | 
					// parseType parses a type notation of the form Name, {Name}, etc.
 | 
				
			||||||
func (parser *ParsingOperation) parseType () (what Type, err error) {
 | 
					func (parser *ParsingOperation) parseType () (what Type, err error) {
 | 
				
			||||||
	err = parser.nextToken(lexer.TokenKindName, lexer.TokenKindLBrace)
 | 
						err = parser.expect(lexer.TokenKindName, lexer.TokenKindLBrace)
 | 
				
			||||||
	if err != nil { return }
 | 
						if err != nil { return }
 | 
				
			||||||
	what.location = parser.token.Location()
 | 
						what.location = parser.token.Location()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if parser.token.Is(lexer.TokenKindLBrace) {
 | 
						if parser.token.Is(lexer.TokenKindLBrace) {
 | 
				
			||||||
		what.kind = TypeKindPointer
 | 
							what.kind = TypeKindPointer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							err = parser.nextToken()
 | 
				
			||||||
 | 
							if err != nil { return }
 | 
				
			||||||
 | 
						
 | 
				
			||||||
		var points Type
 | 
							var points Type
 | 
				
			||||||
		points, err = parser.parseType()
 | 
							points, err = parser.parseType()
 | 
				
			||||||
		if err != nil { return }
 | 
							if err != nil { return }
 | 
				
			||||||
		what.points = &points
 | 
							what.points = &points
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		err = parser.nextToken (
 | 
							err = parser.expect (
 | 
				
			||||||
			lexer.TokenKindUInt,
 | 
								lexer.TokenKindUInt,
 | 
				
			||||||
			lexer.TokenKindRBrace)
 | 
								lexer.TokenKindRBrace)
 | 
				
			||||||
		if err != nil { return }
 | 
							if err != nil { return }
 | 
				
			||||||
@ -54,18 +71,17 @@ func (parser *ParsingOperation) parseType () (what Type, err error) {
 | 
				
			|||||||
		
 | 
							
 | 
				
			||||||
			what.length = parser.token.Value().(uint64)
 | 
								what.length = parser.token.Value().(uint64)
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
			err = parser.nextToken (
 | 
								err = parser.nextToken(lexer.TokenKindRBrace)
 | 
				
			||||||
				lexer.TokenKindUInt,
 | 
					 | 
				
			||||||
				lexer.TokenKindRBrace)
 | 
					 | 
				
			||||||
			if err != nil { return }
 | 
								if err != nil { return }
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							err = parser.nextToken()
 | 
				
			||||||
 | 
							if err != nil { return }
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		what.name, err = parser.parseIdentifier()
 | 
							what.name, err = parser.parseIdentifier()
 | 
				
			||||||
		if err != nil { return }
 | 
							if err != nil { return }
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = parser.nextToken()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if parser.token.Is(lexer.TokenKindColon) {
 | 
						if parser.token.Is(lexer.TokenKindColon) {
 | 
				
			||||||
		err = parser.nextToken(lexer.TokenKindName)
 | 
							err = parser.nextToken(lexer.TokenKindName)
 | 
				
			||||||
		if err != nil { return }
 | 
							if err != nil { return }
 | 
				
			||||||
@ -80,6 +96,9 @@ func (parser *ParsingOperation) parseType () (what Type, err error) {
 | 
				
			|||||||
				file.ErrorKindError)
 | 
									file.ErrorKindError)
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							err = parser.nextToken()
 | 
				
			||||||
 | 
							if err != nil { return }
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return
 | 
						return
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user