mirror of
https://github.com/hanzo-fi/numscript.git
synced 2026-10-30 20:54:52 +00:00
49 lines
1.1 KiB
Go
49 lines
1.1 KiB
Go
package interpreter
|
|
|
|
import (
|
|
"github.com/hanzo-fi/numscript/internal/parser"
|
|
)
|
|
|
|
func setTxMeta(st *programState, r parser.Range, args []Value) InterpreterError {
|
|
p := NewArgsParser(args)
|
|
key := parseArg(p, r, expectString)
|
|
meta := parseArg(p, r, expectAnything)
|
|
err := p.parse()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := rejectScopedAccountMeta(meta, r); err != nil {
|
|
return err
|
|
}
|
|
|
|
st.TxMeta[string(key)] = meta
|
|
return nil
|
|
}
|
|
|
|
func rejectScopedAccountMeta(value Value, r parser.Range) InterpreterError {
|
|
if account, ok := value.(AccountAddress); ok && account.Scope != "" {
|
|
return CannotStoreScopedAccountInMeta{Range: r, Account: account.Name, Scope: account.Scope}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func setAccountMeta(st *programState, r parser.Range, args []Value) InterpreterError {
|
|
p := NewArgsParser(args)
|
|
account := parseArg(p, r, expectAccount)
|
|
key := parseArg(p, r, expectString)
|
|
meta := parseArg(p, r, expectAnything)
|
|
err := p.parse()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := rejectScopedAccountMeta(meta, r); err != nil {
|
|
return err
|
|
}
|
|
|
|
st.SetAccountsMeta.Set(account.Name, account.Scope, string(key), meta)
|
|
|
|
return nil
|
|
}
|