Develop and Download Open Source Software

Browse CVS Repository

Diff of /shiki/shiki/shiki.c

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.65 by aloha, Thu Dec 28 05:04:45 2006 UTC revision 1.66 by aloha, Sat Feb 3 09:48:01 2007 UTC
# Line 401  static void reload_buffer() { Line 401  static void reload_buffer() {
401  /* gauche を起動して文字列をロード */  /* gauche を起動して文字列をロード */
402  static gchar *load_cstring_by_gauche(gchar *s) {  static gchar *load_cstring_by_gauche(gchar *s) {
403    gchar *msg;    gchar *msg;
404      gint result, i;
405    g_print("%s\n", s);    ScmEvalPacket packet;
   ScmObj result, error;  
406    /* 入力文字列ポートを開く */    /* 入力文字列ポートを開く */
407    ScmObj is = Scm_MakeInputStringPort(SCM_STRING(SCM_MAKE_STR_COPYING(s)), TRUE);    ScmObj is = Scm_MakeInputStringPort(SCM_STRING(SCM_MAKE_STR_COPYING(s)), TRUE);
408    /* 出力文字列ポート開く */    /* 出力文字列ポート開く */
409    ScmObj os = Scm_MakeOutputStringPort(TRUE);    ScmObj os = Scm_MakeOutputStringPort(TRUE);
410    
411    Scm_Define(SCM_MODULE(Shiki_CURRENT_BUFFER_ENV), SCM_SYMBOL(SCM_INTERN("*input*")), is);    Scm_Define(SCM_MODULE(Shiki_CURRENT_BUFFER_ENV), SCM_SYMBOL(SCM_INTERN("*input*")), is);
412    Scm_Define(SCM_MODULE(Shiki_CURRENT_BUFFER_ENV), SCM_SYMBOL(SCM_INTERN("*error*")), SCM_FALSE);    result = Scm_EvalCString("(load-from-port *input*)", SCM_OBJ(Shiki_CURRENT_BUFFER_ENV), &packet);
   /* Scheme のレベルでエラーハンドリングをしつつ,ポートから順番に S 式を読み込み,評価していく.コンパイルエラーなどは *error* に捕捉される */  
   result = Scm_EvalCString("(guard (e (else (set! *error* e) #f)) (eval (load-from-port *input*) (current-module)))", SCM_OBJ(Shiki_CURRENT_BUFFER_ENV));  
   
   error = Scm_GlobalVariableRef(SCM_MODULE(Shiki_CURRENT_BUFFER_ENV), SCM_SYMBOL(SCM_INTERN("*error*")), 0);  
413    
414    /* 文字列を評価した結果をポートに書き込む */    if(result == -1)
415    if (!SCM_FALSEP(error))      Scm_Write(packet.exception, os, SCM_WRITE_DISPLAY);
     Scm_Write(error, os, SCM_WRITE_DISPLAY);  
416    else    else
417      Scm_Write(result, os, SCM_WRITE_DISPLAY);      for(i = 0; i < packet.numResults; i++)
418          Scm_Printf(SCM_PORT(os), "%S\n", packet.results[i]);
419    
420    msg = Scm_GetString(SCM_STRING(Scm_GetOutputString(SCM_PORT(os))));    msg = Scm_GetString(SCM_STRING(Scm_GetOutputString(SCM_PORT(os))));
421    /* ポート閉じる */    /* ポート閉じる */

Legend:
Removed from v.1.65  
changed lines
  Added in v.1.66

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26