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