Analyzer attempts to find the source of types
This commit is contained in:
		
							parent
							
								
									1300f87cb5
								
							
						
					
					
						commit
						d117e2727c
					
				@ -127,13 +127,12 @@ func (analyzer *AnalysisOperation) fetchSectionFromIdentifier (
 | 
			
		||||
	bitten  parser.Identifier,
 | 
			
		||||
	err     error,
 | 
			
		||||
) {
 | 
			
		||||
	bitten = which
 | 
			
		||||
	item := bitten.Bite()
 | 
			
		||||
	item, bitten := which.Bite()
 | 
			
		||||
	
 | 
			
		||||
	path, exists := analyzer.currentTree.ResolveRequire(item)
 | 
			
		||||
	if exists {
 | 
			
		||||
		// we have our module path, so get the section name
 | 
			
		||||
		item = bitten.Bite()
 | 
			
		||||
		item, bitten = bitten.Bite()
 | 
			
		||||
	} else {
 | 
			
		||||
		// that wasn't a module name, so the module path must be the our
 | 
			
		||||
		// current one
 | 
			
		||||
 | 
			
		||||
@ -52,7 +52,8 @@ func (analyzer AnalysisOperation) analyzeTypeSection () (
 | 
			
		||||
) {
 | 
			
		||||
	outputSection := TypeSection { }
 | 
			
		||||
	outputSection.where = analyzer.currentPosition
 | 
			
		||||
	section = outputSection
 | 
			
		||||
 | 
			
		||||
	section = &outputSection
 | 
			
		||||
	analyzer.addSection(section)
 | 
			
		||||
 | 
			
		||||
	inputSection := analyzer.currentSection.(parser.TypeSection)
 | 
			
		||||
@ -65,6 +66,9 @@ func (analyzer AnalysisOperation) analyzeTypeSection () (
 | 
			
		||||
 | 
			
		||||
	outputSection.what, err = analyzer.analyzeType(inputSection.Type())
 | 
			
		||||
	if err != nil { return }
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	// TODO: analyze members
 | 
			
		||||
 | 
			
		||||
	outputSection.complete = true
 | 
			
		||||
	return
 | 
			
		||||
 | 
			
		||||
@ -89,6 +89,18 @@ func (analyzer AnalysisOperation) analyzeType (
 | 
			
		||||
		var points Type
 | 
			
		||||
		points, err = analyzer.analyzeType(inputType.Points())
 | 
			
		||||
		outputType.points = &points
 | 
			
		||||
	} else {
 | 
			
		||||
		var bitten parser.Identifier
 | 
			
		||||
		outputType.actual,
 | 
			
		||||
		bitten,
 | 
			
		||||
		err = analyzer.fetchSectionFromIdentifier(inputType.Name())
 | 
			
		||||
		
 | 
			
		||||
		if bitten.Length() > 0 {
 | 
			
		||||
			err = bitten.NewError(
 | 
			
		||||
				"cannot use member selection in this context",
 | 
			
		||||
				infoerr.ErrorKindError)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// TODO
 | 
			
		||||
 | 
			
		||||
@ -35,10 +35,17 @@ func (identifier Identifier) Item (index int) (item string) {
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Bite removes the first item from the identifier and returns it.
 | 
			
		||||
func (identifier *Identifier) Bite () (item string) {
 | 
			
		||||
	item = identifier.trail[0]
 | 
			
		||||
	identifier.trail = identifier.trail[1:]
 | 
			
		||||
// Bite returns the first item of an identifier, and a copy of that identifier
 | 
			
		||||
// with that item removed. If there is nothing left to bite off, this method
 | 
			
		||||
// panics.
 | 
			
		||||
func (identifier Identifier) Bite () (item string, bitten Identifier) {
 | 
			
		||||
	if len(identifier.trail) < 1 {
 | 
			
		||||
		panic ("trying to bite an empty identifier")
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	bitten = identifier
 | 
			
		||||
	item = bitten.trail[0]
 | 
			
		||||
	bitten.trail = bitten.trail[1:]
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user