1
0
mirror of https://github.com/MontFerret/ferret.git synced 2025-11-06 08:39:09 +02:00
* Renamed DOCUMENT to PAGE

* Added PageLoadParams

* Added PageLoadParams

* Renamed LoadPageParams -> PageLoadParams

* Added support for context.Done() (#201)

* Bug/#189 operators precedence (#202)

* Fixed math operators precedence

* Fixed logical operators precedence

* Fixed array operator

* Added support for parentheses to enforce a different operator evaluation order

* Feature/#200 drivers (#209)

* Added new interfaces

* Renamed dynamic to cdp driver

* Renamed drivers

* Added ELEMENT_EXISTS function (#210)

* Renamed back PAGE to DOCUMENT (#211)

* Added Getter and Setter interfaces
This commit is contained in:
Tim Voronov
2018-12-21 23:14:41 -05:00
committed by GitHub
parent 6bc4b3e0e3
commit 5620be211c
92 changed files with 2953 additions and 1656 deletions

View File

@@ -19,7 +19,7 @@ func GetIn(from core.Value, byPath []core.Value) (core.Value, error) {
var result = from
var err error
for _, segment := range byPath {
for i, segment := range byPath {
if result == None || result == nil {
break
}
@@ -92,6 +92,12 @@ func GetIn(from core.Value, byPath []core.Value) (core.Value, error) {
}
default:
getter, ok := result.(core.Getter)
if ok {
return getter.GetIn(byPath[i:])
}
return None, core.TypeError(
from.Type(),
core.ArrayType,
@@ -144,11 +150,19 @@ func SetIn(to core.Value, byPath []core.Value, value core.Value) error {
if isTarget == false {
current = parent.Get(segment.(Int))
} else {
parent.Set(segment.(Int), value)
if err := parent.Set(segment.(Int), value); err != nil {
return err
}
}
break
default:
setter, ok := parent.(core.Setter)
if ok {
return setter.SetIn(byPath[idx:0], value)
}
// redefine parent
isArray := segmentType == core.IntType
@@ -169,12 +183,16 @@ func SetIn(to core.Value, byPath []core.Value, value core.Value) error {
parent = arr
if isTarget {
arr.Set(segment.(Int), value)
if err := arr.Set(segment.(Int), value); err != nil {
return err
}
}
}
// set new parent
SetIn(to, byPath[0:idx-1], parent)
if err := SetIn(to, byPath[0:idx-1], parent); err != nil {
return err
}
if isTarget == false {
current = None