mirror of
https://codeberg.org/scip/tablizer.git
synced 2025-12-17 20:41:03 +01:00
added
This commit is contained in:
75
vendor/github.com/glycerine/zygomys/zygo/datastack.go
generated
vendored
Normal file
75
vendor/github.com/glycerine/zygomys/zygo/datastack.go
generated
vendored
Normal file
@@ -0,0 +1,75 @@
|
||||
package zygo
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
type DataStackElem struct {
|
||||
expr Sexp
|
||||
}
|
||||
|
||||
func (d DataStackElem) IsStackElem() {}
|
||||
|
||||
func (stack *Stack) PushExpr(expr Sexp) {
|
||||
stack.Push(DataStackElem{expr})
|
||||
}
|
||||
|
||||
func (stack *Stack) PushExpressions(expr []Sexp) error {
|
||||
for _, x := range expr {
|
||||
stack.Push(DataStackElem{x})
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (stack *Stack) PopExpr() (Sexp, error) {
|
||||
elem, err := stack.Pop()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return elem.(DataStackElem).expr, nil
|
||||
}
|
||||
|
||||
func (stack *Stack) GetExpressions(n int) ([]Sexp, error) {
|
||||
stack_start := stack.tos - n + 1
|
||||
if stack_start < 0 {
|
||||
return nil, errors.New("not enough items on stack")
|
||||
}
|
||||
arr := make([]Sexp, n)
|
||||
for i := 0; i < n; i++ {
|
||||
arr[i] = stack.elements[stack_start+i].(DataStackElem).expr
|
||||
}
|
||||
return arr, nil
|
||||
}
|
||||
|
||||
func (stack *Stack) PopExpressions(n int) ([]Sexp, error) {
|
||||
origSz := stack.Size()
|
||||
expressions, err := stack.GetExpressions(n)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
stack.TruncateToSize(origSz - n)
|
||||
return expressions, nil
|
||||
}
|
||||
|
||||
func (stack *Stack) GetExpr(n int) (Sexp, error) {
|
||||
elem, err := stack.Get(n)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return elem.(DataStackElem).expr, nil
|
||||
}
|
||||
|
||||
func (stack *Stack) PrintStack() {
|
||||
for i := 0; i <= stack.tos; i++ {
|
||||
expr := stack.elements[i].(DataStackElem).expr
|
||||
fmt.Println("\t" + expr.SexpString(nil))
|
||||
}
|
||||
}
|
||||
|
||||
func (stack *Stack) PrintScopeStack() {
|
||||
for i := 0; i <= stack.tos; i++ {
|
||||
scop := stack.elements[i].(*Scope)
|
||||
scop.Show(stack.env, NewPrintStateWithIndent(4), "")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user