//: allow using literal strings anywhere that will accept immutable strings

:(scenario passing_literals_to_recipes)
def main [
  1:num/raw <- foo [abc]
]
def foo x:text -> n:num [
  local-scope
  load-ingredients
  n <- length *x
]
+mem: storing 3 in location 1

:(before "End Instruction Inserting/Deleting Transforms")
initialize_transform_rewrite_literal_string_to_text();
Transform.push_back(rewrite_literal_string_to_text);  // idempotent

:(before "End Globals")
set<string> recipes_taking_literal_strings;
:(code)
void initialize_transform_rewrite_literal_string_to_text() {
  recipes_taking_literal_strings.insert("$print");
  recipes_taking_literal_strings.insert("$dump-trace");
  recipes_taking_literal_strings.insert("$system");
  recipes_taking_literal_strings.insert("trace");
  recipes_taking_literal_strings.insert("stash");
  recipes_taking_literal_strings.insert("assert");
  recipes_taking_literal_strings.insert(&
discard """
  targets: "cpp"
  cmd: "nim cpp --threads:on $file"
"""

# bug #5142

var ci: Channel[int]
ci.open
; SIZE(caller.steps); ++i) { const instruction& inst = caller.steps.at(i); for (int in = 0; in < SIZE(inst.ingredients); ++in) if (is_numeric_location(inst.ingredients.at(in))) return true; for (int out = 0; out < SIZE(inst.products); ++out) if (is_numeric_location(inst.products.at(out))) return true; } return false; }