@@ -91,12 +91,12 @@ function evaluate(?Statement $statement, Environment $environment): RuntimeValue
9191 TupleLiteral::class => fn (TupleLiteral $ s , Environment $ environment ) => new TupleValue (array_map (fn ($ x ) => $ this ->evaluate ($ x , $ environment ), $ s ->value )),
9292 ObjectLiteral::class => function (ObjectLiteral $ s , Environment $ environment ): ObjectValue {
9393 $ mapping = [];
94- foreach ($ s ->value as $ key => $ value ) {
94+ foreach ($ s ->value as $ key ) {
9595 $ evaluatedKey = $ this ->evaluate ($ key , $ environment );
9696 if (!($ evaluatedKey instanceof StringValue)) {
9797 throw new RuntimeException ("Object keys must be strings " );
9898 }
99- $ mapping [$ evaluatedKey ->value ] = $ this ->evaluate ($ value , $ environment );
99+ $ mapping [$ evaluatedKey ->value ] = $ this ->evaluate ($ s -> value [ $ key ] , $ environment );
100100 }
101101 return new ObjectValue ($ mapping );
102102 },
@@ -375,6 +375,7 @@ private function applyFilter(RuntimeValue $operand, Identifier|CallExpression $f
375375 "abs " => $ operand instanceof IntegerValue ? new IntegerValue (abs ($ operand ->value )) : new FloatValue (abs ($ operand ->value )),
376376 "int " => new IntegerValue ((int )floor ($ operand ->value )),
377377 "float " => new FloatValue ((float )$ operand ->value ),
378+ "string " => new StringValue ((string )$ operand ->value ),
378379 default => throw new \Exception ("Unknown NumericValue filter: {$ filter ->value }" ),
379380 };
380381 }
@@ -757,7 +758,7 @@ private function evaluateMemberExpression(MemberExpression $expr, Environment $e
757758 throw new RuntimeException ("Cannot access property with non-string: got {$ property ->type }" );
758759 }
759760
760- $ value = $ object ->value [$ property ->value ] ?? $ object ->builtins [$ property ->value ];
761+ $ value = $ object ->value [$ property ->value ] ?? $ object ->builtins [$ property ->value ] ?? new NullValue () ;
761762 } else if ($ object instanceof ArrayValue || $ object instanceof StringValue) {
762763 if ($ property instanceof IntegerValue) {
763764 $ index = $ property ->value ;
0 commit comments