help-smalltalk
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Help-smalltalk] [PATCH 3/4] embedded: Allow to disable the line number


From: Holger Hans Peter Freyther
Subject: [Help-smalltalk] [PATCH 3/4] embedded: Allow to disable the line number bytecode
Date: Sun, 5 May 2013 11:26:01 +0200

This is more noticable on smaller devices. Allow to disable the
line number bytecode. This changes the runtime of Bench.st for
4 iterations from 26s to 19s.
---
 gst-tool.c       |    7 ++++++-
 libgst/byte.c    |    8 ++++++--
 libgst/gstpriv.h |    3 +++
 libgst/gstpub.c  |    5 +++++
 libgst/gstpub.h  |    2 ++
 main.c           |    6 ++++++
 6 files changed, 28 insertions(+), 3 deletions(-)

diff --git a/gst-tool.c b/gst-tool.c
index 9cbadce..3f777b4 100644
--- a/gst-tool.c
+++ b/gst-tool.c
@@ -138,7 +138,7 @@ const struct tool tools[] = {
     "gst-remote", "scripts/Remote.st",
     "-h|--help --version --daemon --server -p|--port: -f|--file: -e|--eval: \
        -l|--login: --package: --start: --stop: --pid --kill --snapshot:: \
-       -I|--image-file: --kernel-directory: -v|-V|--verbose",
+       -I|--image-file: --kernel-directory: -v|-V|--verbose --no-line-numbers",
     NULL, true
   },
   {
@@ -293,6 +293,11 @@ parse_option (int short_opt, const char *long_opt, const 
char *arg)
 #endif
     }
 
+  if (long_opt && !strcmp (long_opt, "no-line-numbers"))
+    {
+      gst_omit_line_numbers(true);
+    }
+
   if (long_opt && !strcmp (long_opt, "version"))
     usage = 1;
 
diff --git a/libgst/byte.c b/libgst/byte.c
index 6eed361..50ff07c 100644
--- a/libgst/byte.c
+++ b/libgst/byte.c
@@ -59,6 +59,8 @@
 /* Where the compiled bytecodes go.  */
 bc_vector _gst_cur_bytecodes;
 
+mst_Boolean _gst_omit_line_numbers = 0;
+
 /* Reallocate an array of bytecodes, leaving space for DELTA more
    bytes.  */
 static void realloc_bytecodes (bc_vector bytecodes,
@@ -127,7 +129,8 @@ _gst_line_number (int n, int flags)
       assert (n > 0);
       if (flags & LN_ABSOLUTE)
        {
-         compile_byte (LINE_NUMBER_BYTECODE, n);
+          if (!_gst_omit_line_numbers)
+           compile_byte (LINE_NUMBER_BYTECODE, n);
          _gst_compiler_state->prev_line = n;
        }
       _gst_compiler_state->line_offset = n - 1;
@@ -158,7 +161,8 @@ _gst_compile_byte (gst_uchar byte, int arg)
 {
   if (next_line_number != -1)
     {
-      compile_byte (LINE_NUMBER_BYTECODE, next_line_number);
+      if (!_gst_omit_line_numbers)
+        compile_byte (LINE_NUMBER_BYTECODE, next_line_number);
       next_line_number = -1;
     }
 
diff --git a/libgst/gstpriv.h b/libgst/gstpriv.h
index b3d100f..7e9dcf7 100644
--- a/libgst/gstpriv.h
+++ b/libgst/gstpriv.h
@@ -552,6 +552,9 @@ extern OOP _gst_nil_oop
 #define MIN(x, y)              ( ((x) > (y)) ? (y) : (x) )
 #endif
 
+/* helpers */
+extern mst_Boolean _gst_omit_line_numbers;
+
 #include "ansidecl.h"
 #include "mathl.h"
 #include "socketx.h"
diff --git a/libgst/gstpub.c b/libgst/gstpub.c
index 2ebdfe2..c1a17ea 100644
--- a/libgst/gstpub.c
+++ b/libgst/gstpub.c
@@ -609,3 +609,8 @@ gst_set_event_loop_handlers(mst_Boolean (*poll) (int ms),
 {
   return _gst_set_event_loop_handlers(poll, dispatch);
 }
+
+void gst_omit_line_numbers(mst_Boolean omit)
+{
+  _gst_omit_line_numbers = omit;
+}
diff --git a/libgst/gstpub.h b/libgst/gstpub.h
index cec9fc3..bc45bd9 100644
--- a/libgst/gstpub.h
+++ b/libgst/gstpub.h
@@ -342,6 +342,8 @@ extern wchar_t *gst_oop_to_wstring (OOP oop);
 extern mst_Boolean gst_set_event_loop_handlers(mst_Boolean (*poll) (int ms),
                                               void (*dispatch) (void));
 
+extern void gst_omit_line_numbers(mst_Boolean omit);
+
 /* This is exclusively for programs who link with libgst.a; plugins
    should not use this VMProxy but rather the one they receive in
    gst_initModule.  */
diff --git a/main.c b/main.c
index 9c6bc60..7c050d7 100644
--- a/main.c
+++ b/main.c
@@ -92,6 +92,7 @@ static const char help_text[] =
   "\n      --kernel-directory DIR\t Look for kernel files in directory DIR."
   "\n      --no-user-files\t\t Don't read user customization files.\n"
   "\n   -\t\t\t\t Read input from standard input explicitly."
+  "\n      --no-line-numbers\t\t Do not generate line numbers in the bytecode."
   "\n"
   "\nFiles are loaded one after the other.  After the last one is loaded,"
   "\nSmalltalk will exit.  If no files are specified, Smalltalk reads from"
@@ -122,6 +123,7 @@ static const char copyright_and_legal_stuff_text[] =
 #define OPT_NO_USER 3
 #define OPT_EMACS_MODE 4
 #define OPT_MAYBE_REBUILD 5
+#define OPT_NO_LINE_NUMBERS 6
 
 #define OPTIONS "-acDEf:ghiI:K:lL:QqrSvV"
 
@@ -147,6 +149,7 @@ static const struct option long_options[] = {
   {"snapshot", 0, 0, 'S'},
   {"version", 0, 0, 'v'},
   {"verbose", 0, 0, 'V'},
+  {"no-line-numbers", 0, 0, OPT_NO_LINE_NUMBERS},
   {NULL, 0, 0, 0}
 };
 
@@ -299,6 +302,9 @@ parse_args (int argc,
          loaded_files[n_loaded_files].kernel_path = false;
          loaded_files[n_loaded_files++].file_name = optarg;
          break;
+       case OPT_NO_LINE_NUMBERS:
+         gst_omit_line_numbers(true);
+         break;
 
        default:
          /* Fall through and show help message */
-- 
1.7.10.4




reply via email to

[Prev in Thread] Current Thread [Next in Thread]