Merge pull request #310 from bendudson/master
[jackhill/mal.git] / php / interop.php
CommitLineData
5f085726
CM
1<?php
2
3require_once 'types.php';
4
5function _to_php($obj) {
6 if (_list_Q($obj) || _vector_Q($obj) || _hash_map_Q($obj)) {
7 $ret = array();
8 foreach ($obj as $k => $v) {
9 $ret[_to_php($k)] = _to_php($v);
10 }
11 return $ret;
12 } elseif (is_string($obj)) {
13 if (strpos($obj, chr(0x7f)) === 0) {
14 return ":".substr($obj,1);
15 } else {
16 return $obj;
17 }
18 } elseif (_symbol_Q($obj)) {
19 return ${$obj->value};
20 } elseif (_atom_Q($obj)) {
21 return $obj->value;
5f085726
CM
22 } else {
23 return $obj;
24 }
25}
26
27function _to_mal($obj) {
28 switch (gettype($obj)) {
29 case "object":
30 return _to_mal(get_object_vars($obj));
31 case "array":
32 $obj_conv = array();
33 foreach ($obj as $k => $v) {
34 $obj_conv[_to_mal($k)] = _to_mal($v);
35 }
36 if ($obj_conv !== array_values($obj_conv)) {
37 $new_obj = _hash_map();
38 $new_obj->exchangeArray($obj_conv);
39 return $new_obj;
40 } else {
41 return call_user_func_array('_list', $obj_conv);
42 }
43 default:
44 return $obj;
45 }
46}
47
48?>