summaryrefslogtreecommitdiff
path: root/parser/decl.go
diff options
context:
space:
mode:
Diffstat (limited to 'parser/decl.go')
-rw-r--r--parser/decl.go23
1 files changed, 12 insertions, 11 deletions
diff --git a/parser/decl.go b/parser/decl.go
index 876b2ca..f6e8102 100644
--- a/parser/decl.go
+++ b/parser/decl.go
@@ -10,6 +10,7 @@ import (
"github.com/mvertes/parscan/lang"
"github.com/mvertes/parscan/scanner"
+ "github.com/mvertes/parscan/symbol"
"github.com/mvertes/parscan/vm"
)
@@ -57,7 +58,7 @@ func (p *Parser) parseConstLine(in Tokens) (out Tokens, err error) {
for _, lt := range decl.Split(lang.Comma) {
vars = append(vars, lt[0].Str)
name := strings.TrimPrefix(p.scope+"/"+lt[0].Str, "/")
- p.AddSymbol(UnsetAddr, name, nilValue, SymConst, nil, false)
+ p.Symbols.Add(symbol.UnsetAddr, name, nilValue, symbol.Const, nil, false)
}
} else {
return out, err
@@ -76,9 +77,9 @@ func (p *Parser) parseConstLine(in Tokens) (out Tokens, err error) {
return out, err
}
name := strings.TrimPrefix(p.scope+"/"+vars[i], "/")
- p.Symbols[name] = &Symbol{
- Kind: SymConst,
- Index: UnsetAddr,
+ p.Symbols[name] = &symbol.Symbol{
+ Kind: symbol.Const,
+ Index: symbol.UnsetAddr,
Cval: cval,
Value: vm.ValueOf(constValue(cval)),
Local: p.funcScope != "",
@@ -131,11 +132,11 @@ func (p *Parser) evalConstExpr(in Tokens) (cval constant.Value, length int, err
case id.IsLiteral():
return constant.MakeFromLiteral(t.Str, gotok[id], 0), 1, err
case id == lang.Ident:
- s, _, ok := p.GetSym(t.Str, p.scope)
+ s, _, ok := p.Symbols.Get(t.Str, p.scope)
if !ok {
return nil, 0, errors.New("symbol not found")
}
- if s.Kind != SymConst {
+ if s.Kind != symbol.Const {
return nil, 0, errors.New("symbol is not a constant")
}
return s.Cval, 1, err
@@ -240,10 +241,10 @@ func (p *Parser) parseImportLine(in Tokens) (out Tokens, err error) {
if n == "." {
// Import package symbols in the current scope.
for k, v := range pkg {
- p.Symbols[k] = &Symbol{Index: UnsetAddr, PkgPath: pp, Value: v}
+ p.Symbols[k] = &symbol.Symbol{Index: symbol.UnsetAddr, PkgPath: pp, Value: v}
}
} else {
- p.Symbols[n] = &Symbol{Kind: SymPkg, PkgPath: pp, Index: UnsetAddr}
+ p.Symbols[n] = &symbol.Symbol{Kind: symbol.Pkg, PkgPath: pp, Index: symbol.UnsetAddr}
}
return out, err
}
@@ -299,7 +300,7 @@ func (p *Parser) parseTypeLine(in Tokens) (out Tokens, err error) {
return out, err
}
typ.Name = in[0].Str
- p.AddSymbol(UnsetAddr, in[0].Str, vm.NewValue(typ), SymType, typ, p.funcScope != "")
+ p.Symbols.Add(symbol.UnsetAddr, in[0].Str, vm.NewValue(typ), symbol.Type, typ, p.funcScope != "")
return out, err
}
@@ -336,10 +337,10 @@ func (p *Parser) parseVarLine(in Tokens) (out Tokens, err error) {
vars = append(vars, lt[0].Str)
name := strings.TrimPrefix(p.scope+"/"+lt[0].Str, "/")
if p.funcScope == "" {
- p.AddSymbol(UnsetAddr, name, nilValue, SymVar, nil, false)
+ p.Symbols.Add(symbol.UnsetAddr, name, nilValue, symbol.Var, nil, false)
continue
}
- p.AddSymbol(p.framelen[p.funcScope], name, nilValue, SymVar, nil, false)
+ p.Symbols.Add(p.framelen[p.funcScope], name, nilValue, symbol.Var, nil, false)
p.framelen[p.funcScope]++
}
} else {