<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -3,6 +3,14 @@
 #include &quot;object.h&quot;
 #include &quot;boolean.h&quot;
 
+object_t boolean_t;
+object_t boolean_f;
+
+void boolean_initialize() {
+    boolean_t = boolean_new(1);
+    boolean_f = boolean_new(0);
+}
+
 object_t boolean_new(int value) {
     object_t self;
     self.tag = OBJECT_BOOLEAN_TAG;
@@ -10,7 +18,7 @@ object_t boolean_new(int value) {
     return self;
 }
 
-int boolean_unwrap(object_t self) {
+int boolean_unbox(object_t self) {
     if (!object_is_boolean(self))
         fail();
     return self.data.number;</diff>
      <filename>boolean.c</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,7 @@
 /* public domain */
 
+object_t boolean_t;
+object_t boolean_f;
+void boolean_initialize();
 object_t boolean_new(int);
-int boolean_unwrap(object_t);
+int boolean_unbox(object_t);</diff>
      <filename>boolean.h</filename>
    </modified>
    <modified>
      <diff>@@ -7,6 +7,7 @@
 #include &quot;word.h&quot;
 #include &quot;list.h&quot;
 #include &quot;string.h&quot;
+#include &quot;boolean.h&quot;
 #include &quot;block.h&quot;
 #include &quot;dictionary.h&quot;
 #include &quot;machine.h&quot;
@@ -29,7 +30,12 @@ machine_t *primitive_fail(machine_t *machine) {
 }
 
 static object_t main_primitive(const char *name, primitive_t c_function) {
-    return word_new(string_new(name), primitive_new(c_function));
+    return word_new(string_new(name), primitive_new(c_function), boolean_f);
+}
+
+static object_t main_parsing_primitive(const char *name, 
+                                       primitive_t c_function) {
+    return word_new(string_new(name), primitive_new(c_function), boolean_t);
 }
 
 int main (int argc, const char *argv[]) {
@@ -41,11 +47,12 @@ int main (int argc, const char *argv[]) {
     object_t quote_delimiter;
     object_t definition_delimiter;
     object_t dictionary;
+    boolean_initialize();
     list_initialize();
     machine_initialize();
     primitive_one_plus = main_primitive(&quot;one_plus&quot;, one_plus);
-    primitive_parse_quote = main_primitive(&quot;[&quot;, parse_quote);
-    primitive_parse_definition = main_primitive(&quot;:&quot;, parse_definition);
+    primitive_parse_quote = main_parsing_primitive(&quot;[&quot;, parse_quote);
+    primitive_parse_definition = main_parsing_primitive(&quot;:&quot;, parse_definition);
     quote_delimiter = main_primitive(&quot;]&quot;, primitive_fail);
     definition_delimiter = main_primitive(&quot;;&quot;, primitive_fail);
     dictionary = dictionary_insert(list_nil, primitive_one_plus);</diff>
      <filename>main.c</filename>
    </modified>
    <modified>
      <diff>@@ -43,6 +43,10 @@ int object_is_string(object_t self) {
     return self.tag == OBJECT_STRING_TAG;
 }
 
+int object_is_boolean(object_t self) {
+    return self.tag == OBJECT_BOOLEAN_TAG;
+}
+
 int object_is_block(object_t self) {
     return self.tag == OBJECT_BLOCK_TAG;
 }</diff>
      <filename>object.c</filename>
    </modified>
    <modified>
      <diff>@@ -9,6 +9,7 @@
 #include &quot;list.h&quot;
 #include &quot;fixnum.h&quot;
 #include &quot;word.h&quot;
+#include &quot;boolean.h&quot;
 #include &quot;dictionary.h&quot;
 #include &quot;machine.h&quot;
 #include &quot;parse.h&quot;
@@ -47,13 +48,12 @@ object_t parse_file(machine_t *machine, const char *filename) {
     fclose(file);
     parse_line = 0;
     parse_column = 0;
-    phony_word = word_new(string_new(&quot;&quot;), list_nil);
+    phony_word = word_new(string_new(&quot;&quot;), list_nil, boolean_f);
     return parse_until_word(machine, phony_word);
 }
 
 int parse_is_parsing_word(object_t word) {
-    return (   0 == strcmp(string_unbox(word_name(word)), &quot;[&quot;)
-            || 0 == strcmp(string_unbox(word_name(word)), &quot;:&quot;));
+    return boolean_unbox(word_parsing_p(word));
 }
 
 machine_t *parse_quote(machine_t *machine) {
@@ -77,11 +77,11 @@ machine_t *parse_definition(machine_t *machine) {
     if (parse_token(&amp;name)) {
         object_t word;
         quote = parse_until_word(machine, delimiter);
-        word = word_new(name, quote);
+        word = word_new(name, quote, boolean_f);
         machine-&gt;dictionary = dictionary_insert(dictionary, word);
-        return machine;
     } else
         fail();
+    return machine;
 }
 
 object_t parse_until_word(machine_t *machine, object_t stop_word) {</diff>
      <filename>parse.c</filename>
    </modified>
    <modified>
      <diff>@@ -5,12 +5,13 @@
 #include &quot;object.h&quot;
 #include &quot;word.h&quot;
 
-object_t word_new(object_t name, object_t definition) {
+object_t word_new(object_t name, object_t definition, object_t parsing_p) {
     object_t self;
     self.tag = OBJECT_WORD_TAG;
-    self.data.pointer = malloc(2 * sizeof(object_t));
+    self.data.pointer = malloc(3 * sizeof(object_t));
     ((object_t *)self.data.pointer)[0] = name;
     ((object_t *)self.data.pointer)[1] = definition;
+    ((object_t *)self.data.pointer)[2] = parsing_p;
     return self;
 }
 
@@ -28,6 +29,6 @@ object_t word_definition(object_t self) {
     return word_unbox(self)[1];
 }
 
-void word_set_definition(object_t self, object_t definition) {
-    word_unbox(self)[1] = definition;
+object_t word_parsing_p(object_t self) {
+    return word_unbox(self)[2];
 }</diff>
      <filename>word.c</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,7 @@
 /* public domain */
 
-object_t word_new(object_t, object_t);
+object_t word_new(object_t, object_t, object_t);
 object_t *word_unbox(object_t);
 object_t word_name(object_t);
 object_t word_definition(object_t);
+object_t word_parsing_p(object_t);</diff>
      <filename>word.h</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>c061df7abd6397bab8c8f828350814df0fec3d0b</id>
    </parent>
  </parents>
  <author>
    <name>Eric Bergstrome</name>
    <login>ebb</login>
    <email>eric.bergstrome@gmail.com</email>
  </author>
  <url>http://github.com/ebb/pufn/commit/c792bc96d58c6f7f1e5fc0e027f55fc0e5a90f4c</url>
  <id>c792bc96d58c6f7f1e5fc0e027f55fc0e5a90f4c</id>
  <committed-date>2008-05-06T14:25:42-07:00</committed-date>
  <authored-date>2008-05-06T14:25:42-07:00</authored-date>
  <message>Added a flag to identify parsing words.</message>
  <tree>c180362f0ba2c47845fedc9b742011ac1c026329</tree>
  <committer>
    <name>Eric Bergstrome</name>
    <login>ebb</login>
    <email>eric.bergstrome@gmail.com</email>
  </committer>
</commit>
