Compare commits
2 Commits
c2adfa3b46
...
1a13c79ee4
Author | SHA1 | Date | |
---|---|---|---|
1a13c79ee4 | |||
da5d171479 |
@ -5,8 +5,8 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/mediocregopher/ginger/gg"
|
"code.betamike.com/mediocregopher/ginger/gg"
|
||||||
"github.com/mediocregopher/ginger/vm"
|
"code.betamike.com/mediocregopher/ginger/vm"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
@ -7,8 +7,8 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"unicode"
|
"unicode"
|
||||||
|
|
||||||
. "github.com/mediocregopher/ginger/gg/grammar"
|
. "code.betamike.com/mediocregopher/ginger/gg/grammar"
|
||||||
"github.com/mediocregopher/ginger/graph"
|
"code.betamike.com/mediocregopher/ginger/graph"
|
||||||
"golang.org/x/exp/slices"
|
"golang.org/x/exp/slices"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -53,9 +53,7 @@ var (
|
|||||||
Rune('-'),
|
Rune('-'),
|
||||||
positiveNumber,
|
positiveNumber,
|
||||||
func(neg Located[rune], posNum Located[string]) Located[string] {
|
func(neg Located[rune], posNum Located[string]) Located[string] {
|
||||||
return Located[string]{
|
return Locate(neg.Location, string(neg.Value)+posNum.Value)
|
||||||
neg.Location, string(neg.Value) + posNum.Value,
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -68,7 +66,7 @@ var (
|
|||||||
panic(fmt.Errorf("parsing %q as int: %w", str, err))
|
panic(fmt.Errorf("parsing %q as int: %w", str, err))
|
||||||
}
|
}
|
||||||
|
|
||||||
return Located[Value]{str.Location, Number(i)}
|
return Locate(str.Location, Number(i))
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@ -93,7 +91,7 @@ var (
|
|||||||
for _, r := range tail {
|
for _, r := range tail {
|
||||||
name = append(name, r.Value)
|
name = append(name, r.Value)
|
||||||
}
|
}
|
||||||
return Located[Value]{head.Location, Name(string(name))}
|
return Locate(head.Location, Name(string(name)))
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@ -228,7 +226,7 @@ var graphSym, value = func() (
|
|||||||
gs.g = new(Graph)
|
gs.g = new(Graph)
|
||||||
}
|
}
|
||||||
|
|
||||||
return Located[Value]{r.Location, Value{Graph: gs.g}}
|
return Locate(r.Location, Value{Graph: gs.g})
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -5,8 +5,8 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
. "github.com/mediocregopher/ginger/gg/grammar"
|
. "code.betamike.com/mediocregopher/ginger/gg/grammar"
|
||||||
"github.com/mediocregopher/ginger/graph"
|
"code.betamike.com/mediocregopher/ginger/graph"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
2
gg/gg.go
2
gg/gg.go
@ -4,7 +4,7 @@ package gg
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/mediocregopher/ginger/graph"
|
"code.betamike.com/mediocregopher/ginger/graph"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Type aliases for convenience
|
// Type aliases for convenience
|
||||||
|
@ -18,6 +18,11 @@ type Located[T any] struct {
|
|||||||
Value T
|
Value T
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Locate returns a Located instance combining the given values.
|
||||||
|
func Locate[T any](l Location, v T) Located[T] {
|
||||||
|
return Located[T]{l, v}
|
||||||
|
}
|
||||||
|
|
||||||
// LocatedError is an error related to a specific point within a stream of
|
// LocatedError is an error related to a specific point within a stream of
|
||||||
// runes.
|
// runes.
|
||||||
type LocatedError Located[error]
|
type LocatedError Located[error]
|
||||||
|
2
go.mod
2
go.mod
@ -1,4 +1,4 @@
|
|||||||
module github.com/mediocregopher/ginger
|
module code.betamike.com/mediocregopher/ginger
|
||||||
|
|
||||||
go 1.18
|
go 1.18
|
||||||
|
|
||||||
|
@ -3,8 +3,8 @@ package vm
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/mediocregopher/ginger/gg"
|
"code.betamike.com/mediocregopher/ginger/gg"
|
||||||
"github.com/mediocregopher/ginger/graph"
|
"code.betamike.com/mediocregopher/ginger/graph"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Function is an entity which accepts an argument Value and performs some
|
// Function is an entity which accepts an argument Value and performs some
|
||||||
|
@ -3,7 +3,7 @@ package vm
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/mediocregopher/ginger/gg"
|
"code.betamike.com/mediocregopher/ginger/gg"
|
||||||
)
|
)
|
||||||
|
|
||||||
func globalFn(fn func(Value) (Value, error)) Value {
|
func globalFn(fn func(Value) (Value, error)) Value {
|
||||||
|
4
vm/vm.go
4
vm/vm.go
@ -7,8 +7,8 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/mediocregopher/ginger/gg"
|
"code.betamike.com/mediocregopher/ginger/gg"
|
||||||
"github.com/mediocregopher/ginger/graph"
|
"code.betamike.com/mediocregopher/ginger/graph"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ZeroValue is a Value with no fields set. It is equivalent to the 0-tuple.
|
// ZeroValue is a Value with no fields set. It is equivalent to the 0-tuple.
|
||||||
|
@ -4,7 +4,7 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/mediocregopher/ginger/gg"
|
"code.betamike.com/mediocregopher/ginger/gg"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user