void InternalEvalString(LispEnvironment& aEnvironment, LispPtr& aResult, const LispChar* aString) { LispString full(aString); full.push_back(';'); StringInput input(full,aEnvironment.iInputStatus); LispPtr lispexpr; LispTokenizer &tok = *aEnvironment.iCurrentTokenizer; InfixParser parser(tok, input, aEnvironment, aEnvironment.PreFix(), aEnvironment.InFix(), aEnvironment.PostFix(), aEnvironment.Bodied()); parser.Parse(lispexpr); aEnvironment.iEvaluator->Eval(aEnvironment, aResult, lispexpr); }
void DoInternalLoad(LispEnvironment& aEnvironment,LispInput* aInput) { LispLocalInput localInput(aEnvironment, aInput); // TODO make "EndOfFile" a global thing // read-parse-eval to the end of file const LispString* eof = aEnvironment.HashTable().LookUp("EndOfFile"); bool endoffile = false; LispTokenizer tok; InfixParser parser(tok, *aEnvironment.CurrentInput(), aEnvironment, aEnvironment.PreFix(), aEnvironment.InFix(), aEnvironment.PostFix(), aEnvironment.Bodied()); while (!endoffile) { LispPtr readIn; // Read expression parser.Parse(readIn); if (!readIn) throw LispErrReadingFile(); // Check for end of file if (readIn->String() == eof) { endoffile = true; } // Else evaluate else { LispPtr result; aEnvironment.iEvaluator->Eval(aEnvironment, result, readIn); } } }