[svn:parrot] r42003 - in branches/auto_libjit: config/auto config/gen config/gen/libjit src/pmc t/steps/auto t/steps/gen

jkeenan at svn.parrot.org jkeenan at svn.parrot.org
Thu Oct 22 00:27:01 UTC 2009


Author: jkeenan
Date: Thu Oct 22 00:27:00 2009
New Revision: 42003
URL: https://trac.parrot.org/parrot/changeset/42003

Log:
Applying modified version of plobsing's alloca_optional.patch.  This configures cleanly; pre- and post-configuration tests pass without warnings, but has not yet been run thru 'make'.

Modified:
   branches/auto_libjit/config/auto/libjit.pm
   branches/auto_libjit/config/gen/libjit.pm
   branches/auto_libjit/config/gen/libjit/frame_builder_libjit_c.in
   branches/auto_libjit/config/gen/libjit/frame_builder_libjit_h.in
   branches/auto_libjit/src/pmc/nci.pmc
   branches/auto_libjit/t/steps/auto/libjit-01.t
   branches/auto_libjit/t/steps/gen/libjit-01.t

Modified: branches/auto_libjit/config/auto/libjit.pm
==============================================================================
--- branches/auto_libjit/config/auto/libjit.pm	Thu Oct 22 00:00:49 2009	(r42002)
+++ branches/auto_libjit/config/auto/libjit.pm	Thu Oct 22 00:27:00 2009	(r42003)
@@ -94,10 +94,14 @@
     if ($has_libjit) {
         $conf->data->set(
             cc_build_call_frames => '-DCAN_BUILD_CALL_FRAMES',
-            has_exec_protect => 1,
+            has_exec_protect     => 1,
+            libjit_has_alloca    => ($conf->data->get('cpuarch') eq 'i386' ? '1' : '0'),
         );
         $conf->data->add( ' ', libs => $extra_libs );
     }
+    else {
+        $conf->data->set( libjit_has_alloca => 0 );
+    }
 }
 
 1;

Modified: branches/auto_libjit/config/gen/libjit.pm
==============================================================================
--- branches/auto_libjit/config/gen/libjit.pm	Thu Oct 22 00:00:49 2009	(r42002)
+++ branches/auto_libjit/config/gen/libjit.pm	Thu Oct 22 00:27:00 2009	(r42003)
@@ -61,6 +61,9 @@
 
             Parrot_init_arg_nci => [ qw(void_ptr void_ptr void_ptr) => 'void_ptr' ],
             pmc_new_noinit      => [ qw(void_ptr INTVAL)            => 'void_ptr' ],
+
+            mem_sys_allocate => [ ('long')     => 'void_ptr' ],
+            mem_sys_free     => [ ('void_ptr') => 'void' ],
         },
     );
     return \%data;

Modified: branches/auto_libjit/config/gen/libjit/frame_builder_libjit_c.in
==============================================================================
--- branches/auto_libjit/config/gen/libjit/frame_builder_libjit_c.in	Thu Oct 22 00:00:49 2009	(r42002)
+++ branches/auto_libjit/config/gen/libjit/frame_builder_libjit_c.in	Thu Oct 22 00:27:00 2009	(r42003)
@@ -112,9 +112,8 @@
 Parrot_jit_create_thunk(PARROT_INTERP, char *sig, void *priv) {
     struct jit_buffer_private_data *p;
     jit_function_t f;
-    jit_value_t jit_interp, jit_func;
-    jit_type_t *jit_args_t;
-    jit_value_t *jit_args_v, *jit_regs;
+    jit_value_t jit_interp, jit_nci_pmc, jit_pcc_sig;
+    jit_value_t jit_func, jit_st;
 
     /* populate private data */
     p      = (struct jit_buffer_private_data*)priv;
@@ -127,30 +126,42 @@
     /* start JIT function */
     {
         jit_type_t arg_types[] = {
-            jit_type_void_ptr,  /* interp */
-            jit_type_void_ptr   /* nci_info */
+            jit_type_void_ptr, /* interp */
+            jit_type_void_ptr, /* nci_pmc */
+            jit_type_void_ptr  /* pcc_sig */
         };
-        jit_type_t f_sig = jit_type_create_signature(jit_abi_cdecl, jit_type_void, arg_types, 2, 1);
+        jit_type_t f_sig = jit_type_create_signature(jit_abi_cdecl, jit_type_void, arg_types, 3, 1);
         f                = jit_function_create(p->ctx, f_sig);
     }
 
     /* get the incomming args */
-    jit_interp = jit_value_get_param(f, 0);
-    jit_func   = jit__vtable_get_pointer(f, jit_interp, jit_value_get_param(f, 1));
+    jit_interp  = jit_value_get_param(f, 0);
+    jit_nci_pmc = jit_value_get_param(f, 1);
+    jit_pcc_sig = jit_value_get_param(f, 2);
+
+    /* get the wrapped function */
+    jit_func   = jit__vtable_get_pointer(f, jit_interp, jit_nci_pmc);
+
+    /* allocate call_state */
+    {
+        jit_value_t sizeof_call_state
+               = jit_value_create_nint_constant(f, jit_type_sys_int, sizeof (call_state));
+        jit_st = JIT_ALLOCA(f, sizeof_call_state);
+    }
+
+    /* init pcc */
+    jit__Parrot_init_arg_nci(f, jit_interp, jit_st, jit_pcc_sig);
 
     /* get the outgoing args */
     {
-        jit_value_t st;
-        int nargs;
+        int nargs = strlen(sig) - 1;
 
-        {
-            jit_value_t sizeof_call_state
-                = jit_value_create_nint_constant(f, jit_type_sys_int, sizeof (call_state));
-            st  = jit_insn_alloca(f, sizeof_call_state);
-        }
+        jit_type_t jit_args_t[nargs];
+        jit_value_t jit_args_v[nargs];
+        jit_value_t jit_regs[nargs];
 
-        nargs = Parrot_jit_parse_sig_args_pre(interp, sig, f, jit_interp, st,
-                                              &jit_args_t, &jit_args_v, &jit_regs);
+        Parrot_jit_parse_sig_args_pre(interp, sig, nargs, f, jit_interp, jit_st,
+                                      jit_args_t, jit_args_v, jit_regs);
 
         /* get the return type */
         {
@@ -167,13 +178,16 @@
             }
 
             /* get the incomming return */
-            Parrot_jit_parse_sig_ret_post(interp, sig, f, jit_interp, st, ret_v);
+            Parrot_jit_parse_sig_ret_post(interp, sig, f, jit_interp, jit_st, ret_v);
         }
 
         /* clean up args */
         Parrot_jit_parse_sig_args_post(interp, sig, nargs, f, jit_interp, jit_args_v, jit_regs);
     }
 
+    /* deallocate call_state */
+    JIT_ALLOCA_FREE(f, jit_st);
+
     /* end JIT function */
     jit_insn_return(f, NULL);
 
@@ -181,29 +195,18 @@
     jit_function_compile(f);
     jit_context_build_end(p->ctx);
 
-    mem_sys_free(jit_args_t);
-    mem_sys_free(jit_args_v);
-    mem_sys_free(jit_regs);
-
     return jit_function_to_closure(f);
 }
 
-int
-Parrot_jit_parse_sig_args_pre(PARROT_INTERP, char *sig, jit_function_t f,
-                              jit_value_t jinterp, jit_value_t st,
-                              jit_type_t **arg_types,
-                              jit_value_t **arg_vals, jit_value_t **arg_regs) {
-    int nargs, nregs, i, j;
+void
+Parrot_jit_parse_sig_args_pre(PARROT_INTERP, char *sig, int nargs,
+                              jit_function_t f, jit_value_t jinterp, jit_value_t st,
+                              jit_type_t *arg_types,
+                              jit_value_t *arg_vals, jit_value_t *arg_regs) {
+    int i, j;
 
     sig += 1; /* ignore return character */
 
-    nargs = strlen(sig);
-    nregs = Parrot_jit_init_pcc(sig, nargs, f, jinterp, st);
-
-    *arg_types = (jit_type_t *)mem_sys_allocate(nargs * sizeof (jit_type_t));
-    *arg_vals  = (jit_value_t *)mem_sys_allocate(nargs * sizeof (jit_value_t));
-    *arg_regs  = (jit_value_t *)mem_sys_allocate(nregs * sizeof (jit_value_t));
-
     for (i = 0, j = 0; i < nargs; i++) {
         char c;
         jit_type_t t1;
@@ -212,10 +215,10 @@
           case 'I':
             t1 = JIT_TYPE_INTVAL;
           read_int_reg:
-            (*arg_types)[i]  = t1;
-            v1               = jit_value_create_nint_constant(f, jit_type_sys_int, j);
-            v2               = jit__get_nci_I(f, jinterp, st, v1);
-            (*arg_regs)[j++] = (*arg_vals)[i] = v2;
+            arg_types[i]  = t1;
+            v1            = jit_value_create_nint_constant(f, jit_type_sys_int, j);
+            v2            = jit__get_nci_I(f, jinterp, st, v1);
+            arg_regs[j++] = arg_vals[i] = v2;
             break;
           case 'c':
             t1 = jit_type_sys_char;
@@ -233,10 +236,10 @@
           case 'N':
             t1 = JIT_TYPE_FLOATVAL;
           read_float_reg:
-            (*arg_types)[i]  = t1;
-            v1               = jit_value_create_nint_constant(f, jit_type_sys_int, j);
-            v2               = jit__get_nci_N(f, jinterp, st, v1);
-            (*arg_regs)[j++] = (*arg_vals)[i] = v2;
+            arg_types[i]  = t1;        
+            v1            = jit_value_create_nint_constant(f, jit_type_sys_int, j);
+            v2            = jit__get_nci_N(f, jinterp, st, v1);
+            arg_regs[j++] = arg_vals[i] = v2;
             break;
           case 'f':
             t1 = jit_type_sys_float;
@@ -246,50 +249,50 @@
             goto read_float_reg;
 
           case 'S':
-            (*arg_types)[i]  = jit_type_void_ptr;
-            v1               = jit_value_create_nint_constant(f, jit_type_sys_int, j);
-            v2               = jit__get_nci_S(f, jinterp, st, v1);
-            (*arg_regs)[j++] = (*arg_vals)[i] = v2;
+            arg_types[i]  = jit_type_void_ptr;
+            v1            = jit_value_create_nint_constant(f, jit_type_sys_int, j);
+            v2            = jit__get_nci_S(f, jinterp, st, v1);
+            arg_regs[j++] = arg_vals[i] = v2;
             break;
 
           case 't':
-            (*arg_types)[i]  = jit_type_void_ptr;
-            v1               = jit_value_create_nint_constant(f, jit_type_sys_int, j);
-            v2               = jit__get_nci_S(f, jinterp, st, v1);
-            (*arg_regs)[j++] = v2;
-            (*arg_vals)[i]   = jit__Parrot_str_to_cstring(f, jinterp, v2);
+            arg_types[i]  = jit_type_void_ptr;
+            v1            = jit_value_create_nint_constant(f, jit_type_sys_int, j);
+            v2            = jit__get_nci_S(f, jinterp, st, v1);
+            arg_regs[j++] = v2;
+            arg_vals[i]   = jit__Parrot_str_to_cstring(f, jinterp, v2);
             break;
 
           case 'b':
-            (*arg_types)[i]  = jit_type_void_ptr;
-            v1               = jit_value_create_nint_constant(f, jit_type_sys_int, j);
-            v2               = jit__get_nci_S(f, jinterp, st, v1);
-            (*arg_regs)[j++] = v2;
-            (*arg_vals)[i]   = jit__Buffer_bufstart(f, v2);
+            arg_types[i]  = jit_type_void_ptr;
+            v1            = jit_value_create_nint_constant(f, jit_type_sys_int, j);
+            v2            = jit__get_nci_S(f, jinterp, st, v1);
+            arg_regs[j++] = v2;
+            arg_vals[i]   = jit__Buffer_bufstart(f, v2);
             break;
           case 'B':
-            (*arg_types)[i]  = jit_type_void_ptr;
-            v1               = jit_value_create_nint_constant(f, jit_type_sys_int, j);
-            v2               = jit__get_nci_S(f, jinterp, st, v1);
-            (*arg_regs)[j++] = v2;
-            v3               = jit__Parrot_str_to_cstring(f, jinterp, v2);
+            arg_types[i]  = jit_type_void_ptr;
+            v1            = jit_value_create_nint_constant(f, jit_type_sys_int, j);
+            v2            = jit__get_nci_S(f, jinterp, st, v1);
+            arg_regs[j++] = v2;
+            v3            = jit__Parrot_str_to_cstring(f, jinterp, v2);
             jit_value_set_addressable(v3);
-            (*arg_vals)[i]   = jit_insn_address_of(f, v3);
+            arg_vals[i]   = jit_insn_address_of(f, v3);
             break;
 
           case 'p':
-            (*arg_types)[i]  = jit_type_void_ptr;
-            v1               = jit_value_create_nint_constant(f, jit_type_sys_int, j);
-            v2               = jit__get_nci_p(f, jinterp, st, v1);
-            (*arg_regs)[j++] = (*arg_vals)[i] = v2;
+            arg_types[i]  = jit_type_void_ptr;
+            v1            = jit_value_create_nint_constant(f, jit_type_sys_int, j);
+            v2            = jit__get_nci_p(f, jinterp, st, v1);
+            arg_regs[j++] = arg_vals[i] = v2;
             break;
           case 'P':
           case 'O':
           case '@':
-            (*arg_types)[i]  = jit_type_void_ptr;
-            v1               = jit_value_create_nint_constant(f, jit_type_sys_int, j);
-            v2               = jit__get_nci_P(f, jinterp, st, v1);
-            (*arg_regs)[j++] = (*arg_vals)[i] = v2;
+            arg_types[i]  = jit_type_void_ptr;
+            v1            = jit_value_create_nint_constant(f, jit_type_sys_int, j);
+            v2            = jit__get_nci_P(f, jinterp, st, v1);
+            arg_regs[j++] = arg_vals[i] = v2;
             break;
           case '2':
             t1 = jit_type_sys_short;
@@ -300,107 +303,51 @@
           case '4':
             t1 = jit_type_sys_long;
           call_get_integer:
-            (*arg_types)[i]  = jit_type_void_ptr;
-            v1               = jit_value_create_nint_constant(f, jit_type_sys_int, j);
-            v2               = jit__get_nci_P(f, jinterp, st, v1);
-            (*arg_regs)[j++] = v2;
-            v3               = jit__vtable_get_integer(f, jinterp, v2);
-            v4               = jit_value_create(f, t1);
+            arg_types[i]  = jit_type_void_ptr;
+            v1            = jit_value_create_nint_constant(f, jit_type_sys_int, j);
+            v2            = jit__get_nci_P(f, jinterp, st, v1);
+            arg_regs[j++] = v2;
+            v3            = jit__vtable_get_integer(f, jinterp, v2);
+            v4            = jit_value_create(f, t1);
             jit_value_set_addressable(v4);
             jit_insn_store(f, v4, v3);
-            (*arg_vals)[i]   = jit_insn_address_of(f, v4);
+            arg_vals[i]   = jit_insn_address_of(f, v4);
             break;
 
           case 'V':
-            (*arg_types)[i]  = jit_type_void_ptr;
-            v1               = jit_value_create_nint_constant(f, jit_type_sys_int, j);
-            v2               = jit__get_nci_P(f, jinterp, st, v1);
-            (*arg_regs)[j++] = v2;
-            v3               = jit__vtable_get_pointer(f, jinterp, v2);
-            v4               = jit_value_create(f, jit_type_void_ptr);
+            arg_types[i]  = jit_type_void_ptr;
+            v1            = jit_value_create_nint_constant(f, jit_type_sys_int, j);
+            v2            = jit__get_nci_P(f, jinterp, st, v1);
+            arg_regs[j++] = v2;
+            v3            = jit__vtable_get_pointer(f, jinterp, v2);
+            v4            = jit_value_create(f, jit_type_void_ptr);
             jit_value_set_addressable(v4);
             jit_insn_store(f, v4, v3);
-            (*arg_vals)[i]   = jit_insn_address_of(f, v4);
+            arg_vals[i]   = jit_insn_address_of(f, v4);
             break;
 
           case '0':
-            (*arg_types)[i] = jit_type_void_ptr;
-            (*arg_vals)[i]  = jit_value_create_nint_constant(f, jit_type_void_ptr, (jit_nint)NULL);
+            arg_types[i] = jit_type_void_ptr;
+            arg_vals[i]  = jit_value_create_nint_constant(f, jit_type_void_ptr, (jit_nint)NULL);
             break;
 
           case 'J':
-            (*arg_types)[i] = jit_type_void_ptr;
-            (*arg_vals)[i]  = jinterp;
+            arg_types[i] = jit_type_void_ptr;
+            arg_vals[i]  = jinterp;
             break;
 
           case 'U':
             /* TODO */
             Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_JIT_ERROR,
                 "arg type 'U' not yet implemented");
-            return -1;
+            return;
 
           default:
             Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_JIT_ERROR,
                 "unkown arg type '%c'", c);
-            return -1;
-        }
-    }
-
-    return nargs;
-}
-
-int
-Parrot_jit_init_pcc(char *sig, int nargs, jit_function_t f, jit_value_t interp, jit_value_t st) {
-    int i, j;
-    char pcc_sig[nargs];
-
-    for (i = 0, j = 0; i < nargs; i++) {
-        switch (sig[i]) {
-          case 'I':
-          case 'c':
-          case 's':
-          case 'i':
-          case 'l':
-            pcc_sig[j++] = 'I';
-            break;
-
-          case 'N':
-          case 'f':
-          case 'd':
-            pcc_sig[j++] = 'N';
-            break;
-
-          case 'S':
-          case 't':
-          case 'b':
-          case 'B':
-            pcc_sig[j++] = 'S';
-            break;
-
-          case 'p':
-          case 'P':
-          case 'O':
-          case 'V':
-          case '2':
-          case '3':
-          case '4':
-            pcc_sig[j++] = 'P';
-            break;
-
-          case '@':
-            pcc_sig[j++] = '@';
-            break;
-
-          default:
-            break;
+            return;
         }
     }
-    pcc_sig[j]  = '\0';
-
-    jit__Parrot_init_arg_nci(f, interp, st,
-                             jit_value_create_string_constant(f, pcc_sig, j+1));
-
-    return j;
 }
 
 jit_type_t
@@ -591,26 +538,6 @@
     return jit_value_create_nint_constant(f, JIT_TYPE_INTVAL, i);
 }
 
-jit_value_t
-jit_value_create_string_constant(jit_function_t f, char *str, int len) {
-    jit_value_t jit_len, jit_str;
-    int i;
-
-    if (len < 1) {
-        len = strlen(str);
-    }
-
-    jit_len = jit_value_create_nint_constant(f, jit_type_sys_int, len);
-    jit_str = jit_insn_alloca(f, jit_len);
-
-    for (i = 0; i < len; i++) {
-        jit_value_t c = jit_value_create_nint_constant(f, jit_type_sys_char, str[i]);
-        jit_insn_store_relative(f, jit_str, i, c);
-    }
-
-    return jit_str;
-}
-
 /*
  * JIT wrappers
  */

Modified: branches/auto_libjit/config/gen/libjit/frame_builder_libjit_h.in
==============================================================================
--- branches/auto_libjit/config/gen/libjit/frame_builder_libjit_h.in	Thu Oct 22 00:00:49 2009	(r42002)
+++ branches/auto_libjit/config/gen/libjit/frame_builder_libjit_h.in	Thu Oct 22 00:27:00 2009	(r42003)
@@ -33,9 +33,9 @@
  * JIT types
  */
 
-#define JIT_TYPE_UINTVAL  @libjit_uv@ // jit_type_sys_ulong
-#define JIT_TYPE_INTVAL   @libjit_iv@ // jit_type_sys_long
-#define JIT_TYPE_FLOATVAL @libjit_nv@ // jit_type_sys_double
+#define JIT_TYPE_UINTVAL  @libjit_uv@
+#define JIT_TYPE_INTVAL   @libjit_iv@
+#define JIT_TYPE_FLOATVAL @libjit_nv@
 
 /*
  * JIT functions
@@ -44,12 +44,9 @@
 void *
 Parrot_jit_create_thunk(Interp *, char *, void *);
 
-int
-Parrot_jit_parse_sig_args_pre(Interp *, char *, jit_function_t, jit_value_t, jit_value_t,
-                              jit_type_t **, jit_value_t **, jit_value_t **);
-
-int
-Parrot_jit_init_pcc(char *, int, jit_function_t, jit_value_t, jit_value_t);
+void
+Parrot_jit_parse_sig_args_pre(Interp *, char *, int, jit_function_t, jit_value_t, jit_value_t,
+                              jit_type_t *, jit_value_t *, jit_value_t *);
 
 jit_type_t
 Parrot_jit_parse_sig_ret_pre(Interp *, char *);
@@ -63,8 +60,16 @@
 jit_value_t
 jit_value_create_intval_constant(jit_function_t, INTVAL);
 
-jit_value_t
-jit_value_create_string_constant(jit_function_t, char *, int);
+/*
+ * workaround for platforms that lack libjit alloca support
+ */
+#if @libjit_has_alloca@
+#  define JIT_ALLOCA(f, n)      jit_insn_alloca(f, n)
+#  define JIT_ALLOCA_FREE(f, p)
+#else
+#  define JIT_ALLOCA(f, n)      jit__mem_sys_allocate(f, n)
+#  define JIT_ALLOCA_FREE(f, p) jit__mem_sys_free(f, p)
+#endif
 
 /*
  * JIT wrappers

Modified: branches/auto_libjit/src/pmc/nci.pmc
==============================================================================
--- branches/auto_libjit/src/pmc/nci.pmc	Thu Oct 22 00:00:49 2009	(r42002)
+++ branches/auto_libjit/src/pmc/nci.pmc	Thu Oct 22 00:27:00 2009	(r42003)
@@ -63,11 +63,10 @@
                 param_sig[j++] = 'P';
             case (INTVAL)'v':
                 break;
-                /* I have no idea how to handle these */
             case (INTVAL)'2':
             case (INTVAL)'3':
             case (INTVAL)'4':
-                param_sig[j++] = 'I';
+                param_sig[j++] = 'P';
                 break;
             case (INTVAL)'@':
                 param_sig[j++] = '@';

Modified: branches/auto_libjit/t/steps/auto/libjit-01.t
==============================================================================
--- branches/auto_libjit/t/steps/auto/libjit-01.t	Thu Oct 22 00:00:49 2009	(r42002)
+++ branches/auto_libjit/t/steps/auto/libjit-01.t	Thu Oct 22 00:27:00 2009	(r42003)
@@ -6,7 +6,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 34;
+use Test::More tests => 40;
 use lib qw( lib t/configure/testlib );
 use Parrot::Configure;
 use Parrot::Configure::Options 'process_options';
@@ -107,26 +107,55 @@
 
 $conf->data->set( 'cc_build_call_frames' => undef );
 $conf->data->set( 'has_exec_protect' => undef );
+$conf->data->set( 'libjit_has_alloca' => undef );
 $conf->data->set( 'libs' => '' );
+
+$has_libjit = 1;
+$extra_libs = 'mylibs';
+$conf->data->set( 'cpuarch' => 'i386' );
+
+auto::libjit::_handle_has_libjit($conf, $has_libjit, $extra_libs);
+is( $conf->data->get( 'cc_build_call_frames' ), '-DCAN_BUILD_CALL_FRAMES',
+    "Got expected value for cc_build_call_frames" );
+ok( $conf->data->get( 'has_exec_protect' ), "has_exec_protect' set" );
+ok( $conf->data->get( 'libjit_has_alloca'),
+    "on i386 with libJIT, 'libjit_has_alloca' has true value" );
+is( $conf->data->get( 'libs' ), " $extra_libs",
+    "Got expected value for libs" );
+
+$conf->data->set( 'cc_build_call_frames' => undef );
+$conf->data->set( 'has_exec_protect' => undef );
+$conf->data->set( 'libjit_has_alloca' => undef );
+$conf->data->set( 'libs' => '' );
+
 $has_libjit = 1;
 $extra_libs = 'mylibs';
+$conf->data->set( 'cpuarch' => 'ppc' );
+
 auto::libjit::_handle_has_libjit($conf, $has_libjit, $extra_libs);
 is( $conf->data->get( 'cc_build_call_frames' ), '-DCAN_BUILD_CALL_FRAMES',
     "Got expected value for cc_build_call_frames" );
 ok( $conf->data->get( 'has_exec_protect' ), "has_exec_protect' set" );
+ok( ! $conf->data->get( 'libjit_has_alloca'),
+    "on non-i386 with libJIT, 'libjit_has_alloca' has false value" );
 is( $conf->data->get( 'libs' ), " $extra_libs",
     "Got expected value for libs" );
 
 $conf->data->set( 'cc_build_call_frames' => undef );
 $conf->data->set( 'has_exec_protect' => undef );
+$conf->data->set( 'libjit_has_alloca' => undef );
 $conf->data->set( 'libs' => '' );
+
 $has_libjit = 0;
 $extra_libs = 'mylibs';
+
 auto::libjit::_handle_has_libjit($conf, $has_libjit, $extra_libs);
 ok( ! defined($conf->data->get( 'cc_build_call_frames' )), 
     "cc_build_call_frames undefined as expected" );
 ok( ! defined($conf->data->get( 'has_exec_protect' )),
     "has_exec_protect' undefined" );
+ok( ! $conf->data->get( 'libjit_has_alloca'),
+    "without libJIT, 'libjit_has_alloca' has false value" );
 is( $conf->data->get( 'libs' ), "",
     "Got expected value for libs" );
 

Modified: branches/auto_libjit/t/steps/gen/libjit-01.t
==============================================================================
--- branches/auto_libjit/t/steps/gen/libjit-01.t	Thu Oct 22 00:00:49 2009	(r42002)
+++ branches/auto_libjit/t/steps/gen/libjit-01.t	Thu Oct 22 00:27:00 2009	(r42003)
@@ -6,8 +6,9 @@
 use strict;
 use warnings;
 
-use constant num_generated_files => 2;
-use Test::More tests => 8 + 2*num_generated_files;
+use constant NUM_GENERATED_FILES => 2;
+# use Test::More tests => 8 + 2*NUM_GENERATED_FILES;
+use Test::More qw( no_plan );
 
 use File::Copy 'move';
 use File::Temp 'tempfile';
@@ -39,8 +40,10 @@
 $conf->options->set( %$args );
 my $step = test_step_constructor_and_description($conf);
 
-is( scalar keys %{$step->{targets}}, num_generated_files, "Expected number of generated files");
-is_deeply([keys %{$step->{targets}}], [keys %{$step->{templates}}], "Templates match targets");
+is( scalar keys %{$step->{targets}}, NUM_GENERATED_FILES,
+    "Expected number of generated files");
+is_deeply([keys %{$step->{targets}}], [keys %{$step->{templates}}],
+    "Templates match targets");
 
 foreach (keys %{$step->{templates}}) {
     ok(-f $step->{templates}{$_}, "Able to locate $_ template")
@@ -56,6 +59,8 @@
 
 my %orig_conf = map { $_ => $conf->data->get($_) } qw[ iv nv ];
 $conf->data->set( iv => 'int', nv => 'float' );
+# Set a value for 'libjit_has_alloca' to avoid uninitialized value warning.
+$conf->data->set( 'libjit_has_alloca' => 1 );
 my $ret = $step->runstep($conf);
 ok( $ret, "runstep() returned true value" );
 foreach (keys %{$step->{targets}}) {


More information about the parrot-commits mailing list