@@ -16,24 +16,68 @@ protected function processCursor()
1616
1717 protected function processNextArrayIndex (Reference $ reference )
1818 {
19- throw new EvaluateException ( " Index ' { $ reference -> getValue ()} ' in array is write-only " );
19+ throw new LogicException ( " Deprecated method " );
2020 }
2121
2222
2323 protected function processNonExistingObjectProperty (Reference $ reference )
2424 {
25- throw new EvaluateException ( " No property ' { $ reference -> getValue ()} ' in object " );
25+ throw new LogicException ( " Deprecated method " );
2626 }
2727
2828
2929 protected function processNonExistingArrayIndex (Reference $ reference )
3030 {
31- throw new EvaluateException ( " No index ' { $ reference -> getValue ()} ' in array " );
31+ throw new LogicException ( " Deprecated method " );
3232 }
3333
3434
3535 protected function createReferenceEvaluate (Reference $ reference )
3636 {
37+ if (is_object ($ this ->cursor )) {
38+ return ReferenceReadProperty::factory ();
39+ }
40+ if (is_array ($ this ->cursor )) {
41+ switch ($ reference ->getType ()) {
42+ case $ reference ::TYPE_NEXT_INDEX :
43+ return ReferenceReadNextIndex::factory ();
3744
45+ case $ reference ::TYPE_INDEX :
46+ return ReferenceReadNumericIndex::factory ();
47+
48+ case $ reference ::TYPE_PROPERTY :
49+ return $ this ->nonNumericIndices
50+ ? ReferenceReadAllowedNonNumericIndex::factory ()
51+ : ReferenceReadNotAllowedNonNumericIndex::factory ();
52+
53+ default :
54+ throw new DomainException (
55+ "Failed to create read evaluator for reference of type {$ reference ->getType ()}"
56+ );
57+ }
58+ }
59+ throw new EvaluateException ("Cannot read non-structured data by reference " );
60+ }
61+
62+
63+ protected function processReferenceEvaluate (Reference $ reference )
64+ {
65+ $ this
66+ ->setupReferenceEvaluate ($ reference )
67+ ->getReferenceEvaluate ()
68+ ->perform ();
69+ $ this ->cursor = &$ this
70+ ->getReferenceEvaluate ()
71+ ->getData ();
72+ $ isReferenceResultSet = $ this
73+ ->getReferenceEvaluate ()
74+ ->isResultSet ();
75+ if ($ isReferenceResultSet ) {
76+ $ referenceResult = &$ this
77+ ->getReferenceEvaluate ()
78+ ->getResult ();
79+ $ this ->setResult ($ referenceResult );
80+ }
81+ return $ this ;
3882 }
3983}
0 commit comments