[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Help-smalltalk] [PATCH] have a "bang" clear temporary variables
From: |
Paolo Bonzini |
Subject: |
[Help-smalltalk] [PATCH] have a "bang" clear temporary variables |
Date: |
Tue, 29 May 2007 16:46:16 +0200 |
User-agent: |
Thunderbird 2.0.0.0 (Macintosh/20070326) |
This was messed up during one of the merges with Daniele.
st> a := 5
5
st> a!
5
st> a
nil
Paolo
2007-05-29 Paolo Bonzini <address@hidden>
* libgst/gst-parse.c: Revert meaning of the last parameter
to parse_doit. Skip over the final '!' in parse_chunks,
don't do so in parse_doit and parse_method_list. Exit
parse_namespace_definition upon finding a '!'.
--- orig/libgst/gst-parse.c
+++ mod/libgst/gst-parse.c
@@ -98,7 +98,7 @@ static int filprintf (Filament *fil,
static void parse_chunks (gst_parser *p);
static void parse_doit (gst_parser *p,
- mst_Boolean accept_bang);
+ mst_Boolean fail_at_eof);
static mst_Boolean parse_scoped_definition (gst_parser *p,
tree_node first_stmt);
@@ -354,8 +354,10 @@ parse_chunks (gst_parser *p)
if (p->state == PARSE_METHOD_LIST)
parse_method_list (p);
else
- parse_doit (p, true);
+ parse_doit (p, false);
}
+
+ lex_skip_if (p, '!', false);
_gst_pop_temporaries_dictionary (oldTemporaries);
}
}
@@ -437,7 +439,7 @@ recover_error (gst_parser *p)
| empty */
static void
-parse_doit (gst_parser *p, mst_Boolean accept_bang)
+parse_doit (gst_parser *p, mst_Boolean fail_at_eof)
{
tree_node statement = NULL;
mst_Boolean caret;
@@ -445,7 +447,7 @@ parse_doit (gst_parser *p, mst_Boolean a
if (token (p, 0) == '|')
parse_temporaries (p, false);
- if (token (p, 0) == EOF && accept_bang)
+ if (token (p, 0) == EOF && !fail_at_eof)
return;
caret = lex_skip_if (p, '^', false);
@@ -470,8 +472,6 @@ parse_doit (gst_parser *p, mst_Boolean a
/* Do not lex until after _gst_free_tree, or we lose a token! */
lex_skip_if (p, '.', false);
- if (accept_bang)
- lex_skip_if (p, '!', false);
}
@@ -603,8 +603,8 @@ parse_namespace_definition (gst_parser *
_gst_msg_sendf (NULL, "%v %o current: %o",
_gst_namespace_class, new_namespace);
- while (token (p, 0) != ']' && token (p, 0) != EOF)
- parse_doit (p, false);
+ while (token (p, 0) != ']' && token (p, 0) != EOF && token (p, 0) != '!')
+ parse_doit (p, true);
_gst_msg_sendf (NULL, "%v %o current: %o",
_gst_namespace_class, old_namespace);
@@ -1020,7 +1020,6 @@ parse_method_list (gst_parser *p)
while (token (p, 0) != '!')
parse_method (p, '!');
- lex (p);
_gst_skip_compilation = false;
_gst_reset_compilation_category ();
p->state = PARSE_DOIT;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Help-smalltalk] [PATCH] have a "bang" clear temporary variables,
Paolo Bonzini <=