mirror of
https://github.com/peklaiho/madlisp.git
synced 2024-10-18 13:02:04 +00:00
support for object and resource types
This commit is contained in:
parent
599ebd303f
commit
838313fa9c
@ -275,6 +275,8 @@ vector? | Return true if the argument is a vector.
|
|||||||
seq? | Return true if the argument is a sequence (list or vector).
|
seq? | Return true if the argument is a sequence (list or vector).
|
||||||
hash? | Return true if the argument is a hash-map.
|
hash? | Return true if the argument is a hash-map.
|
||||||
symbol? | Return true if the argument is a symbol.
|
symbol? | Return true if the argument is a symbol.
|
||||||
|
object? | Return true if the argument is an object.
|
||||||
|
resource? | Return true if the argument is a resource.
|
||||||
bool? | Return true if the argument is a boolean value (strict comparison).
|
bool? | Return true if the argument is a boolean value (strict comparison).
|
||||||
true? | Return true if the argument evaluates to true (non-strict comparison).
|
true? | Return true if the argument evaluates to true (non-strict comparison).
|
||||||
false? | Return true if the argument evaluates to false (non-strict comparison).
|
false? | Return true if the argument evaluates to false (non-strict comparison).
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace MadLisp\Lib;
|
namespace MadLisp\Lib;
|
||||||
|
|
||||||
|
use MadLisp\Collection;
|
||||||
use MadLisp\CoreFunc;
|
use MadLisp\CoreFunc;
|
||||||
use MadLisp\Env;
|
use MadLisp\Env;
|
||||||
use MadLisp\Hash;
|
use MadLisp\Hash;
|
||||||
@ -54,6 +55,10 @@ class Types implements ILib
|
|||||||
return 'hash';
|
return 'hash';
|
||||||
} elseif ($a instanceof Symbol) {
|
} elseif ($a instanceof Symbol) {
|
||||||
return 'symbol';
|
return 'symbol';
|
||||||
|
} elseif (is_object($a)) {
|
||||||
|
return 'object';
|
||||||
|
} elseif (is_resource($a)) {
|
||||||
|
return 'resource';
|
||||||
} elseif ($a === true || $a === false) {
|
} elseif ($a === true || $a === false) {
|
||||||
return 'bool';
|
return 'bool';
|
||||||
} elseif ($a === null) {
|
} elseif ($a === null) {
|
||||||
@ -92,6 +97,21 @@ class Types implements ILib
|
|||||||
fn ($a) => $a instanceof Symbol
|
fn ($a) => $a instanceof Symbol
|
||||||
));
|
));
|
||||||
|
|
||||||
|
$env->set('object?', new CoreFunc('object?', 'Return true if argument is an object.', 1, 1,
|
||||||
|
function ($a) {
|
||||||
|
// Skip classes which have their own types
|
||||||
|
if ($a instanceof Func || $a instanceof Collection || $a instanceof Symbol) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return is_object($a);
|
||||||
|
}
|
||||||
|
));
|
||||||
|
|
||||||
|
$env->set('resource?', new CoreFunc('resource?', 'Return true if argument is a resource.', 1, 1,
|
||||||
|
fn ($a) => is_resource($a)
|
||||||
|
));
|
||||||
|
|
||||||
$env->set('bool?', new CoreFunc('bool?', 'Return true if argument is a boolean.', 1, 1,
|
$env->set('bool?', new CoreFunc('bool?', 'Return true if argument is a boolean.', 1, 1,
|
||||||
fn ($a) => $a === true || $a === false
|
fn ($a) => $a === true || $a === false
|
||||||
));
|
));
|
||||||
|
@ -21,6 +21,11 @@ class Printer
|
|||||||
array_keys($a->getData()), array_values($a->getData()))) . '}';
|
array_keys($a->getData()), array_values($a->getData()))) . '}';
|
||||||
} elseif ($a instanceof Symbol) {
|
} elseif ($a instanceof Symbol) {
|
||||||
return $a->getName();
|
return $a->getName();
|
||||||
|
} elseif (is_object($a)) {
|
||||||
|
$class = get_class($a);
|
||||||
|
return "<object<$class>>";
|
||||||
|
} elseif (is_resource($a)) {
|
||||||
|
return '<resource>';
|
||||||
} elseif ($a === true) {
|
} elseif ($a === true) {
|
||||||
return 'true';
|
return 'true';
|
||||||
} elseif ($a === false) {
|
} elseif ($a === false) {
|
||||||
|
Loading…
Reference in New Issue
Block a user