about summary refs log tree commit diff stats
path: root/061recipe.cc
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2016-02-25 22:45:25 -0800
committerKartik K. Agaram <vc@akkartik.com>2016-02-25 22:48:22 -0800
commitb436291f403d5ca1914c58fc995949275a9fab44 (patch)
treeb781b9aa48bc9fd0f51ba52a7a31e149317723dc /061recipe.cc
parent9e91a21ef385e33ca373e4308ca3227c228fe09b (diff)
downloadmu-b436291f403d5ca1914c58fc995949275a9fab44.tar.gz
2711 - permit boolean<-number conversions
I might change my mind on this, but it's worth a try after watching Ella
run up against it today. I got her to build the recipe 'odd?', but then
it failed to run because she couldn't convert a numeric remainder to a
number without a conditional (which I haven't taught her yet).

For now I don't change the value in the boolean, so booleans can store
arbitrary bit patterns like in C. We just say that 0 is false and
anything else is true. I *think* that doesn't break the type system..
Diffstat (limited to '061recipe.cc')
-rw-r--r--061recipe.cc12
1 files changed, 6 insertions, 6 deletions
diff --git a/061recipe.cc b/061recipe.cc
index 39778426..c47cef72 100644
--- a/061recipe.cc
+++ b/061recipe.cc
@@ -78,7 +78,7 @@ case CALL: {
 recipe main [
   1:number <- call f, 34
 ]
-recipe f x:boolean -> y:boolean [
+recipe f x:point -> y:point [
   local-scope
   load-ingredients
   y <- copy x
@@ -89,16 +89,16 @@ recipe f x:boolean -> y:boolean [
 :(scenario call_check_variable_recipe)
 % Hide_errors = true;
 recipe main [
-  {1: (recipe boolean -> boolean)} <- copy f
-  2:number <- call {1: (recipe boolean -> boolean)}, 34
+  {1: (recipe point -> point)} <- copy f
+  2:number <- call {1: (recipe point -> point)}, 34
 ]
-recipe f x:boolean -> y:boolean [
+recipe f x:point -> y:point [
   local-scope
   load-ingredients
   y <- copy x
 ]
-+error: main: ingredient 0 has the wrong type at '2:number <- call {1: (recipe boolean -> boolean)}, 34'
-+error: main: product 0 has the wrong type at '2:number <- call {1: (recipe boolean -> boolean)}, 34'
++error: main: ingredient 0 has the wrong type at '2:number <- call {1: (recipe point -> point)}, 34'
++error: main: product 0 has the wrong type at '2:number <- call {1: (recipe point -> point)}, 34'
 
 :(after "Transform.push_back(check_instruction)")
 Transform.push_back(check_indirect_calls_against_header);  // idempotent