lac : diff 36ea5153 6ddebcde

Branch: master

Commit: 36ea5153bb375cc6070c1800a5d135f857747f99

Author: Gianluca Guida <glguida@tlbflush.org>
Date: Thu Mar 9 00:07:42 UTC 2017
Parent: 6ddebcde2790d334a5c998a1fe2dae286aab9277
Log message:

    lac: rationalize interface a bit

    1: diff --git a/src/lib/lac.c b/src/lib/lac.c
    2: index f0ac653..09cb84c 100644
    3: --- a/src/lib/lac.c
    4: +++ b/src/lib/lac.c
    5: @@ -823,6 +823,11 @@ lac_error_print (FILE * f)
    6:    fprintf (f, "\")\n");
    7:  }
    8:  
    9: +lreg_t
   10: +lac_eval (lreg_t lr, lenv_t *env)
   11: +{
   12: +  return eval (lr, env);
   13: +}
   14:  
   15:  lenv_t *
   16:  lac_init (void)
   17: diff --git a/src/lib/lac.h b/src/lib/lac.h
   18: index 5973ac0..87168c0 100644
   19: --- a/src/lib/lac.h
   20: +++ b/src/lib/lac.h
   21: @@ -146,6 +146,10 @@ static inline void *lac_alloc_fini(size_t size,
   22:  	return obj;
   23:  }
   24:  
   25: +void lac_error_print (FILE * f);
   26: +lreg_t lac_eval (lreg_t lr, lenv_t *env);
   27: +
   28: +
   29:  struct cons
   30:  {
   31:    lreg_t a;
   32: @@ -160,6 +164,11 @@ get_cons(lreg_t lr)
   33:    raise_exception("not a cons", lr);
   34:  }
   35:  
   36: +static inline lreg_t lac_string_box(char *s)
   37: +{
   38: +  return lreg_raw(GC_strdup(s), LREG_STRING);
   39: +}
   40: +
   41:  
   42:  /*
   43:   * Embedded procedures
   44: @@ -283,13 +292,12 @@ extern __thread lreg_t _lac_xcpt_reg;
   45:      free(p);					\
   46:    } while(0)
   47:  
   48: -void lac_error_print (FILE * f);
   49: -
   50:  
   51:  /*
   52:   * Representations
   53:   */
   54:  
   55: +lreg_t sexpr_eval_string(char *s, lenv_t *env);
   56:  lreg_t sexpr_parse_string(char *s, lreg_t (*fn)(lreg_t,void*), void *opq);
   57:  lreg_t sexpr_parse_file(FILE *f, lreg_t (*fn)(lreg_t,void*), void *opq);
   58:  void sexpr_fprint(FILE *f, lreg_t lr);
   59: diff --git a/src/lib/lex.l b/src/lib/lex.l
   60: index e854b7b..8647c1b 100644
   61: --- a/src/lib/lex.l
   62: +++ b/src/lib/lex.l
   63: @@ -134,6 +134,29 @@ static void _sexpr_parse(yyscan_t yyscan, struct parse_cb *cb)
   64:  	yylex_destroy(yyscan);
   65:  }
   66:  
   67: +lreg_t sexpr_eval_string(char *s, lenv_t *env)
   68: +{
   69: +	yyscan_t yyscan;
   70: +	struct parse_cb cb;
   71: +
   72: +	cb.fn = (lreg_t (*)(lreg_t,void*))eval;
   73: +	cb.opq = (void *)env;
   74: +	cb.res = NIL;
   75: +
   76: +	yylex_init(&yyscan);
   77: +	yy_scan_string(s, yyscan);
   78: +
   79: +	lac_on_error ({
   80: +	    lac_error_print (stderr);
   81: +	    return NIL;
   82: +	  });
   83: +
   84: +	_sexpr_parse(yyscan, &cb);
   85: +
   86: +	lac_off_error();
   87: +	return cb.res;
   88: +}
   89: +
   90:  lreg_t sexpr_parse_string(char *s, lreg_t (*fn)(lreg_t,void*), void *opq)
   91:  {
   92:  	yyscan_t yyscan;
   93: @@ -147,6 +170,7 @@ lreg_t sexpr_parse_string(char *s, lreg_t (*fn)(lreg_t,void*), void *opq)
   94:  	yy_scan_string(s, yyscan);
   95:  
   96:  	_sexpr_parse(yyscan, &cb);
   97: +
   98:  	return cb.res;
   99:  }
  100:  
  101: diff --git a/src/repl/lac.c b/src/repl/lac.c
  102: index 5937d88..e2e4da1 100644
  103: --- a/src/repl/lac.c
  104: +++ b/src/repl/lac.c
  105: @@ -34,7 +34,7 @@ timed_eval (lreg_t lr, void *opq)
  106:    lenv_t *env = (lenv_t *) opq;
  107:  
  108:    gettimeofday (&t1, NULL);
  109: -  ret = eval (lr, env);
  110: +  ret = lac_eval (lr, env);
  111:    gettimeofday (&t2, NULL);
  112:  
  113:    fprintf (stderr, "Evaluation took %ld seconds and %ld microseconds.\n",

Generated by git2html.