]> ocean-lang.org Git - ocean/blobdiff - csrc/oceani.mdc
oceani: remove to_int to_float to_mpq
[ocean] / csrc / oceani.mdc
index 496f86a08a1a3a195d284616dc146582924fd89a..4b1b32a042719f79719c97a6d4ab3e8e419957aa 100644 (file)
@@ -534,7 +534,9 @@ and we need `free_binode`.
 
 Printing an `exec` requires that we know the current indent level for
 printing line-oriented components.  As will become clear later, we
-also want to know what sort of bracketing to use.
+also want to know what sort of bracketing to use.  It will also be used
+to sometime print comments after an exec to explain some of the results
+of analysis.
 
 ###### ast functions
 
@@ -564,18 +566,7 @@ also want to know what sort of bracketing to use.
                        print_binode(cast(binode, e), indent, bracket); break;
                ## print exec cases
                }
-               if (e->to_free) {
-                       struct variable *v;
-                       do_indent(indent, "/* FREE");
-                       for (v = e->to_free; v; v = v->next_free) {
-                               printf(" %.*s", v->name->name.len, v->name->name.txt);
-                               printf("[%d,%d]", v->scope_start, v->scope_end);
-                               if (v->frame_pos >= 0)
-                                       printf("(%d+%d)", v->frame_pos,
-                                              v->type ? v->type->size:0);
-                       }
-                       printf(" */\n");
-               }
+               ## print exec extras
        }
 
 ###### forward decls
@@ -772,13 +763,6 @@ possibly for order.  For now, values might need to be duplicated and
 freed, though eventually such manipulations will be better integrated
 into the language.
 
-Rather than requiring every numeric type to support all numeric
-operations (add, multiply, etc), we allow types to be able to present
-as one of a few standard types: integer, float, and fraction.  The
-existence of these conversion functions eventually enable types to
-determine if they are compatible with other types, though such types
-have not yet been implemented.
-
 Named type are stored in a simple linked list.  Objects of each type are
 "values" which are often passed around by value.
 
@@ -814,9 +798,6 @@ which might be reported in error messages.
                int (*test)(struct type *type, struct value *val);
                void (*free)(struct type *type, struct value *val);
                void (*free_type)(struct type *t);
-               long long (*to_int)(struct value *v);
-               double (*to_float)(struct value *v);
-               int (*to_mpq)(mpq_t *q, struct value *v);
                ## type functions
                union {
                        ## type union fields
@@ -1522,7 +1503,9 @@ cannot nest, so a declaration while a name is in-scope is an error.
 
 When a scope closes, the values of the variables might need to be freed.
 This happens in the context of some `struct exec` and each `exec` will
-need to know which variables need to be freed when it completes.
+need to know which variables need to be freed when it completes.  To
+improve visibility, we add a comment when printing any `exec` that
+embodies a scope to list the variables that must be freed when it ends.
 
 ####### exec fields
        struct variable *to_free;
@@ -1540,6 +1523,20 @@ need to know which variables need to be freed when it completes.
                }
        }
 
+###### print exec extras
+       if (e->to_free) {
+               struct variable *v;
+               do_indent(indent, "/* FREE");
+               for (v = e->to_free; v; v = v->next_free) {
+                       printf(" %.*s", v->name->name.len, v->name->name.txt);
+                       printf("[%d,%d]", v->scope_start, v->scope_end);
+                       if (v->frame_pos >= 0)
+                               printf("(%d+%d)", v->frame_pos,
+                                      v->type ? v->type->size:0);
+               }
+               printf(" */\n");
+       }
+
 ###### ast functions
        static void variable_unlink_exec(struct variable *v)
        {