Ioバインディングを朝ハック

php_iovm-070922.tgz

寝起きで改良。
IoObject→zvalの変換ができるようにして、IoState::doCString()の戻り値を取得できるようにしました。

対応する型はこれだけです。他の型は文字列で <IoObject:name:address> となります。

Io PHP
nil null
true true
false false
Number double
Sequence string
List array
Map array

サンプル:

<?php
$io = new IoState();

var_dump($io->doCString('"Hello, World!" println'));

var_dump($io->doCString('1'),
         $io->doCString('nil'),
         $io->doCString('true'),
         $io->doCString('false'));

var_dump($io->doCString('arr := list(1,2,3)'));
var_dump($io->doCString('arr append(arr clone)'));
/* 'arr append(arr)' does not work! */

var_dump($io->doCString(
'dict := Map clone do (
    atPut("foo", "bar")
    atPut("baz", "qux")
    atPut("quux", arr)
)'));

出力: (行数を節約するために少し加工しています)

Hello, World!
string(13) "Hello, World!"
float(1)
NULL
bool(true)
bool(false)
array(3) {
  [0]=>float(1)
  [1]=>float(2)
  [2]=>float(3)
}
array(4) {
  [0]=>float(1)
  [1]=>float(2)
  [2]=>float(3)
  [3]=>array(3) {
    [0]=>float(1)
    [1]=>float(2)
    [2]=>float(3)
  }
}
array(3) {
  ["foo"]=>string(3) "bar"
  ["baz"]=>string(3) "qux"
  ["quux"]=>array(4) {
    [0]=>float(1)
    [1]=>float(2)
    [2]=>float(3)
    [3]=>array(3) {
      [0]=>float(1)
      [1]=>float(2)
      [2]=>float(3)
    }
  }
}