about summary refs log tree commit diff
path: root/pkg/lang/compiler/symbol.go
blob: 453cb2b6b5fb31de25c140477cda4cc5b44d1926 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package compiler

import "jinx/pkg/lang/vm/code"

type SymbolKind int

const (
	SymbolKindVariable SymbolKind = iota
	SymbolKindFunction
)

func (s SymbolKind) String() string {
	switch s {
	case SymbolKindVariable:
		return "variable"
	case SymbolKindFunction:
		return "function"
	default:
		panic("unknown symbol kind")
	}
}

type Symbol[D SymbolData] struct {
	name string
	data D
}

type SymbolData interface {
	SymbolVariable | SymbolFunction
}

type SymbolVariable struct {
	localIndex int
}

type SymbolFunction struct {
	marker code.Marker
	args   uint
}