mirror of
https://github.com/johnkerl/miller.git
synced 2026-08-01 20:12:19 +00:00
localvar/map put/get/etc method renames for consistency
This commit is contained in:
parent
6662da4820
commit
116a41a6c2
3 changed files with 46 additions and 51 deletions
|
|
@ -784,10 +784,10 @@ type LocalVariableLvalueNode struct {
|
|||
// a = 1;
|
||||
// b = 1;
|
||||
// if (true) {
|
||||
// a = 3; <-- frameBind is false; updates outer a
|
||||
// var b = 4; <-- frameBind is true; creates new inner b
|
||||
// a = 3; <-- setAtScope is false; updates outer a
|
||||
// var b = 4; <-- setAtScope is true; creates new inner b
|
||||
// }
|
||||
frameBind bool
|
||||
setAtScope bool
|
||||
}
|
||||
|
||||
func (this *RootNode) BuildLocalVariableLvalueNode(astNode *dsl.ASTNode) (IAssignable, error) {
|
||||
|
|
@ -795,12 +795,12 @@ func (this *RootNode) BuildLocalVariableLvalueNode(astNode *dsl.ASTNode) (IAssig
|
|||
|
||||
variableName := string(astNode.Token.Lit)
|
||||
typeName := "any"
|
||||
frameBind := false
|
||||
setAtScope := false
|
||||
if astNode.Children != nil { // typed, like 'num x = 3'
|
||||
typeNode := astNode.Children[0]
|
||||
lib.InternalCodingErrorIf(typeNode.Type != dsl.NodeTypeTypedecl)
|
||||
typeName = string(typeNode.Token.Lit)
|
||||
frameBind = true
|
||||
setAtScope = true
|
||||
}
|
||||
typeGatedMlrvalName, err := types.NewTypeGatedMlrvalName(
|
||||
variableName,
|
||||
|
|
@ -812,17 +812,17 @@ func (this *RootNode) BuildLocalVariableLvalueNode(astNode *dsl.ASTNode) (IAssig
|
|||
// TODO: type-gated mlrval
|
||||
return NewLocalVariableLvalueNode(
|
||||
typeGatedMlrvalName,
|
||||
frameBind,
|
||||
setAtScope,
|
||||
), nil
|
||||
}
|
||||
|
||||
func NewLocalVariableLvalueNode(
|
||||
typeGatedMlrvalName *types.TypeGatedMlrvalName,
|
||||
frameBind bool,
|
||||
setAtScope bool,
|
||||
) *LocalVariableLvalueNode {
|
||||
return &LocalVariableLvalueNode{
|
||||
typeGatedMlrvalName: typeGatedMlrvalName,
|
||||
frameBind: frameBind,
|
||||
setAtScope: setAtScope,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -846,7 +846,7 @@ func (this *LocalVariableLvalueNode) AssignIndexed(
|
|||
return err
|
||||
}
|
||||
|
||||
if this.frameBind {
|
||||
if this.setAtScope {
|
||||
state.Stack.SetAtScope(this.typeGatedMlrvalName.Name, rvalue)
|
||||
} else {
|
||||
state.Stack.Set(this.typeGatedMlrvalName.Name, rvalue)
|
||||
|
|
@ -854,7 +854,7 @@ func (this *LocalVariableLvalueNode) AssignIndexed(
|
|||
return nil
|
||||
} else {
|
||||
// TODO: propagate error return
|
||||
if this.frameBind {
|
||||
if this.setAtScope {
|
||||
state.Stack.SetAtScopeIndexed(this.typeGatedMlrvalName.Name, indices, rvalue)
|
||||
} else {
|
||||
state.Stack.SetIndexed(this.typeGatedMlrvalName.Name, indices, rvalue)
|
||||
|
|
|
|||
|
|
@ -163,8 +163,7 @@ func (this *StackFrameSet) Dump() {
|
|||
stackFrame := entry.Value.(*StackFrame)
|
||||
fmt.Printf(" VARIABLES (count %d):\n", len(stackFrame.vars))
|
||||
for k, v := range stackFrame.vars {
|
||||
fmt.Printf(" %-16s %s\n", k, v.String())
|
||||
//// PEND fmt.Printf(" %-16s %s\n", k, v.ValueString())
|
||||
fmt.Printf(" %-16s %s\n", k, v.ValueString())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -277,27 +276,23 @@ type StackFrame struct {
|
|||
// TODO: just a map for now. In the C impl, pre-computation of
|
||||
// name-to-array-slot indices was an important optimization, especially for
|
||||
// compute-intensive scenarios.
|
||||
vars map[string]*types.Mlrval
|
||||
//// PEND vars map[string]*types.TypeGatedMlrvalVariable
|
||||
vars map[string]*types.TypeGatedMlrvalVariable
|
||||
}
|
||||
|
||||
func NewStackFrame() *StackFrame {
|
||||
return &StackFrame{
|
||||
vars: make(map[string]*types.Mlrval),
|
||||
//// PEND vars: make(map[string]*types.TypeGatedMlrvalVariable),
|
||||
vars: make(map[string]*types.TypeGatedMlrvalVariable),
|
||||
}
|
||||
}
|
||||
|
||||
// Returns nil on no such
|
||||
func (this *StackFrame) Get(name string) *types.Mlrval {
|
||||
return this.vars[name]
|
||||
//// PEND
|
||||
// slot := this.vars[name]
|
||||
// if slot == nil {
|
||||
// return nil
|
||||
// } else {
|
||||
// return slot.GetValue()
|
||||
// }
|
||||
slot := this.vars[name]
|
||||
if slot == nil {
|
||||
return nil
|
||||
} else {
|
||||
return slot.GetValue()
|
||||
}
|
||||
}
|
||||
|
||||
// Returns nil on no such
|
||||
|
|
@ -306,40 +301,36 @@ func (this *StackFrame) Has(name string) bool {
|
|||
}
|
||||
|
||||
func (this *StackFrame) Clear() {
|
||||
this.vars = make(map[string]*types.Mlrval)
|
||||
//// PEND this.vars = make(map[string]*types.TypeGatedMlrvalVariable)
|
||||
this.vars = make(map[string]*types.TypeGatedMlrvalVariable)
|
||||
}
|
||||
|
||||
// TODO: make a typemasked ...
|
||||
func (this *StackFrame) Set(name string, mlrval *types.Mlrval) /* PEND error*/ {
|
||||
this.vars[name] = mlrval.Copy()
|
||||
//// PEND
|
||||
// slot := this.vars[name]
|
||||
// if slot == nil {
|
||||
// slot, err := types.NewTypeGatedMlrvalVariable(name, "var", mlrval)
|
||||
// if err != nil {
|
||||
// return err
|
||||
// } else {
|
||||
// this.vars[name] = slot
|
||||
// return nil
|
||||
// }
|
||||
// } else {
|
||||
// return slot.Assign(mlrval.Copy())
|
||||
// }
|
||||
|
||||
// TODO: honor error-return at callsites
|
||||
func (this *StackFrame) Set(name string, mlrval *types.Mlrval) error {
|
||||
slot := this.vars[name]
|
||||
if slot == nil {
|
||||
slot, err := types.NewTypeGatedMlrvalVariable(name, "any", mlrval)
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
this.vars[name] = slot
|
||||
return nil
|
||||
}
|
||||
this.vars[name] = slot
|
||||
return nil
|
||||
} else {
|
||||
return slot.Assign(mlrval.Copy())
|
||||
}
|
||||
}
|
||||
|
||||
func (this *StackFrame) Unset(name string) /* PEND error */ {
|
||||
this.vars[name] = types.MlrvalPointerFromAbsent()
|
||||
//// PEND
|
||||
// slot := this.vars[name]
|
||||
// if slot != nil {
|
||||
// return slot.Assign(types.MlrvalPointerFromAbsent())
|
||||
// } else {
|
||||
// return nil
|
||||
// }
|
||||
func (this *StackFrame) Unset(name string) {
|
||||
slot := this.vars[name]
|
||||
if slot != nil {
|
||||
slot.Unassign()
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: implement error-return, and honor it at callsites
|
||||
func (this *StackFrame) SetIndexed(
|
||||
name string,
|
||||
indices []*types.Mlrval,
|
||||
|
|
|
|||
|
|
@ -94,3 +94,7 @@ func (this *TypeGatedMlrvalVariable) Assign(value *Mlrval) error {
|
|||
this.value = value.Copy()
|
||||
return nil
|
||||
}
|
||||
|
||||
func (this *TypeGatedMlrvalVariable) Unassign() {
|
||||
this.value = MlrvalPointerFromAbsent()
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue