poke-devel
[Top][All Lists]
Advanced

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

[PATCH] libpoke, poke, poked, pokefmt, testsuite: add `pk_compiler' to `


From: Mohammad-Reza Nabipoor
Subject: [PATCH] libpoke, poke, poked, pokefmt, testsuite: add `pk_compiler' to `pk_make_*'
Date: Sun, 26 Nov 2023 23:45:12 +0100

In order to have multiple Poke incremental compilers to co-exist,
all the `pk_make_*' functions should get the compiler instance.

2023-11-26  Mohammad-Reza Nabipoor  <mnabipoor@gnu.org>

        * libpoke/libpoke.h (pk_make_int): Add new param of type `pk_compiler'.
        (pk_make_uint): Likewise.
        (pk_make_string): Likewise.
        (pk_make_offset): Likewise.
        (pk_make_struct): Likewise.
        (pk_make_array): Likewise.
        (pk_make_integral_type): Likewise.
        (pk_make_string_type): Likewise.
        (pk_make_any_type): Likewise.
        (pk_make_offset_type): Likewise.
        (pk_make_struct_type): Likewise.
        (pk_make_array_type): Likewise.
        * libpoke/pk-val.c (pk_make_int): Likewise.
        (pk_make_uint): Likewise.
        (pk_make_string): Likewise.
        (pk_make_offset): Likewise.
        (pk_make_struct): Likewise.
        (pk_make_array): Likewise.
        (pk_make_integral_type): Likewise.
        (pk_make_string_type): Likewise.
        (pk_make_any_type): Likewise.
        (pk_make_offset_type): Likewise.
        (pk_make_struct_type): Likewise.
        (pk_make_array_type): Likewise.
        (pk_val_offset): Update.
        * poke/pk-cmd-help (pk_cmd_help): Likewise.
        (pk_cmd_set): Likewise.
        * poke/pk-hserver.c (pk_hserver_token_p): Likewise.
        (pk_hserver_token_kind): Likewise.
        (pk_hserver_cmd): Likewise.
        (pk_hserver_function): Likewise.
        (pk_hserver_init): Likewise.
        (pk_hserver_start): Likewise.
        (pk_hserver_make_hyperlink): Likewise.
        * poke/poke.c (pk_set_var_int): Likewise.
        (set_script_args): Likewise.
        (initialize): Likewise.
        * poked/poked.c (poked_init): Likewise.
        * pokefmt/pokefmt.l (poke_init): Likewise.
        * testsuite/poke.libpoke/values.c (test_simple_values): Likewise.
        (test_simple_values_mapping): Likewise.
        (test_pk_typeof): Likewise.
        (main): Pass `pk_compiler' to `test_simple_values',
        `test_simple_values_mapping' and `test_pk_typeof'.
---

Hi Jose,

Another boring patch :)


 ChangeLog                       | 47 ++++++++++++++++++++
 libpoke/libpoke.h               | 32 ++++++++------
 libpoke/pk-val.c                | 34 +++++++++------
 poke/pk-cmd-help.c              |  2 +-
 poke/pk-cmd-set.c               | 12 +++---
 poke/pk-hserver.c               | 19 +++++----
 poke/poke.c                     | 24 ++++++-----
 poked/poked.c                   |  8 ++--
 pokefmt/pokefmt.l               |  3 +-
 testsuite/poke.libpoke/values.c | 76 +++++++++++++++++++--------------
 10 files changed, 167 insertions(+), 90 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index aa2e9e81..e671faa6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,50 @@
+2023-11-26  Mohammad-Reza Nabipoor  <mnabipoor@gnu.org>
+
+       * libpoke/libpoke.h (pk_make_int): Add new param of type `pk_compiler'.
+       (pk_make_uint): Likewise.
+       (pk_make_string): Likewise.
+       (pk_make_offset): Likewise.
+       (pk_make_struct): Likewise.
+       (pk_make_array): Likewise.
+       (pk_make_integral_type): Likewise.
+       (pk_make_string_type): Likewise.
+       (pk_make_any_type): Likewise.
+       (pk_make_offset_type): Likewise.
+       (pk_make_struct_type): Likewise.
+       (pk_make_array_type): Likewise.
+       * libpoke/pk-val.c (pk_make_int): Likewise.
+       (pk_make_uint): Likewise.
+       (pk_make_string): Likewise.
+       (pk_make_offset): Likewise.
+       (pk_make_struct): Likewise.
+       (pk_make_array): Likewise.
+       (pk_make_integral_type): Likewise.
+       (pk_make_string_type): Likewise.
+       (pk_make_any_type): Likewise.
+       (pk_make_offset_type): Likewise.
+       (pk_make_struct_type): Likewise.
+       (pk_make_array_type): Likewise.
+       (pk_val_offset): Update.
+       * poke/pk-cmd-help (pk_cmd_help): Likewise.
+       (pk_cmd_set): Likewise.
+       * poke/pk-hserver.c (pk_hserver_token_p): Likewise.
+       (pk_hserver_token_kind): Likewise.
+       (pk_hserver_cmd): Likewise.
+       (pk_hserver_function): Likewise.
+       (pk_hserver_init): Likewise.
+       (pk_hserver_start): Likewise.
+       (pk_hserver_make_hyperlink): Likewise.
+       * poke/poke.c (pk_set_var_int): Likewise.
+       (set_script_args): Likewise.
+       (initialize): Likewise.
+       * poked/poked.c (poked_init): Likewise.
+       * pokefmt/pokefmt.l (poke_init): Likewise.
+       * testsuite/poke.libpoke/values.c (test_simple_values): Likewise.
+       (test_simple_values_mapping): Likewise.
+       (test_pk_typeof): Likewise.
+       (main): Pass `pk_compiler' to `test_simple_values',
+       `test_simple_values_mapping' and `test_pk_typeof'.
+
 2023-11-24  Jose E. Marchesi  <jemarch@gnu.org>
 
        * libpoke/pkl-typify.c (pkl_typify2_ps_type_array): Sanity check
diff --git a/libpoke/libpoke.h b/libpoke/libpoke.h
index acced2e3..9a75bd98 100644
--- a/libpoke/libpoke.h
+++ b/libpoke/libpoke.h
@@ -741,7 +741,7 @@ void pk_set_pretty_print (pk_compiler pkc, int 
pretty_print_p) LIBPOKE_API;
    Return PK_NULL if SIZE exceeds the maximum number of bits supported
    in Poke integers.  */
 
-pk_val pk_make_int (int64_t value, int size) LIBPOKE_API;
+pk_val pk_make_int (pk_compiler pkc, int64_t value, int size) LIBPOKE_API;
 
 /* Return the numerical value stored in the given Poke integer.
    VAL should be a Poke value of the right type.  */
@@ -763,7 +763,7 @@ int pk_int_size (pk_val val) LIBPOKE_API;
    Return NULL if SIZE exceeds the maximum number of bits supported in
    Poke integers.  */
 
-pk_val pk_make_uint (uint64_t value, int size) LIBPOKE_API;
+pk_val pk_make_uint (pk_compiler pkc, uint64_t value, int size) LIBPOKE_API;
 
 /* Return the numerical value stored in the given Poke unsigned
    integer.
@@ -784,7 +784,7 @@ int pk_uint_size (pk_val val) LIBPOKE_API;
    STR is a NULL-terminated string, a copy of which will become the
    value of the Poke string.  */
 
-pk_val pk_make_string (const char *str) LIBPOKE_API;
+pk_val pk_make_string (pk_compiler pkc, const char *str) LIBPOKE_API;
 
 /* Return a NULL-terminated string with the value of the given Poke
    string.  */
@@ -804,7 +804,8 @@ const char *pk_string_str (pk_val val) LIBPOKE_API;
    If any of the arguments is not of the right type return PK_NULL.
    Otherwise return the created offset.  */
 
-pk_val pk_make_offset (pk_val magnitude, pk_val unit) LIBPOKE_API;
+pk_val pk_make_offset (pk_compiler pkc, pk_val magnitude,
+                       pk_val unit) LIBPOKE_API;
 
 /* Return the magnitude of the given Poke offset.  */
 
@@ -826,7 +827,8 @@ pk_val pk_offset_unit (pk_val val) LIBPOKE_API;
    The fields and methods in the created struct are initialized to
    PK_NULL.  */
 
-pk_val pk_make_struct (pk_val nfields, pk_val type) LIBPOKE_API;
+pk_val pk_make_struct (pk_compiler pkc, pk_val nfields,
+                       pk_val type) LIBPOKE_API;
 
 /* Get the number of fields of a struct. */
 
@@ -941,7 +943,8 @@ void pk_struct_set_field_value (pk_val sct, uint64_t idx,
    ARRAY_TYPE is the type of the array.  Note, this is an array type,
    not the type of the elements.  */
 
-pk_val pk_make_array (pk_val nelem, pk_val array_type) LIBPOKE_API;
+pk_val pk_make_array (pk_compiler pkc, pk_val nelem,
+                      pk_val array_type) LIBPOKE_API;
 
 /* Get the number of elements in the given array value, as an
    uint<64>.  */
@@ -1007,7 +1010,8 @@ uint64_t pk_sizeof (pk_val val) LIBPOKE_API;
    SIGNED_P is an int<32> with a boolean specifying whether the type
    is signed or not.  */
 
-pk_val pk_make_integral_type (pk_val size, pk_val signed_p) LIBPOKE_API;
+pk_val pk_make_integral_type (pk_compiler pkc, pk_val size,
+                              pk_val signed_p) LIBPOKE_API;
 
 /* Return an uint<64> containing the size, in bits, of the given
    integral type.  */
@@ -1023,13 +1027,13 @@ pk_val pk_integral_type_signed_p (pk_val type) 
LIBPOKE_API;
 
 /* Build and return the string type.  */
 
-pk_val pk_make_string_type (void) LIBPOKE_API;
+pk_val pk_make_string_type (pk_compiler pkc) LIBPOKE_API;
 
 /* The `any' type.  */
 
 /* Build and return the `any' type.  */
 
-pk_val pk_make_any_type (void) LIBPOKE_API;
+pk_val pk_make_any_type (pk_compiler pkc) LIBPOKE_API;
 
 /* Offset types.  */
 
@@ -1044,7 +1048,8 @@ pk_val pk_make_any_type (void) LIBPOKE_API;
    REF_TYPE is either PK_NULL or the type of the referenced type if the
    offset is also a reference or pointer.  */
 
-pk_val pk_make_offset_type (pk_val base_type, pk_val unit, pk_val ref_type) 
LIBPOKE_API;
+pk_val pk_make_offset_type (pk_compiler pkc, pk_val base_type, pk_val unit,
+                            pk_val ref_type) LIBPOKE_API;
 
 /* Get the base type of a given offset type.  */
 
@@ -1066,8 +1071,8 @@ pk_val pk_offset_type_unit (pk_val type) LIBPOKE_API;
 
    FTYPES is a C array containing the types of each struct field. */
 
-pk_val pk_make_struct_type (pk_val nfields, pk_val name, pk_val *fnames,
-                            pk_val *ftypes) LIBPOKE_API;
+pk_val pk_make_struct_type (pk_compiler pkc, pk_val nfields, pk_val name,
+                            pk_val *fnames, pk_val *ftypes) LIBPOKE_API;
 
 /* Get the type of a struct.
    This function is DEPRECATED; please use pk_typeof instead.  */
@@ -1151,7 +1156,8 @@ void pk_struct_type_set_ftype (pk_val type, uint64_t idx,
    - A closure ()offset<uint<64>,1> to denote an array type bounded by
      size.  */
 
-pk_val pk_make_array_type (pk_val etype, pk_val bound) LIBPOKE_API;
+pk_val pk_make_array_type (pk_compiler pkc, pk_val etype,
+                           pk_val bound) LIBPOKE_API;
 
 /* Get the type of the elements of the given array type.  */
 
diff --git a/libpoke/pk-val.c b/libpoke/pk-val.c
index 5bafce8f..dde9ea6a 100644
--- a/libpoke/pk-val.c
+++ b/libpoke/pk-val.c
@@ -24,7 +24,7 @@
 #include "libpoke.h"
 
 pk_val
-pk_make_int (int64_t value, int size)
+pk_make_int (pk_compiler pkc __attribute__ ((unused)), int64_t value, int size)
 {
   return pvm_make_signed_integral (value, size);
 }
@@ -48,7 +48,8 @@ pk_int_size (pk_val val)
 }
 
 pk_val
-pk_make_uint (uint64_t value, int size)
+pk_make_uint (pk_compiler pkc __attribute__ ((unused)), uint64_t value,
+              int size)
 {
   return pvm_make_unsigned_integral (value, size);
 }
@@ -72,7 +73,7 @@ pk_uint_size (pk_val val)
 }
 
 pk_val
-pk_make_string (const char *str)
+pk_make_string (pk_compiler pkc __attribute__ ((unused)), const char *str)
 {
   return pvm_make_string (str);
 }
@@ -84,7 +85,8 @@ pk_string_str (pk_val val)
 }
 
 pk_val
-pk_make_offset (pk_val magnitude, pk_val unit)
+pk_make_offset (pk_compiler pkc __attribute__ ((unused)), pk_val magnitude,
+                pk_val unit)
 {
   if (!PVM_IS_INTEGRAL (magnitude)
       || !PVM_IS_ULONG (unit)
@@ -174,10 +176,10 @@ pk_val_offset (pk_val val)
   /* XXX "upunit" properly so we get a nice unit, not just bytes or
      bits.  */
   if (bit_offset % 8 == 0)
-    return pk_make_offset (pvm_make_ulong (bit_offset / 8, 64),
+    return pk_make_offset (/*pkc*/ NULL, pvm_make_ulong (bit_offset / 8, 64),
                            pvm_make_ulong (8, 64));
   else
-    return pk_make_offset (val_offset, pvm_make_ulong (1, 64));
+    return pk_make_offset (/*pkc*/ NULL, val_offset, pvm_make_ulong (1, 64));
 }
 
 void
@@ -282,7 +284,8 @@ pk_val_equal_p (pk_val val1, pk_val val2)
 }
 
 pk_val
-pk_make_struct (pk_val nfields, pk_val type)
+pk_make_struct (pk_compiler pkc __attribute__ ((unused)), pk_val nfields,
+                pk_val type)
 {
   return pvm_make_struct (nfields, pvm_make_ulong (0, 64), type);
 }
@@ -355,13 +358,15 @@ pk_struct_set_field_value (pk_val sct, uint64_t idx, 
pk_val value)
 }
 
 pk_val
-pk_make_array (pk_val nelem, pk_val array_type)
+pk_make_array (pk_compiler pkc __attribute__ ((unused)), pk_val nelem,
+               pk_val array_type)
 {
   return pvm_make_array (nelem, array_type);
 }
 
 pk_val
-pk_make_integral_type (pk_val size, pk_val signed_p)
+pk_make_integral_type (pk_compiler pkc __attribute__ ((unused)), pk_val size,
+                       pk_val signed_p)
 {
   return pvm_make_integral_type (size, signed_p);
 }
@@ -379,13 +384,14 @@ pk_integral_type_signed_p (pk_val type)
 }
 
 pk_val
-pk_make_string_type (void)
+pk_make_string_type (pk_compiler pkc __attribute__ ((unused)))
 {
   return pvm_make_string_type ();
 }
 
 pk_val
-pk_make_offset_type (pk_val base_type, pk_val unit, pk_val ref_type)
+pk_make_offset_type (pk_compiler pkc __attribute__ ((unused)),
+                     pk_val base_type, pk_val unit, pk_val ref_type)
 {
   return pvm_make_offset_type (base_type, unit, ref_type);
 }
@@ -403,7 +409,8 @@ pk_offset_type_unit (pk_val type)
 }
 
 pk_val
-pk_make_struct_type (pk_val nfields, pk_val name, pk_val *fnames, pk_val 
*ftypes)
+pk_make_struct_type (pk_compiler pkc __attribute__ ((unused)), pk_val nfields,
+                     pk_val name, pk_val *fnames, pk_val *ftypes)
 {
   return pvm_make_struct_type (nfields, name, fnames, ftypes);
 }
@@ -465,7 +472,8 @@ pk_struct_type_set_ftype (pk_val type, uint64_t idx, pk_val 
field_type)
 }
 
 pk_val
-pk_make_array_type (pk_val etype, pk_val bound)
+pk_make_array_type (pk_compiler pkc __attribute__ ((unused)), pk_val etype,
+                    pk_val bound)
 {
   return pvm_make_array_type (etype, bound);
 }
diff --git a/poke/pk-cmd-help.c b/poke/pk-cmd-help.c
index ebf4afd1..99732a87 100644
--- a/poke/pk-cmd-help.c
+++ b/poke/pk-cmd-help.c
@@ -33,7 +33,7 @@ pk_cmd_help (int argc, struct pk_cmd_arg argv[], uint64_t 
uflags)
   assert (argc == 2);
 
   assert (PK_CMD_ARG_TYPE (argv[1]) == PK_CMD_ARG_STR);
-  topic = pk_make_string (PK_CMD_ARG_STR (argv[1]));
+  topic = pk_make_string (poke_compiler, PK_CMD_ARG_STR (argv[1]));
 
   pk_help = pk_decl_val (poke_compiler, "pk_help");
   assert (pk_help != PK_NULL);
diff --git a/poke/pk-cmd-set.c b/poke/pk-cmd-set.c
index a2b7c76e..6044ceb3 100644
--- a/poke/pk-cmd-set.c
+++ b/poke/pk-cmd-set.c
@@ -69,7 +69,7 @@ pk_cmd_set (int int_p,
       assert (registry_get != PK_NULL);
 
       if (pk_call (poke_compiler, registry_get, &retval, &exit_exception,
-                   2, pk_make_string (setting_name), registry)
+                   2, pk_make_string (poke_compiler, setting_name), registry)
           == PK_ERROR
           || exit_exception != PK_NULL)
         /* This shouldn't happen.  */
@@ -87,16 +87,16 @@ pk_cmd_set (int int_p,
       const char *retmsg;
 
       if (int_p)
-        val = pk_make_int (PK_CMD_ARG_INT (argv[1]), 32);
+        val = pk_make_int (poke_compiler, PK_CMD_ARG_INT (argv[1]), 32);
       else
-        val = pk_make_string (PK_CMD_ARG_STR (argv[1]));
+        val = pk_make_string (poke_compiler, PK_CMD_ARG_STR (argv[1]));
 
       registry_set = pk_struct_ref_field_value (registry, "set");
       assert (registry_set != PK_NULL);
 
-      if (pk_call (poke_compiler, registry_set, &retval, &exit_exception,
-                   3, pk_make_string (setting_name), val, registry)
-          == PK_ERROR
+      if (pk_call (poke_compiler, registry_set, &retval, &exit_exception, 3,
+                   pk_make_string (poke_compiler, setting_name), val, registry)
+              == PK_ERROR
           || exit_exception != PK_NULL)
         /* This shouldn't happen, since we know `newval' is of the
            right type.  */
diff --git a/poke/pk-hserver.c b/poke/pk-hserver.c
index 8fe353e5..d2e2b5d9 100644
--- a/poke/pk-hserver.c
+++ b/poke/pk-hserver.c
@@ -90,7 +90,7 @@ static int
 pk_hserver_token_p (int token)
 {
   pk_val cls = pk_decl_val (poke_compiler, "hserver_token_p");
-  pk_val token_val = pk_make_int (token, 32);
+  pk_val token_val = pk_make_int (poke_compiler, token, 32);
   pk_val token_p, exit_exception;
   int ret;
 
@@ -106,7 +106,7 @@ static char
 pk_hserver_token_kind (int token)
 {
   pk_val cls = pk_decl_val (poke_compiler, "hserver_token_kind");
-  pk_val token_val = pk_make_int (token, 32);
+  pk_val token_val = pk_make_int (poke_compiler, token, 32);
   pk_val token_kind, exit_exception;
   int ret;
 
@@ -122,7 +122,7 @@ static const char *
 pk_hserver_cmd (int token)
 {
   pk_val cls = pk_decl_val (poke_compiler, "hserver_token_cmd");
-  pk_val token_val = pk_make_int (token, 32);
+  pk_val token_val = pk_make_int (poke_compiler, token, 32);
   pk_val cmd, exit_exception;
   int ret;
 
@@ -138,7 +138,7 @@ static pk_val
 pk_hserver_function (int token)
 {
   pk_val cls = pk_decl_val (poke_compiler, "hserver_token_function");
-  pk_val token_val = pk_make_int (token, 32);
+  pk_val token_val = pk_make_int (poke_compiler, token, 32);
   pk_val function, exit_exception;
   int ret;
 
@@ -368,7 +368,7 @@ pk_hserver_init (void)
       pk_fatal (NULL);
     }
   pk_decl_set_val (poke_compiler, "hserver_hostname",
-                   pk_make_string (hostname));
+                   pk_make_string (poke_compiler, hostname));
 }
 
 void
@@ -398,8 +398,9 @@ pk_hserver_start (void)
       pk_fatal (NULL);
     }
 
-  pk_decl_set_val (poke_compiler, "hserver_port",
-                   pk_make_int (ntohs (clientname.sin_port), 32));
+  pk_decl_set_val (
+      poke_compiler, "hserver_port",
+      pk_make_int (poke_compiler, ntohs (clientname.sin_port), 32));
 
   hserver_finish = 0;
   ret = pthread_create (&hserver_thread,
@@ -443,8 +444,8 @@ pk_hserver_make_hyperlink (char type,
   pk_val hyperlink, kind_val, cmd_val, exit_exception;
   int ret;
 
-  kind_val = pk_make_uint (type, 8);
-  cmd_val = pk_make_string (cmd);
+  kind_val = pk_make_uint (poke_compiler, type, 8);
+  cmd_val = pk_make_string (poke_compiler, cmd);
 
   assert (cls != PK_NULL);
   ret = pk_call (poke_compiler, cls, &hyperlink, &exit_exception,
diff --git a/poke/poke.c b/poke/poke.c
index 2e2e1c96..fba84a5f 100644
--- a/poke/poke.c
+++ b/poke/poke.c
@@ -332,7 +332,7 @@ void
 pk_set_var_int (const char *name, int value)
 {
   pk_decl_set_val (poke_compiler, name,
-                   pk_make_int (value, 32));
+                   pk_make_int (poke_compiler, value, 32));
 }
 
 static void
@@ -357,13 +357,14 @@ set_script_args (int argc, char *argv[])
   /* Any argument after SCRIPT is an argument for the script.  */
   i = i + 2;
   nargs = argc - i;
-  argv_array = pk_make_array (pk_make_uint (nargs, 64),
-                              pk_make_array_type (pk_make_string_type (),
-                                                  array_type_bounder));
+  argv_array = pk_make_array (
+      poke_compiler, pk_make_uint (poke_compiler, nargs, 64),
+      pk_make_array_type (poke_compiler, pk_make_string_type (poke_compiler),
+                          array_type_bounder));
 
   for (index = 0; i < argc; ++i, ++index)
     pk_array_insert_elem (argv_array, index,
-                          pk_make_string (argv[i]));
+                          pk_make_string (poke_compiler, argv[i]));
 
   pk_defvar (poke_compiler, "argv", argv_array);
 }
@@ -619,7 +620,8 @@ initialize (int argc, char *argv[])
 
   /* Make poke_interactive_p available to poke programs.  */
   if (pk_defvar (poke_compiler, "poke_interactive_p",
-                 pk_make_int (poke_interactive_p, 32)) == PK_ERROR)
+                 pk_make_int (poke_compiler, poke_interactive_p, 32))
+      == PK_ERROR)
     pk_fatal ("defining poke_interactive_p");
 
   /* Add the directories where poke installs .pk files to the
@@ -647,7 +649,7 @@ initialize (int argc, char *argv[])
     pk_assert_alloc (newpaths);
 
     pk_decl_set_val (poke_compiler,
-                     "load_path", pk_make_string (newpaths));
+                     "load_path", pk_make_string (poke_compiler, newpaths));
     free (newpaths);
   }
 
@@ -704,13 +706,13 @@ initialize (int argc, char *argv[])
     pk_decl_set_val (poke_compiler, "pk_network_endian", network_endian);
 
     pk_decl_set_val (poke_compiler, "pk_auto_map_p",
-                     pk_make_int (poke_default_auto_map_p, 32));
+                     pk_make_int (poke_compiler, poke_default_auto_map_p, 32));
 
     pk_decl_set_val (poke_compiler, "pk_have_libnbd_p",
 #if defined HAVE_LIBNBD
-                     pk_make_int (1, 32)
+                     pk_make_int (poke_compiler, 1, 32)
 #else
-                     pk_make_int (0, 32)
+                     pk_make_int (poke_compiler, 0, 32)
 #endif
                      );
   }
@@ -739,7 +741,7 @@ initialize (int argc, char *argv[])
 
   /* Set the value of the Poke variable pk_hserver_p.  */
   pk_decl_set_val (poke_compiler, "pk_hserver_p",
-                   pk_make_int (poke_hserver_p, 32));
+                   pk_make_int (poke_compiler, poke_hserver_p, 32));
 #endif
 }
 
diff --git a/poked/poked.c b/poked/poked.c
index 18de8c47..65ab602f 100644
--- a/poked/poked.c
+++ b/poked/poked.c
@@ -969,7 +969,8 @@ poked_init (int pdap_version)
     char *newpath = pk_str_concat (pk_string_str (load_path), ":",
                                    poked_appdir, ":", poke_picklesdir, NULL);
 
-    pk_decl_set_val (pkc, "load_path", pk_make_string (newpath));
+    pk_decl_set_val (pkc, "load_path",
+                     pk_make_string (pkc, newpath));
     free (newpath);
   }
 
@@ -998,8 +999,9 @@ poked_init (int pdap_version)
     }
 
   pk_decl_set_val (pkc, "__poked_pdap_version",
-                   pk_make_int (pdap_version, 32));
-  pk_decl_set_val (pkc, "__poked_libpoke_version", pk_make_string (VERSION));
+                   pk_make_int (pkc, pdap_version, 32));
+  pk_decl_set_val (pkc, "__poked_libpoke_version",
+                   pk_make_string (pkc, VERSION));
 
   return OK;
 }
diff --git a/pokefmt/pokefmt.l b/pokefmt/pokefmt.l
index 74505134..f95f54f5 100644
--- a/pokefmt/pokefmt.l
+++ b/pokefmt/pokefmt.l
@@ -499,7 +499,8 @@ poke_init (struct poke *pk, const char *poke_src_file, FILE 
*output)
                               ":", poke_picklesdir, NULL);
     if (new_path == NULL)
       err (1, "pk_str_concat() failed");
-    pk_decl_set_val (pk->compiler, "load_path", pk_make_string (new_path));
+    pk_decl_set_val (pk->compiler, "load_path",
+                     pk_make_string (pk->compiler, new_path));
 
     free (new_path);
     free (user_load_path);
diff --git a/testsuite/poke.libpoke/values.c b/testsuite/poke.libpoke/values.c
index 99e84160..c22b4818 100644
--- a/testsuite/poke.libpoke/values.c
+++ b/testsuite/poke.libpoke/values.c
@@ -39,7 +39,7 @@
 /* Test simple type constructors, getters and setters.  */
 
 void
-test_simple_values ()
+test_simple_values (pk_compiler pkc)
 {
   static const char *awesome = "Poke is awesome!";
   const size_t bigstr_len = 1u << 20; /* 1 MiB */
@@ -60,40 +60,40 @@ test_simple_values ()
   /* Signed integers */
 
   /* Exceeding maximum number of bits supported in poke integers.  */
-  T ("pk_make_int_0", pk_make_int (0, 65) == PK_NULL);
+  T ("pk_make_int_0", pk_make_int (pkc, 0, 65) == PK_NULL);
 
-  val = pk_make_int (666, 32);
+  val = pk_make_int (pkc, 666, 32);
   T ("pk_make_int_1", val != PK_NULL);
   T ("pk_int_value_1", pk_int_value (val) == 666);
   T ("pk_int_size_1", pk_int_size (val) == 32);
   T ("pk_val_offset", pk_val_offset (val) == PK_NULL);
 
-  val = pk_make_int (-666, 32);
+  val = pk_make_int (pkc, -666, 32);
   T ("pk_make_int_2", val != PK_NULL);
   T ("pk_int_value_2", pk_int_value (val) == -666);
   T ("pk_int_size_2", pk_int_size (val) == 32);
 
   /* Unsigned integers */
 
-  val = pk_make_uint (UINT64_MAX, 63);
+  val = pk_make_uint (pkc, UINT64_MAX, 63);
   T ("pk_make_uint_0", val != PK_NULL);
   T ("pk_uint_value_0", pk_uint_value (val) == (UINT64_MAX >> 1));
   T ("pk_uint_size_0", pk_uint_size (val) == 63);
   T ("pk_val_offset", pk_val_offset (val) == PK_NULL);
 
-  val = pk_make_uint (0, 64);
+  val = pk_make_uint (pkc, 0, 64);
   T ("pk_make_uint_1", val != PK_NULL);
   T ("pk_uint_value_1", pk_uint_value (val) == 0);
   T ("pk_uint_size_1", pk_uint_size (val) == 64);
 
-  val = pk_make_uint (0xabcdef, 24);
+  val = pk_make_uint (pkc, 0xabcdef, 24);
   T ("pk_make_uint_2", val != PK_NULL);
   T ("pk_uint_value_2", pk_uint_value (val) == 0xabcdef);
   T ("pk_uint_size_2", pk_uint_size (val) == 24);
 
   /* Strings */
 
-  val = pk_make_string (awesome);
+  val = pk_make_string (pkc, awesome);
   T ("pk_make_string_0", val != PK_NULL);
   T ("pk_string_str_0", STREQ (pk_string_str (val), awesome));
   T ("pk_val_offset", pk_val_offset (val) == PK_NULL);
@@ -106,7 +106,7 @@ test_simple_values ()
     memset (bigstr, 'P', bigstr_len);
     bigstr[bigstr_len] = '\0';
 
-    val = pk_make_string (bigstr);
+    val = pk_make_string (pkc, bigstr);
 
     memset (bigstr, 'p', bigstr_len);
     free (bigstr);
@@ -124,27 +124,27 @@ test_simple_values ()
 
   /* Offsets */
 
-  mag = pk_make_uint (0, 64);
-  unit = pk_make_int (1, 64);
+  mag = pk_make_uint (pkc, 0, 64);
+  unit = pk_make_int (pkc, 1, 64);
 
   assert (mag != PK_NULL);
   assert (unit != PK_NULL);
 
-  val = pk_make_offset (mag, unit);
+  val = pk_make_offset (pkc, mag, unit);
   T ("pk_make_offset_0", val == PK_NULL); /* Because of signed unit */
 
-  unit = pk_make_uint (0, 64);
+  unit = pk_make_uint (pkc, 0, 64);
   assert (unit != PK_NULL);
 
-  val = pk_make_offset (mag, unit);
+  val = pk_make_offset (pkc, mag, unit);
   T ("pk_make_offset_1", val == PK_NULL);
 
-  mag = pk_make_uint (UINT64_MAX, 64);
-  unit = pk_make_uint (UINT64_MAX, 64);
+  mag = pk_make_uint (pkc, UINT64_MAX, 64);
+  unit = pk_make_uint (pkc, UINT64_MAX, 64);
   assert (mag != PK_NULL);
   assert (unit != PK_NULL);
 
-  val = pk_make_offset (mag, unit);
+  val = pk_make_offset (pkc, mag, unit);
   T ("pk_val_offset", pk_val_offset (val) == PK_NULL);
   T ("pk_make_offset_2", val != PK_NULL);
   T ("pk_offset_magnitude_2",
@@ -155,19 +155,19 @@ test_simple_values ()
 }
 
 void
-test_simple_values_mapping ()
+test_simple_values_mapping (pk_compiler pkc)
 {
   pk_val simple_values[] = {
-    pk_make_int (1, 23),
-    pk_make_int (2, 46),
-    pk_make_uint (3, 23),
-    pk_make_uint (4, 46),
-    pk_make_string ("Poke"),
-    pk_make_offset (pk_make_uint (5, 64), pk_make_uint (6, 64)),
+    pk_make_int (pkc, 1, 23),
+    pk_make_int (pkc, 2, 46),
+    pk_make_uint (pkc, 3, 23),
+    pk_make_uint (pkc, 4, 46),
+    pk_make_string (pkc, "Poke"),
+    pk_make_offset (pkc, pk_make_uint (pkc, 5, 64), pk_make_uint (pkc, 6, 64)),
   };
   const int N = sizeof (simple_values) / sizeof (simple_values[0]);
-  pk_val i32 = pk_make_int (7, 32);
-  pk_val u64 = pk_make_uint (8, 64);
+  pk_val i32 = pk_make_int (pkc, 7, 32);
+  pk_val u64 = pk_make_uint (pkc, 8, 64);
 
 /* test case */
 #define T0(cond, ...)                                                         \
@@ -277,10 +277,10 @@ error:
 }
 
 void
-test_pk_typeof ()
+test_pk_typeof (pk_compiler pkc)
 {
-  pk_val uint32_type = pk_make_integral_type (pk_make_uint (32, 64),
-                                              pk_make_int (1, 32));
+  pk_val uint32_type = pk_make_integral_type (pkc, pk_make_uint (pkc, 32, 64),
+                                              pk_make_int (pkc, 1, 32));
   pk_val res;
 
   /* If given a type, pk_typeof should return the type itself.  */
@@ -324,7 +324,7 @@ test_pk_struct_ref_set_field_value ()
       goto done;
     }
 
-  pk_struct_ref_set_field_value (sct, "bar", pk_make_int (666, 32));
+  pk_struct_ref_set_field_value (sct, "bar", pk_make_int (pkc, 666, 32));
   val = pk_struct_ref_field_value (sct, "bar");
   if (val == PK_NULL)
     {
@@ -395,10 +395,20 @@ test_pk_val_equal_p ()
 int
 main (int argc, char *argv[])
 {
-  test_simple_values ();
-  test_simple_values_mapping ();
+  pk_compiler pkc;
+
+  pkc = pk_compiler_new (&poke_term_if);
+  if (pkc)
+  {
+    test_simple_values (pkc);
+    test_simple_values_mapping (pkc);
+    test_pk_typeof (pkc);
+  }
+  else
+    fail ("pk_compiler_new failed");
+  pk_compiler_free (pkc);
+
   test_pk_val_equal_p ();
-  test_pk_typeof ();
   test_pk_struct_ref_set_field_value ();
 
   totals ();
-- 
2.42.1




reply via email to

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