# New Ticket Created by  Mark Glines 
# Please include the string:  [perl #43355]
# in the subject line of all future correspondence about this issue. 
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=43355 >


string_from_literal() was added in r19260, to handle the
string_from_cstring(interp, "some constant string", 0) case more
efficiently. Rather than doing a strlen() at runtime, it does a
sizeof() at compile time.  That patch also fixed up a large number of
existing string_from_cstring cases, to use the new function.

This patch fixes up the rest of the cases that I can find with grep.
This includes most or all of the cases in autogenerated code.

The only thing worthy of note was that I had to remove a (const char *)
prototype from a case in lib/Parrot/Pmc2c/PCCMETHOD.pm, because it was
causing sizeof() to report the size of a pointer, rather than the size
of the string.

Mark
=== languages/dotnet/pmc/dotnetassembly.pmc
==================================================================
--- languages/dotnet/pmc/dotnetassembly.pmc	(revision 21011)
+++ languages/dotnet/pmc/dotnetassembly.pmc	(local)
@@ -1224,7 +1224,7 @@
         type->str_namespace = string_from_cstring(INTERP,
             ass->strings + pos_namespace, 0);
         type->str_fullname = string_concat(INTERP, type->str_namespace,
-            string_from_cstring(INTERP, ".", 0), 0);
+            string_from_literal(INTERP, "."), 0);
         type->str_fullname = string_concat(INTERP, type->str_fullname,
             type->str_name, 0);
     }
@@ -1775,23 +1775,23 @@
         if (pass)
         {
             dynclass_DotNetClassMetadata = pmc_type(INTERP,
-                string_from_cstring(INTERP, "DotNetClassMetadata", 0));
+                string_from_literal(INTERP, "DotNetClassMetadata"));
             dynclass_DotNetMethodMetadata = pmc_type(INTERP,
-                string_from_cstring(INTERP, "DotNetMethodMetadata", 0));
+                string_from_literal(INTERP, "DotNetMethodMetadata"));
             dynclass_DotNetFieldMetadata = pmc_type(INTERP,
-                string_from_cstring(INTERP, "DotNetFieldMetadata", 0));
+                string_from_literal(INTERP, "DotNetFieldMetadata"));
             dynclass_DotNetParamMetadata = pmc_type(INTERP,
-                string_from_cstring(INTERP, "DotNetParamMetadata", 0));
+                string_from_literal(INTERP, "DotNetParamMetadata"));
             dynclass_DotNetBytecode = pmc_type(INTERP,
-                string_from_cstring(INTERP, "DotNetBytecode", 0));
+                string_from_literal(INTERP, "DotNetBytecode"));
             dynclass_DotNetEH = pmc_type(INTERP,
-                string_from_cstring(INTERP, "DotNetEH", 0));
+                string_from_literal(INTERP, "DotNetEH"));
             dynclass_DotNetTypeRefMetadata = pmc_type(INTERP,
-                string_from_cstring(INTERP, "DotNetTypeRefMetadata", 0));
+                string_from_literal(INTERP, "DotNetTypeRefMetadata"));
             dynclass_DotNetMemberRefMetadata = pmc_type(INTERP,
-                string_from_cstring(INTERP, "DotNetMemberRefMetadata", 0));
+                string_from_literal(INTERP, "DotNetMemberRefMetadata"));
             dynclass_DotNetAssemblyRefMetadata = pmc_type(INTERP,
-                string_from_cstring(INTERP, "DotNetAssemblyRef", 0));
+                string_from_literal(INTERP, "DotNetAssemblyRef"));
         }
     }
 
=== lib/Parrot/Pmc2c/PCCMETHOD.pm
==================================================================
--- lib/Parrot/Pmc2c/PCCMETHOD.pm	(revision 21011)
+++ lib/Parrot/Pmc2c/PCCMETHOD.pm	(local)
@@ -196,7 +196,7 @@
         return "    $name = CTX_REG_$tiss(ctx, $index);\n";
     }
     elsif ( 'name' eq $arg_type ) {
-        return "    CTX_REG_$tiss(ctx, $index) = string_from_cstring(interp, $name, 0);\n";
+        return "    CTX_REG_$tiss(ctx, $index) = string_from_literal(interp, $name);\n";
     }
     else {                                           #$arg_type eq 'param' or $arg_type eq 'return'
         return "    CTX_REG_$tiss(ctx, $index) = $name;\n";
@@ -247,7 +247,7 @@
         return_indexes = temp_return_indexes;
     }
     return_sig = Parrot_FixedIntegerArray_new_from_string(interp, _type,
-        string_from_cstring(interp, $returns_flags, 0), 0);
+        string_from_literal(interp, $returns_flags), 0);
     $goto_string
     /*END PCCRETURN $returns */
 }
@@ -370,7 +370,7 @@
     opcode_t *current_args;
     PMC* _type      = pmc_new(interp, enum_class_FixedIntegerArray);
     PMC* param_sig  = Parrot_FixedIntegerArray_new_from_string(interp, _type,
-        string_from_cstring(interp, $params_flags, 0), 0);
+        string_from_literal(interp, $params_flags), 0);
 
     PMC* return_sig              = PMCNULL;
 
@@ -481,7 +481,7 @@
 
         my $n_regs_used = find_max_regs( [ $result_n_regs_used, $args_n_regs_used ] );
 
-        $method_name = "string_from_cstring(interp, (const char *) $method_name, 0)"
+        $method_name = "string_from_literal(interp, $method_name)"
             if isquoted($method_name);
 
         my $file   = '"' . __FILE__ . '"';
@@ -498,9 +498,9 @@
       PMC* _type                = pmc_new(interp, enum_class_FixedIntegerArray);
 
       PMC* args_sig         = Parrot_FixedIntegerArray_new_from_string(interp,
-            _type, string_from_cstring(interp, $arg_flags, 0), 0);
+            _type, string_from_literal(interp, $arg_flags), 0);
       PMC* results_sig      = Parrot_FixedIntegerArray_new_from_string(interp,
-            _type, string_from_cstring(interp, $result_flags, 0), 0);
+            _type, string_from_literal(interp, $result_flags), 0);
       PMC* ret_cont         = new_ret_continuation_pmc(interp, NULL);
 
       parrot_context_t *ctx = Parrot_push_context(interp, n_regs_used);
=== lib/Parrot/Pmc2c.pm
==================================================================
--- lib/Parrot/Pmc2c.pm	(revision 21011)
+++ lib/Parrot/Pmc2c.pm	(local)
@@ -1057,7 +1057,7 @@
     foreach my $dynpmc (@$dyn_mmds) {
         next if $dynpmc eq $classname;
         $cout .= <<"EOC";
-            int my_enum_class_$dynpmc = pmc_type(interp, string_from_cstring(interp, "$dynpmc", 0));
+            int my_enum_class_$dynpmc = pmc_type(interp, string_from_literal(interp, "$dynpmc"));
 EOC
     }
 
=== src/inter_misc.c
==================================================================
--- src/inter_misc.c	(revision 21011)
+++ src/inter_misc.c	(local)
@@ -426,7 +426,7 @@
 {
     switch (info_wanted) {
     case PARROT_OS:
-        return string_from_cstring(interp, BUILD_OS_NAME, 0);
+        return string_from_literal(interp, BUILD_OS_NAME);
     case PARROT_OS_VERSION:
     case PARROT_OS_VERSION_NUMBER:
     case CPU_ARCH:
=== src/pmc/env.pmc
==================================================================
--- src/pmc/env.pmc	(revision 21011)
+++ src/pmc/env.pmc	(local)
@@ -154,7 +154,8 @@
                     val = Parrot_getenv(keyname, &free_it);
                     string_cstring_free(keyname);
                 }
-                retval = string_from_cstring(interp, val ? val : "", 0);
+                retval = val ? string_from_cstring(interp, val, 0)
+                             : string_from_literal(interp, "");
                 if (free_it && val)
                     mem_sys_free(val);
                 break;
@@ -185,7 +186,8 @@
             val = Parrot_getenv(keyname, &free_it);
             string_cstring_free(keyname);
         }
-        retval = string_from_cstring(INTERP, val ? val : "", 0);
+        retval = val ? string_from_cstring(INTERP, val, 0)
+                     : string_from_literal(INTERP, "");
         if (free_it && val)
             mem_sys_free(val);
         return_pmc = pmc_new(INTERP, enum_class_String);

Reply via email to