summaryrefslogtreecommitdiff
path: root/tools/build/src/engine/jamgram.y
diff options
context:
space:
mode:
Diffstat (limited to 'tools/build/src/engine/jamgram.y')
-rw-r--r--tools/build/src/engine/jamgram.y11
1 files changed, 10 insertions, 1 deletions
diff --git a/tools/build/src/engine/jamgram.y b/tools/build/src/engine/jamgram.y
index 543f1561a4..2e980b8f74 100644
--- a/tools/build/src/engine/jamgram.y
+++ b/tools/build/src/engine/jamgram.y
@@ -17,8 +17,10 @@
%token _RBRACKET_t
%token ACTIONS_t
%token BIND_t
+%token BREAK_t
%token CASE_t
%token CLASS_t
+%token CONTINUE_t
%token DEFAULT_t
%token ELSE_t
%token EXISTING_t
@@ -128,6 +130,9 @@
# define psete( s,l,s1,f ) parse_make( PARSE_SETEXEC,l,P0,P0,s,s1,f )
# define pswitch( l,r ) parse_make( PARSE_SWITCH,l,r,P0,S0,S0,0 )
# define pwhile( l,r ) parse_make( PARSE_WHILE,l,r,P0,S0,S0,0 )
+# define preturn( l ) parse_make( PARSE_RETURN,l,P0,P0,S0,S0,0 )
+# define pbreak() parse_make( PARSE_BREAK,P0,P0,P0,S0,S0,0 )
+# define pcontinue() parse_make( PARSE_CONTINUE,P0,P0,P0,S0,S0,0 )
# define pnode( l,r ) parse_make( F0,l,r,P0,S0,S0,0 )
# define psnode( s,l ) parse_make( F0,l,P0,P0,s,S0,0 )
@@ -196,7 +201,11 @@ rule : _LBRACE_t block _RBRACE_t
| arg ON_t list assign list _SEMIC_t
{ $$.parse = pset1( $1.parse, $3.parse, $5.parse, $4.number ); }
| RETURN_t list _SEMIC_t
- { $$.parse = $2.parse; }
+ { $$.parse = preturn( $2.parse ); }
+ | BREAK_t _SEMIC_t
+ { $$.parse = pbreak(); }
+ | CONTINUE_t _SEMIC_t
+ { $$.parse = pcontinue(); }
| FOR_t local_opt ARG IN_t list _LBRACE_t block _RBRACE_t
{ $$.parse = pfor( $3.string, $5.parse, $7.parse, $2.number ); }
| SWITCH_t list _LBRACE_t cases _RBRACE_t