4 public function __construct(){}
5 static function getClass($o) {
10 if(count($o) === 2 && is_callable($o)) {
13 return _hx_ttype("Array");
16 if(_hx_is_lambda($o)) {
19 return _hx_ttype("String");
25 if($c === false || $c === "_hx_anonymous" || is_subclass_of($c, "enum")) {
31 static function getEnum($o) {
32 if(!$o instanceof Enum) {
35 return _hx_ttype(get_class($o));
38 static function getSuperClass($c) {
39 $s = get_parent_class($c->__tname__);
46 static function getClassName($c) {
52 static function getEnumName($e) {
55 static function resolveClass($name) {
56 $c = _hx_qtype($name);
57 if($c instanceof _hx_class || $c instanceof _hx_interface) {
63 static function resolveEnum($name) {
64 $e = _hx_qtype($name);
65 if($e instanceof _hx_enum) {
71 static function createInstance($cl, $args) {
72 if($cl->__qname__ === "Array") {
73 return new _hx_array(array());
75 if($cl->__qname__ === "String") {
82 return $inst = $c->getConstructor() ? $c->newInstanceArgs($args->»a) : $c->newInstanceArgs();
84 static function createEmptyInstance($cl) {
85 if($cl->__qname__ === "Array") {
86 return new _hx_array(array());
88 if($cl->__qname__ === "String") {
92 php_Boot::$skip_constructor = true;
93 $rfl = $cl->__rfl__();
97 $m = $rfl->getConstructor();
98 $nargs = $m->getNumberOfRequiredParameters();
101 $args = array_fill(0, $m->getNumberOfRequiredParameters(), null);
102 $i = $rfl->newInstanceArgs($args);
104 $i = $rfl->newInstanceArgs(array());
106 php_Boot::$skip_constructor = false;
108 }catch(Exception $»e) {
109 $_ex_ = ($»e instanceof HException) ? $»e->e : $»e;
112 php_Boot::$skip_constructor = false;
113 throw new HException("Unable to instantiate " . Std::string($cl));
118 static function createEnum($e, $constr, $params = null) {
119 $f = Reflect::field($e, $constr);
121 throw new HException("No such constructor " . $constr);
123 if(Reflect::isFunction($f)) {
124 if($params === null) {
125 throw new HException("Constructor " . $constr . " need parameters");
127 return Reflect::callMethod($e, $f, $params);
129 if($params !== null && $params->length !== 0) {
130 throw new HException("Constructor " . $constr . " does not need parameters");
134 static function createEnumIndex($e, $index, $params = null) {
135 $c = _hx_array_get(Type::getEnumConstructs($e), $index);
137 throw new HException(_hx_string_rec($index, "") . " is not a valid enum constructor index");
139 return Type::createEnum($e, $c, $params);
141 static function getInstanceFields($c) {
142 if($c->__qname__ === "String") {
143 return new _hx_array(array("substr", "charAt", "charCodeAt", "indexOf", "lastIndexOf", "split", "toLowerCase", "toUpperCase", "toString", "length"));
145 if($c->__qname__ === "Array") {
146 return new _hx_array(array("push", "concat", "join", "pop", "reverse", "shift", "slice", "sort", "splice", "toString", "copy", "unshift", "insert", "remove", "iterator", "length"));
149 $rfl = $c->__rfl__();
150 if($rfl === null) return new _hx_array(array());
152 $internals = array('__construct', '__call', '__get', '__set', '__isset', '__unset', '__toString');
153 $ms = $rfl->getMethods();
154 while(list(, $m) = each($ms)) {
156 if(!$m->isStatic() && ! in_array($n, $internals)) $r[] = $n;
158 $ps = $rfl->getProperties();
159 while(list(, $p) = each($ps))
160 if(!$p->isStatic()) $r[] = $p->getName();
161 return new _hx_array(array_values(array_unique($r)));
163 static function getClassFields($c) {
164 if($c->__qname__ === "String") {
165 return new _hx_array(array("fromCharCode"));
167 if($c->__qname__ === "Array") {
168 return new _hx_array(array());
171 $rfl = $c->__rfl__();
172 if($rfl === null) return new _hx_array(array());
173 $ms = $rfl->getMethods();
175 while(list(, $m) = each($ms))
176 if($m->isStatic()) $r[] = $m->getName();
177 $ps = $rfl->getProperties();
178 while(list(, $p) = each($ps))
179 if($p->isStatic()) $r[] = $p->getName();
181 return new _hx_array(array_unique($r));
183 static function getEnumConstructs($e) {
184 if($e->__tname__ == 'Bool') {
185 return new _hx_array(array("true", "false"));
187 if($e->__tname__ == 'Void') {
188 return new _hx_array(array());
190 return new _hx_array($e->__constructors);
192 static function typeof($v) {
194 return ValueType::$TNull;
197 if(is_callable($v)) {
198 return ValueType::$TFunction;
200 return ValueType::TClass(_hx_qtype("Array"));
203 if(_hx_is_lambda($v)) {
204 return ValueType::$TFunction;
206 return ValueType::TClass(_hx_qtype("String"));
209 return ValueType::$TBool;
212 return ValueType::$TInt;
215 return ValueType::$TFloat;
217 if($v instanceof _hx_anonymous) {
218 return ValueType::$TObject;
220 if($v instanceof _hx_enum) {
221 return ValueType::$TObject;
223 if($v instanceof _hx_class) {
224 return ValueType::$TObject;
226 $c = _hx_ttype(get_class($v));
227 if($c instanceof _hx_enum) {
228 return ValueType::TEnum($c);
230 if($c instanceof _hx_class) {
231 return ValueType::TClass($c);
233 return ValueType::$TUnknown;
235 static function enumEq($a, $b) {
240 if(!_hx_equal($a->index, $b->index)) {
244 $_g1 = 0; $_g = count($a->params);
247 if(Type::getEnum($a->params[$i]) !== null) {
248 if(!Type::enumEq($a->params[$i], $b->params[$i])) {
252 if(!_hx_equal($a->params[$i], $b->params[$i])) {
259 }catch(Exception $»e) {
260 $_ex_ = ($»e instanceof HException) ? $»e->e : $»e;
268 static function enumConstructor($e) {
271 static function enumParameters($e) {
272 if(_hx_field($e, "params") === null) {
273 return new _hx_array(array());
275 return new _hx_array($e->params);
278 static function enumIndex($e) {
281 static function allEnums($e) {
282 $all = new _hx_array(array());
284 $_g = 0; $_g1 = Type::getEnumConstructs($e);
285 while($_g < $_g1->length) {
288 $v = Reflect::field($e, $c);
289 if(!Reflect::isFunction($v)) {
297 function __toString() { return 'Type'; }