Inheritance: extends Lisphp_Runtime_BuiltinFunction
Exemplo n.º 1
0
 /**
  * @return Lisphp_Scope
  */
 public static function sandbox()
 {
     $scope = new Lisphp_Scope();
     $scope['nil'] = null;
     $scope['true'] = $scope['#t'] = $scope['else'] = true;
     $scope['false'] = $scope['#f'] = false;
     $scope['eval'] = new Lisphp_Runtime_Eval();
     $scope['quote'] = new Lisphp_Runtime_Quote();
     $scope['symbol'] = new Lisphp_Runtime_PHPFunction(array('Lisphp_Symbol', 'get'));
     $scope['define'] = new Lisphp_Runtime_Define();
     $scope['setf!'] = new Lisphp_Runtime_Setf();
     $scope['let'] = new Lisphp_Runtime_Let();
     $scope['macro'] = new Lisphp_Runtime_Macro();
     $scope['lambda'] = new Lisphp_Runtime_Lambda();
     $scope['apply'] = new Lisphp_Runtime_Apply();
     $scope['do'] = new Lisphp_Runtime_Do();
     $scope['dict'] = new Lisphp_Runtime_Dict();
     $scope['array'] = new Lisphp_Runtime_Array();
     $scope['list'] = new Lisphp_Runtime_List();
     $scope['car'] = new Lisphp_Runtime_List_Car();
     $scope['cdr'] = new Lisphp_Runtime_List_Cdr();
     $scope['at'] = new Lisphp_Runtime_List_At();
     $scope['set-at!'] = new Lisphp_Runtime_List_SetAt();
     $scope['unset-at!'] = new Lisphp_Runtime_List_UnsetAt();
     $scope['exists-at?'] = new Lisphp_Runtime_List_ExistsAt();
     $scope['count'] = new Lisphp_Runtime_List_Count();
     $scope['map'] = new Lisphp_Runtime_List_Map();
     $scope['filter'] = new Lisphp_Runtime_List_Filter();
     $scope['fold'] = new Lisphp_Runtime_List_Fold();
     $scope['cond'] = new Lisphp_Runtime_List_Cond();
     $scope['=='] = $scope['eq'] = $scope['eq?'] = new Lisphp_Runtime_Predicate_Eq();
     $scope['='] = $scope['equal'] = $scope['equal?'] = new Lisphp_Runtime_Predicate_Equal();
     $scope['!=='] = $scope['/=='] = $scope['not-eq'] = $scope['not-eq?'] = new Lisphp_Runtime_Predicate_NotEq();
     $scope['!='] = $scope['/='] = $scope['not-equal'] = $scope['not-equal?'] = new Lisphp_Runtime_Predicate_NotEqual();
     $scope['<'] = new Lisphp_Runtime_Predicate_LessThan();
     $scope['>'] = new Lisphp_Runtime_Predicate_GreaterThan();
     $scope['<='] = new Lisphp_Runtime_Predicate_LessEqual();
     $scope['>='] = new Lisphp_Runtime_Predicate_GreaterEqual();
     foreach (Lisphp_Runtime_Predicate_Type::getFunctions() as $n => $f) {
         $scope[$n] = $f;
     }
     $scope['isa?'] = $scope['is-a?'] = new Lisphp_Runtime_Predicate_IsA();
     $scope['+'] = new Lisphp_Runtime_Arithmetic_Addition();
     $scope['-'] = new Lisphp_Runtime_Arithmetic_Subtraction();
     $scope['*'] = new Lisphp_Runtime_Arithmetic_Multiplication();
     $scope['/'] = new Lisphp_Runtime_Arithmetic_Division();
     $scope['%'] = $scope['mod'] = new Lisphp_Runtime_Arithmetic_Modulus();
     $scope['string'] = new Lisphp_Runtime_PHPFunction('strval');
     $scope['.'] = $scope['concat'] = new Lisphp_Runtime_String_Concat();
     $scope['string-join'] = new Lisphp_Runtime_String_StringJoin();
     $scope['substring'] = new Lisphp_Runtime_PHPFunction('substr');
     $scope['string-upcase'] = new Lisphp_Runtime_PHPFunction('strtoupper');
     $scope['string-downcase'] = new Lisphp_Runtime_PHPFunction('strtolower');
     $scope['not'] = new Lisphp_Runtime_Logical_Not();
     $scope['and'] = new Lisphp_Runtime_Logical_And();
     $scope['or'] = new Lisphp_Runtime_Logical_Or();
     $scope['if'] = new Lisphp_Runtime_Logical_If();
     $scope['->'] = new Lisphp_Runtime_Object_GetAttribute();
     return $scope;
 }
Exemplo n.º 2
0
 public function testTypePredicate()
 {
     $int = new Lisphp_Runtime_Predicate_Type('int');
     $this->assertEquals('int', $int->type);
     $this->assertFunction(true, $int, 123);
     $this->assertFunction(false, $int, 3.14);
     $this->assertFunction(false, $int, 'abc');
     $string = new Lisphp_Runtime_Predicate_Type('string');
     $this->assertEquals('string', $string->type);
     $this->assertFunction(true, $string, 'hello');
     $this->assertFunction(false, $string, 123);
     $env = Lisphp_Runtime_Predicate_Type::getFunctions();
     foreach (Lisphp_Runtime_Predicate_Type::$types as $type) {
         $this->assertType('Lisphp_Runtime_Predicate_Type', $env["{$type}?"]);
         $this->assertEquals($type, $env["{$type}?"]->type);
     }
     $this->assertFunction(true, $env['nil?'], null);
     $this->assertFunction(false, $env['nil?'], 123);
 }