Some stuff on the func sections babey
This commit is contained in:
		
							parent
							
								
									a9a1c6ae9b
								
							
						
					
					
						commit
						5641220986
					
				| @ -131,6 +131,8 @@ func (analyzer *analysisOperation) fetchSection ( | ||||
| 		section, err = analyzer.analyzeDataSection() | ||||
| 		if err != nil { return} | ||||
| 	case parser.FuncSection: | ||||
| 		section, err = analyzer.analyzeFuncSection() | ||||
| 		if err != nil { return} | ||||
| 	} | ||||
| 	 | ||||
| 	return | ||||
|  | ||||
| @ -1,14 +1,60 @@ | ||||
| package analyzer | ||||
| 
 | ||||
| import "git.tebibyte.media/arf/arf/types" | ||||
| import "git.tebibyte.media/arf/arf/parser" | ||||
| import "git.tebibyte.media/arf/arf/infoerr" | ||||
| 
 | ||||
| // FuncSection represents a type definition section. | ||||
| type FuncSection struct { | ||||
| 	sectionBase | ||||
| 	external bool	 | ||||
| } | ||||
| 
 | ||||
| // ToString returns all data stored within the function section, in string form. | ||||
| func (section FuncSection) ToString (indent int) (output string) { | ||||
| 	output += doIndent(indent, "funcSection ") | ||||
| 	output += section.permission.ToString() + " " | ||||
| 	output += section.where.ToString() | ||||
| 	output += "\n" | ||||
| 	 | ||||
| 	// TODO: arguments | ||||
| 	// TODO: root block | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| // analyzeFuncSection analyzes a function section. | ||||
| func (analyzer *analysisOperation) analyzeFuncSection () ( | ||||
| 	section Section, | ||||
| 	err error, | ||||
| ) { | ||||
| 	outputSection := FuncSection { } | ||||
| 	outputSection.where = analyzer.currentPosition | ||||
| 
 | ||||
| 	section = &outputSection | ||||
| 	analyzer.addSection(section) | ||||
| 
 | ||||
| 	inputSection := analyzer.currentSection.(parser.FuncSection) | ||||
| 	outputSection.location = analyzer.currentSection.Location() | ||||
| 
 | ||||
| 	// TODO: do not do this if it is a method | ||||
| 	if inputSection.Permission() == types.PermissionReadWrite { | ||||
| 		err = inputSection.NewError ( | ||||
| 			"read-write (rw) permission not understood in this " + | ||||
| 			"context, try read-only (ro)", | ||||
| 			infoerr.ErrorKindError) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	outputSection.permission = inputSection.Permission() | ||||
| 
 | ||||
| 	// TODO: analyze inputs and outputs and reciever | ||||
| 	 | ||||
| 	if inputSection.External() { | ||||
| 		outputSection.external = true | ||||
| 			 | ||||
| 	} else { | ||||
| 		// TODO: analyze root block if not nil | ||||
| 	} | ||||
| 	 | ||||
| 	return | ||||
| } | ||||
|  | ||||
| @ -4,8 +4,7 @@ import "testing" | ||||
| 
 | ||||
| func TestFuncSection (test *testing.T) { | ||||
| 	checkTree ("../tests/analyzer/funcSection", false, | ||||
| ` | ||||
| typeSection ro ../tests/analyzer/funcSection.aCString | ||||
| `typeSection ro ../tests/analyzer/funcSection.aCString | ||||
| 	type 1 pointer { | ||||
| 		type 1 basic U8 | ||||
| 	} | ||||
|  | ||||
		Reference in New Issue
	
	Block a user