Thanx a lot Ole,it's working now.

On Fri, Jan 9, 2009 at 5:14 PM, Ole Hougaard <[email protected]> wrote:

> 'undefined' is actually the correct result when your script ends in a
> variable declaration (seciton 12.2 in ECMA-262). Try changing the last line
> to just 'add(3,4)'.
>
>
> On Fri, Jan 9, 2009 at 12:10 PM, bijay <[email protected]> wrote:
>
>>
>> Hi All,
>> I have posted the same doubt earlier in this group.
>> Actually i want to execute an external java script file from v8 code.
>> I saw lot of code,normally executing javascript inside v8.But didn't
>> get the
>> solution for executing an external javascript file by putting file
>> name inside v8 code in C++.I am still waiting for the solution.What i
>> did earlier is,i read the content of the file
>> character by character and assigned it to a v8::String as source then
>> compile ans run it.
>> But not getting the output exactly from javascript.Can anyone please
>> help me out.
>> //////////////here is the v8 c++ file////////////
>> #include <v8.h>
>> #include <cstring>
>> #include <cstdio>
>> #include <cstdlib>
>> #include <iostream>
>> #include <fstream>
>> using namespace std ;
>>
>> void RunShell(v8::Handle<v8::Context> context);
>> v8::Handle<v8::String> ReadFile(const char* name);
>>
>> v8::Handle<v8::Value> Load(const v8::Arguments& args);
>>
>> v8::Handle<v8::Value> Plus(const v8::Arguments& args);
>>
>> bool ExecuteJavaScript(v8::Handle<v8::String> source,
>>                   v8::Handle<v8::Value> name,
>>                   bool print_result,
>>                   bool report_exceptions);
>>
>> void ReportException(v8::TryCatch* handler);
>>
>> FILE* file;
>> v8::Handle<v8::String> result;
>> v8::Handle<v8::String> src1;
>> char *fileName ;
>> char *str ="add.js";
>> int main(int argc, char* argv[])
>> {
>>
>>   v8::V8::SetFlagsFromCommandLine(&argc, argv, true);
>>   v8::HandleScope handle_scope;
>>   v8::Handle<v8::ObjectTemplate> global = v8::ObjectTemplate::New();
>>   v8::Handle<v8::Context> context = v8::Context::New(NULL, global);
>>
>>   v8::Context::Scope context_scope(context);
>>   bool run_shell = (argc == 1);
>>
>>   for (int i = 1; i < argc; i++)
>>    {
>>
>>          const char* str = argv[i];//b4
>>          //const char* str = "add.js";//now
>>          printf("%s", *str);
>>          if (strcmp(str, "--shell") == 0)
>>             {
>>               run_shell = true;
>>             }
>>
>>          else if (strcmp(str, "-f") == 0)
>>           {
>>
>>
>>             continue;
>>
>>           }
>>          else if (strncmp(str, "--", 2) == 0)
>>           {
>>
>>             printf("Warning: unknown flag %s.\n", str);
>>
>>           }
>>          else if (strcmp(str, "-e") == 0 && i + 1 < argc)
>>          {
>>
>>                  v8::HandleScope handle_scope;
>>                  v8::Handle<v8::String> file_name =
>> v8::String::New("dumy");
>>                 // v8::Handle<v8::String> source = v8::String::New(argv[i
>> +
>> 1]);
>>                  v8::Handle<v8::String> source = v8::String::New(str);
>>                  //Load(*str);
>>                  if (!ExecuteJavaScript(source, file_name, false, true))
>>                     {
>>                         printf("JavaScript not executed.");
>>                         return 1;
>>                         i++;
>>
>>                    }
>>          }
>>          else
>>            {
>>
>>                 // Use all other arguments as names of files to load
>> and run.
>>                 v8::HandleScope handle_scope;
>>                 v8::Handle<v8::String> file_name = v8::String::New(str);
>>                 v8::Handle<v8::String> source = ReadFile(str);
>>                 //Load(v8::Arguments *str);
>>
>>                 if (source.IsEmpty())
>>                    {
>>                     printf("Error reading '%s'\n", str);
>>                     return 1;
>>                    }
>>                 if (!ExecuteJavaScript(source, file_name, false, true))
>>                    {
>>
>>                           printf("Java Script Not Executed .");
>>                           return 1;
>>                    }
>>
>>            }
>>
>>  }
>>
>>  if (run_shell)
>>       {
>>        RunShell(context);
>>       }
>>    return 0;
>>
>> }
>> v8::Handle<v8::Value> Plus(const v8::Arguments& args)
>> {
>>
>>  unsigned int A = args[0]->Uint32Value();
>>  unsigned int B = args[1]->Uint32Value();
>>  unsigned int C = args[0]->Uint32Value() +args[1]->Uint32Value();
>>  //printf("Value of c is:%d",C);
>>
>> }
>> void RunShell(v8::Handle<v8::Context> context)
>> {
>>
>>    static const int kBufferSize = 256;
>>    char buffer[kBufferSize];
>>
>>    if (str == NULL)
>>       {
>>          printf("Enter a file to Read.");
>>          //break;
>>       }
>>    ReadFile(str);
>>    v8::HandleScope handle_scope;
>>    printf("\n");
>> }
>>
>> v8::Handle<v8::String> ReadFile(const char *name)
>>  {
>>
>>   file = fopen(name, "rb");
>>   if (file == NULL)
>>      {
>>
>>       return v8::Handle<v8::String>();
>>       printf("File is empty.");
>>
>>      }
>>   else
>>    {
>>
>>    // printf("\nFile Reading starts....\n");
>>
>>    }
>>
>>   fseek(file, 0, SEEK_END);//sends file pointer to end of the file.
>>   int size = ftell(file);//counts the size of the file in character.
>>   printf("The size of file is:%d\n",size);
>>   rewind(file);
>>
>>   char* chars = new char[size + 1];
>>   chars[size] = '\0';
>>   for (int i = 0; i < size;)
>>     {
>>       int read = fread(&chars[i], 1, size - i, file);//
>>       i += read;
>>
>>     }
>>
>>   fclose(file);
>>   //v8::Handle<v8::String> result;
>>   result = v8::String::New(chars, size);
>>   v8::String::Utf8Value str1(result);
>>   printf("\nRead File is like bellow...\n\n%s",*str1);
>>   ExecuteJavaScript(v8::String::New(str),v8::String::New("dumy
>> "),true,true);
>>
>>   delete[] chars;
>>   return result;
>>
>> }
>> bool ExecuteJavaScript(v8::Handle<v8::String> source,
>>                   v8::Handle<v8::Value> name,
>>                   bool print_result,
>>                   bool report_exceptions)
>> {
>>
>>          v8::HandleScope handle_scope;
>>          v8::TryCatch try_catch;
>>
>>          printf("\nsource File Name is ->%s\n",str);
>>          v8::Handle<v8::Script> script = v8::Script::Compile(result,
>> name);
>>          //v8::String::Utf8Value str(result);
>>          //printf("Result",*str);
>>          if (script.IsEmpty())
>>             {
>>
>>                printf("Script is Empty.\n");
>>                if (report_exceptions)
>>                ReportException(&try_catch);
>>                return false;
>>             }
>>         else
>>            {
>>                v8::Handle<v8::Value> result1 = script->Run();
>>                if (!result.IsEmpty())
>>                 {
>>                   v8::String::Utf8Value str(result1);
>>                   printf("Result is not empty.\n%s",*str);
>>                 }
>>               if (result.IsEmpty())
>>                 {
>>                   printf("Result is empty.\n");
>>                   if (report_exceptions)
>>                   ReportException(&try_catch);
>>                   return false;
>>                 }
>>               else if (result->IsUndefined())
>>                 {
>>                      v8::String::Utf8Value str(result1);
>>                      printf("\nResult After Execution - undefined\n
>> %s",*str);
>>
>>                 }
>>
>>                else
>>                {
>>                    //else if (print_result && !result->IsUndefined
>> ())
>>                     if (print_result && !result->IsUndefined())
>>                       {
>>
>>                         v8::String::Utf8Value str(result1);
>>                         printf(" \nResult after executing the File
>> is::\n\n%s",
>> *str);
>>
>>                       }
>>                  return true;
>>               }
>>         }
>>
>> }
>>
>> void ReportException(v8::TryCatch* try_catch)
>> {
>>
>>  v8::HandleScope handle_scope;
>>  v8::String::Utf8Value exception(try_catch->Exception());
>>  v8::Handle<v8::Message> message = try_catch->Message();
>>
>>  if (message.IsEmpty())
>>   {
>>
>>     printf("Try_Catch Exception::%s\n", *exception);
>>   }
>>  else
>>   {
>>
>>    v8::String::Utf8Value filename(message->GetScriptResourceName());
>>    int linenum = message->GetLineNumber();
>>
>>    printf("The File Name is: %s\n Line Number: %i\n Exception: %s\n",
>> *filename, linenum, *exception);
>>
>>    v8::String::Utf8Value sourceline(message->GetSourceLine());
>>    printf("Source Line:%s\n", *sourceline);
>>
>>    int start = message->GetStartColumn();
>>
>>    for (int i = 0; i < start; i++)
>>      {
>>         printf(" ");
>>      }
>>    int end = message->GetEndColumn();
>>    for (int i = start; i < end; i++)
>>     {
>>       printf("^");
>>     }
>>     printf("\n");
>>  }
>> }
>> ////////////////////Here is the javascript file/////////////////
>> function add(a,b){
>>        return (a+b);
>>
>> }
>> var a = add(3,4);
>>
>> //////Here is the result after execution////////
>> source File Name is ->add.js
>> Result is not empty.
>> undefined
>> Result after executing the File is::
>>
>> undefined
>> ///////////////////////////
>> Thanks in advance.I think there is a silly mistake anywhere.
>> Can any one please help me out.
>>
>>
>
>
> --
> --
> Ole I Hougaard
> Google Aarhus, Denmark
> +45 8745 9215
>
>
> >
>


-- 
Thanks & Regards
Bijay Kumar Panda
Mob-9739591816
[email protected]
[email protected]

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

Reply via email to