Reviewers: Christian Plesner Hansen,

Message:
Hi Christian, just pinging you about this one too.

Description:
Add a readline() command to d8. This reads a single line, stripping the
new-line at the end. This is the other half of what is required to make
the
Debian Language Shootout code work correctly:
http://code.google.com/p/v8/issues/detail?id=353

BUG=353

Please review this at http://codereview.chromium.org/162004

SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/

Affected files:
   M     src/d8.h
   M     src/d8.cc


Index: src/d8.cc
===================================================================
--- src/d8.cc   (revision 2625)
+++ src/d8.cc   (working copy)
@@ -164,9 +164,6 @@


  Handle<Value> Shell::Read(const Arguments& args) {
-  if (args.Length() != 1) {
-    return ThrowException(String::New("Bad parameters"));
-  }
    String::Utf8Value file(args[0]);
    if (*file == NULL) {
      return ThrowException(String::New("Error loading file"));
@@ -179,6 +176,19 @@
  }


+Handle<Value> Shell::ReadLine(const Arguments& args) {
+  char line_buf[256];
+  if (fgets(line_buf, sizeof(line_buf), stdin) == NULL) {
+    return ThrowException(String::New("Error reading line"));
+  }
+  int len = strlen(line_buf);
+  if (line_buf[len - 1] == '\n') {
+    --len;
+  }
+  return String::New(line_buf, len);
+}
+
+
  Handle<Value> Shell::Load(const Arguments& args) {
    for (int i = 0; i < args.Length(); i++) {
      HandleScope handle_scope;
@@ -400,6 +410,8 @@
    Handle<ObjectTemplate> global_template = ObjectTemplate::New();
    global_template->Set(String::New("print"), FunctionTemplate::New(Print));
    global_template->Set(String::New("read"), FunctionTemplate::New(Read));
+  global_template->Set(String::New("readline"),
+                       FunctionTemplate::New(ReadLine));
    global_template->Set(String::New("load"), FunctionTemplate::New(Load));
    global_template->Set(String::New("quit"), FunctionTemplate::New(Quit));
    global_template->Set(String::New("version"),  
FunctionTemplate::New(Version));
@@ -590,6 +602,8 @@
                         FunctionTemplate::New(Shell::Print));
    global_template->Set(String::New("read"),
                         FunctionTemplate::New(Shell::Read));
+  global_template->Set(String::New("readline"),
+                       FunctionTemplate::New(Shell::ReadLine));
    global_template->Set(String::New("load"),
                         FunctionTemplate::New(Shell::Load));
    global_template->Set(String::New("yield"),
Index: src/d8.h
===================================================================
--- src/d8.h    (revision 2625)
+++ src/d8.h    (working copy)
@@ -142,6 +142,7 @@
    static Handle<Value> Quit(const Arguments& args);
    static Handle<Value> Version(const Arguments& args);
    static Handle<Value> Read(const Arguments& args);
+  static Handle<Value> ReadLine(const Arguments& args);
    static Handle<Value> Load(const Arguments& args);
    // The OS object on the global object contains methods for performing
    // operating system calls:



--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---

Reply via email to