Anarres-Mud-Driver

 view release on metacpan or  search on metacpan

Compiler/Compiler.xs  view on Meta::CPAN

	{ "object",		L_BASIC_TYPE,		{ .str = LVAL_OBJECT } },
	{ "private",	L_TYPE_MODIFIER,	{ .number = M_PRIVATE } },
	{ "protected",	L_TYPE_MODIFIER,	{ .number = M_PROTECTED } },
	{ "public",		L_TYPE_MODIFIER,	{ .number = M_PUBLIC } },
	{ "return",		L_RETURN,			LVAL_NONE },
	{ "rlimits",	L_RLIMITS,			LVAL_NONE },
	{ "sscanf",		L_SSCANF,			LVAL_NONE },
	{ "string",		L_BASIC_TYPE,		{ .str = LVAL_STRING } },
	{ "static",		L_TYPE_MODIFIER,	{ .number = M_STATIC } },
	{ "switch",		L_SWITCH,			LVAL_NONE },
	{ "varargs",	L_TYPE_MODIFIER,	{ .number = M_VARARGS } },
	// { "virtual",	L_TYPE_MODIFIER,	{ .number = M_VIRTUAL } },
	{ "void",		L_VOID,				{ .str = LVAL_VOID } },
	{ "while",		L_WHILE,			LVAL_NONE },
};

MODULE = Anarres::Mud::Driver::Compiler	PACKAGE = Anarres::Mud::Driver::Compiler

PROTOTYPES: ENABLE

BOOT:
{
	{
		SV			*sv;
		int			 size;
		int			 i;

		size = sizeof(keywords) / sizeof(keywords[0]);

		/* Don't put this into Perl-space or it can get fucked with. */
		/* One day we might want to allow that. */
		amd_kwtab = newHV();
		amd_lvaltab = newHV();

		for (i = 0; i < size; i++) {
			hv_store(amd_kwtab,
				keywords[i].keyword, strlen(keywords[i].keyword),
				newSViv(keywords[i].token), 0);
			if (keywords[i].lval.number) {
				sv = newSViv(PTR2IV((void *)(&keywords[i].lval) ));
				hv_store(amd_lvaltab,
					keywords[i].keyword, strlen(keywords[i].keyword),
					sv, 0);
			}
		}
	}

	{
		/* The parser needs these to build the tree. */
		amd_require(_AMD "::Compiler::Type");
		amd_require(_AMD "::Compiler::Node");
		amd_require(_AMD "::Program");
	}
}

Anarres::Mud::Driver::Compiler
new(class)
	SV *	class
	CODE:
		RETVAL = Newz(0, RETVAL, 1, struct _amd_parser);
	OUTPUT:
		RETVAL

int
lex(class, str)
	SV *	class
	char *	str
	CODE:
		test_lexer(str);
		RETVAL = 0;
	OUTPUT:
		RETVAL

int
parse(class, prog, str)
	SV *	class
	SV *	prog
	char *	str
	CODE:
		amd_yyparser_parse(prog, str);
		RETVAL = 0;
	OUTPUT:
		RETVAL

void
DESTROY(self)
	Anarres::Mud::Driver::Compiler	self
	CODE:
		Safefree(self);



( run in 1.176 second using v1.01-cache-2.11-cpan-13bb782fe5a )