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; }
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; }
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; }
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; }