summaryrefslogtreecommitdiff
path: root/parser/parse.go
diff options
context:
space:
mode:
authorMarc Vertes <mvertes@free.fr>2025-12-04 13:28:22 +0100
committerMarc Vertes <mvertes@free.fr>2025-12-04 13:28:22 +0100
commitf07fc0178831432b68f1b9bd6c96b257aa2e9abe (patch)
treedc445dbf1b8946d09be7444b4f141a78e23a568f /parser/parse.go
parent90284c5bedc5ab7bb442b34ef470744578dcd266 (diff)
chore: move symbol types and functions in its own package.HEADmain
Diffstat (limited to 'parser/parse.go')
-rw-r--r--parser/parse.go17
1 files changed, 10 insertions, 7 deletions
diff --git a/parser/parse.go b/parser/parse.go
index 6cfdc08..e7d5399 100644
--- a/parser/parse.go
+++ b/parser/parse.go
@@ -10,14 +10,15 @@ import (
"github.com/mvertes/parscan/lang"
"github.com/mvertes/parscan/scanner"
+ "github.com/mvertes/parscan/symbol"
)
// Parser represents the state of a parser.
type Parser struct {
*scanner.Scanner
- Symbols map[string]*Symbol
- function *Symbol
+ Symbols symbol.SymMap
+ function *symbol.Symbol
scope string
fname string
pkgName string // current package name
@@ -42,13 +43,15 @@ var (
// NewParser returns a new parser.
func NewParser(spec *lang.Spec, noPkg bool) *Parser {
- return &Parser{
+ p := &Parser{
Scanner: scanner.NewScanner(spec),
+ Symbols: symbol.SymMap{},
noPkg: noPkg,
- Symbols: initUniverse(),
framelen: map[string]int{},
labelCount: map[string]int{},
}
+ p.Symbols.Init()
+ return p
}
// Scan performs lexical analysis on s and returns Tokens or an error.
@@ -255,9 +258,9 @@ func (p *Parser) parseFunc(in Tokens) (out Tokens, err error) {
p.fname = fname
ofunc := p.function
funcScope := p.funcScope
- s, _, ok := p.GetSym(fname, p.scope)
+ s, _, ok := p.Symbols.Get(fname, p.scope)
if !ok {
- s = &Symbol{Used: true}
+ s = &symbol.Symbol{Used: true}
p.Symbols[p.scope+fname] = s
}
p.pushScope(fname)
@@ -282,7 +285,7 @@ func (p *Parser) parseFunc(in Tokens) (out Tokens, err error) {
if err != nil {
return out, err
}
- s.Kind = SymFunc
+ s.Kind = symbol.Func
s.Type = typ
p.function = s