public function analyze()
{
$this->atomFunctionIs('\\array')->raw('where(
__.sideEffect{ counts = [:]; integers = [:]; strings = [:]; }
.out("ARGUMENTS").out("ARGUMENT").hasLabel("Keyvalue").out("KEY")
.hasLabel("String", "Integer").where(__.out("CONCAT").count().is(eq(0)))
.sideEffect{
if ("noDelimiter" in it.get().keys() ) {
k = it.get().value("noDelimiter");
if (counts[k] == null) { counts[k] = ["string"]; } else { counts[k].add("string"); }
} else {
k = it.get().value("code");
if (counts[k] == null) { counts[k] = ["integer"]; } else { counts[k].add("integer"); }
}
}
.map{ counts.findAll{a,b -> b.unique().size() > 1}; }.unfold().count().is(neq(0))
)');
$this->prepareQuery();
// $x = [1.0 => 2];
$this->atomFunctionIs('\\array')->outIs('ARGUMENTS')->outIs('ARGUMENT')->atomIs('Keyvalue')->outIs('KEY')->atomIs(array('Real', 'Null', 'Boolean'))->back('first');
$this->prepareQuery();
// $x[1.0] = 2;
$this->atomIs('Array')->outIs('INDEX')->atomIs(array('Real', 'Null', 'Boolean'))->back('first');
$this->prepareQuery();
}