Пример #1
0
 void Interpreter::Interpret(ILineReader & reader, bool showResult)
 {
     Ref<Expr> expr = Parse(reader);
     
     // Bail if we failed to parse.
     if (expr.IsNull()) return;
     
     // Create a starting fiber for the expression.
     Ref<Block> block = Compiler::CompileTopLevel(*this, *expr);
     Value blockObj = NewBlock(block, mNil);
     Value fiber = NewFiber(blockObj);
     
     // Run the interpreter.
     Value result = fiber.AsFiber()->GetFiber().Execute();
     
     if (showResult)
     {
         std::stringstream text;
         text << result << std::endl;
         mHost.Output(String(text.str().c_str()));
     }
 }