Anarres-Mud-Driver

 view release on metacpan or  search on metacpan

Efun/Core/Core.pm  view on Meta::CPAN


		# XXX varargs
		sprintf			=> [ M_PURE, T_STRING, T_STRING, T_ARRAY, ],
		sscanf			=> [ M_PURE, T_STRING, T_STRING, T_ARRAY, ],

		# Array stuff

		member_array	=> [ M_PURE, T_INTEGER, T_UNKNOWN, T_ARRAY, ],
		unique_array	=> [ M_PURE, T_ARRAY->array, T_ARRAY, T_CLOSURE],
			# XXX We can map mappings. :-(
		map				=> [ 0,		T_ARRAY, T_ARRAY, T_CLOSURE, ],
		filter			=> [ 0,		T_ARRAY, T_ARRAY, T_CLOSURE, ],
		allocate		=> [ 0,		T_ARRAY, T_INTEGER, T_UNKNOWN, ],

		# Mapping stuff

		keys			=> [ M_PURE,	T_STRING->array, T_MAPPING, ],
		values			=> [ M_PURE,	T_ARRAY, T_MAPPING, ],
		map_delete		=> [ 0,			T_UNKNOWN, T_MAPPING,T_STRING,],

		# Type stuff

		to_int			=> [ M_PURE,	T_INTEGER, T_STRING, ],
		to_string		=> [ M_PURE,	T_STRING, T_INTEGER, ],
		typeof			=> [ M_PURE,	T_STRING, T_UNKNOWN, ],
		sizeof			=> [ M_PURE,	T_INTEGER, T_UNKNOWN, ],

		intp			=> [ $pflags,	T_BOOL, T_UNKNOWN, ],
		stringp			=> [ $pflags,	T_BOOL, T_UNKNOWN, ],
		arrayp			=> [ $pflags,	T_BOOL, T_UNKNOWN, ],
		mapp			=> [ $pflags,	T_BOOL, T_UNKNOWN, ],
		functionp		=> [ $pflags,	T_BOOL, T_UNKNOWN, ],
		classp			=> [ $pflags,	T_BOOL, T_UNKNOWN, ],
		objectp			=> [ $pflags,	T_BOOL, T_UNKNOWN, ],
		clonep			=> [ M_PURE,	T_BOOL, T_UNKNOWN, ],
		undefinedp		=> [ M_PURE,	T_BOOL, T_UNKNOWN, ],

		# Closure stuff

		# XXX varargs
		evaluate		=> [ 0,		T_UNKNOWN, T_CLOSURE, T_ARRAY, ],

		# Reflection

		function_exists	=> [ 0,		T_OBJECT, T_STRING, T_INTEGER, ],
		functions		=> [ 0,		T_OBJECT, T_INTEGER, ],
		variables		=> [ 0,		T_OBJECT, T_INTEGER, ],
		inherits		=> [ M_PURE,	T_INTEGER, T_STRING, T_OBJECT, ],
		call_stack		=> [ 0,		T_STRING->array, T_INTEGER, ],

		# File stuff

		file_size		=> [ 0,		T_INTEGER, T_STRING, ],
		read_file		=> [ 0,		T_STRING, T_STRING, ],
		write_file		=> [ 0,		T_INTEGER, T_STRING, T_STRING, ],

		# System stuff

		time			=> [ 0,		T_INTEGER, ],

		debug_message	=> [ 0,		T_STRING, T_STRING, ],
		error			=> [ 0,		T_INTEGER, T_STRING, ],
		catch			=> [ 0,		T_STRING, T_UNKNOWN, ],
		shutdown		=> [ 0,		T_INTEGER, ],

		trace			=> [ 0,		T_INTEGER, T_INTEGER, ],
			);

	# We call this as an exported function since ISA isn't yet set up.
	foreach (keys %efuns) {
		register(__PACKAGE__ . "::" . $_, @{ $efuns{$_} });
	}
}

{
	package Anarres::Mud::Driver::Efun::Core::time;
	sub generate_call { "time()" }
}

{
	package Anarres::Mud::Driver::Efun::Core::debug_message;
	sub generate_call { "print STDERR $_[1], '\\n'" }
}

{
	package Anarres::Mud::Driver::Efun::Core::previous_object;
	sub invoke { undef }
}

{
	package Anarres::Mud::Driver::Efun::Core::file_name;
	sub generate_call {
		"Anarres::Mud::Driver::Program::package_to_path(ref($_[1]))"
	}
}

{
	package Anarres::Mud::Driver::Efun::Core::find_object;
	# sub generate_call { "undef" }
	sub invoke { undef }
}

{
	package Anarres::Mud::Driver::Efun::Core::to_string;
	# XXX This only works for CONSTANT integers, of course.
	# sub generate_call { '"' . $_[1] . '"' }
	# This works for any integer which is about to be evaluated as
	# a string by Perl. 6 . 7 == "67";
	sub generate_call { ('' . $_[1]) }
}

{
	package Anarres::Mud::Driver::Efun::Core::strlen;
	sub generate_call { "length($_[1])" }
}

{
	package Anarres::Mud::Driver::Efun::Core::error;
	sub generate_call { "die('LPC: ' . $_[1])" }
}

{
	package Anarres::Mud::Driver::Efun::Core::catch;
	sub generate_call { "do { eval { $_[1] }; $@; }"; }
}

{
	package Anarres::Mud::Driver::Efun::Core::implode;
	sub generate_call { "join($_[2], \@{ $_[1] })" }
}

{
	package Anarres::Mud::Driver::Efun::Core::explode;
	# invoke is an XSUB
}

{
	package Anarres::Mud::Driver::Efun::Core::replace_string;
	# invoke is an XSUB
}



( run in 2.192 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )