Пример #1
0
IoMessage *IoMessage_newFromText_labelSymbol_(void *state, const char *text, IoSymbol *label)
{
	IoLexer *lexer;
	IoMessage *msg;

	IoState_pushCollectorPause((IoState *)state); // needed?

	lexer = IoLexer_new();

	IoLexer_string_(lexer, text);
	IoLexer_lex(lexer);

    // This also applies line numbers.
	msg = IoMessage_newParse(state, lexer);

	IoMessage_opShuffle_(msg);

	IoMessage_label_(msg, label);

	// DLF:  Check for pending breakpoint on this message.
    iovm_set_pending_breakpoints(msg);

	IoLexer_free(lexer);

	IoState_popCollectorPause((IoState *)state);

	return msg;
}
Пример #2
0
IoMessage *IoMessage_newFromText_labelSymbol_(void *state, const char *text, IoSymbol *label)
{
	IoLexer *lexer = IoLexer_new();
	IoMessage *msg;

	IoLexer_string_(lexer, text);
	IoLexer_lex(lexer);

	msg = IoMessage_newParse(state, lexer);
	IoMessage_opShuffle_(msg);
	IoMessage_label_(msg, label);
	IoLexer_free(lexer);

	return msg;
}
Пример #3
0
IO_METHOD(IoObject, messageForString2)
{
  /*doc Compiler messageForString2(aString)
	Returns the compiled message object for aString. (Runs raw string against lexer directly.)
	*/
	IoLexer *lexer = IoLexer_new();
	char *text = IoMessage_locals_cStringArgAt_(m, locals, 0);
	IoMessage *msg;

	IoLexer_string_(lexer, text);
	IoLexer_lex(lexer);

	msg = IoMessage_newParse(IOSTATE, lexer);

	IoLexer_free(lexer);
	return msg;
}
Пример #4
0
IO_METHOD(IoObject, tokensForString)
{
	/*doc Compiler tokensForString(aString)
	Returns a list of token objects lexed from the input string.
*/

	IoSymbol *text = IoMessage_locals_seqArgAt_(m, locals, 0);
	IoList *tokensList = IoList_new(IOSTATE);
	IoLexer *lexer = IoLexer_new();
	IoSymbol *name = IOSYMBOL("name");
	IoSymbol *line = IOSYMBOL("line");
	IoSymbol *character = IOSYMBOL("character");
	IoSymbol *type = IOSYMBOL("type");

	IoLexer_string_(lexer, CSTRING(text));
	IoLexer_lex(lexer);

	if (IoLexer_errorToken(lexer))
	{
		IoSymbol *errorString  = IOSYMBOL(IoLexer_errorDescription(lexer));
		IoLexer_free(lexer);
		IoState_error_(IOSTATE, NULL, "compile error: %s", CSTRING(errorString));
	}
	else
	{
		IoToken *t;

		while ((t = IoLexer_pop(lexer)))
		{
			IoObject *tokenObject = IoObject_new(IOSTATE);

			IoObject_setSlot_to_(tokenObject, name, IOSYMBOL(IoToken_name(t)));
			IoObject_setSlot_to_(tokenObject, line, IONUMBER(IoToken_lineNumber(t)));
			IoObject_setSlot_to_(tokenObject, character, IONUMBER(IoToken_charNumber(t)));
			IoObject_setSlot_to_(tokenObject, type, IOSYMBOL(IoToken_typeName(t)));

			IoList_rawAppend_(tokensList, tokenObject);
		}
	}

	IoLexer_free(lexer);

	return tokensList;
}