mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-12-22 17:51:53 +00:00
Merge commit 'v2.13.1-137-g31e60fd4' into mq-merge-step-2
This commit is contained in:
commit
9d8b8959af
@ -20,6 +20,7 @@ static inline u32 pair_a(u32 p) { return p >> 16; }
|
|||||||
static inline u32 pair_b(u32 p) { return p & 0xFFFF; }
|
static inline u32 pair_b(u32 p) { return p & 0xFFFF; }
|
||||||
|
|
||||||
static struct symbol *this_function;
|
static struct symbol *this_function;
|
||||||
|
static struct sym_scope *this_for_scope;
|
||||||
|
|
||||||
static struct f_method_scope {
|
static struct f_method_scope {
|
||||||
struct f_inst *object;
|
struct f_inst *object;
|
||||||
@ -965,7 +966,9 @@ cmd:
|
|||||||
new_config->current_scope->slots += 2;
|
new_config->current_scope->slots += 2;
|
||||||
} for_var IN
|
} for_var IN
|
||||||
/* Parse term in the parent scope */
|
/* Parse term in the parent scope */
|
||||||
{ new_config->current_scope->active = 0; } term { new_config->current_scope->active = 1; }
|
{ this_for_scope = new_config->current_scope; new_config->current_scope = this_for_scope->next; }
|
||||||
|
term
|
||||||
|
{ new_config->current_scope = this_for_scope; this_for_scope = NULL; }
|
||||||
DO cmd {
|
DO cmd {
|
||||||
cf_pop_block_scope(new_config);
|
cf_pop_block_scope(new_config);
|
||||||
$$ = f_for_cycle($3, $6, $9);
|
$$ = f_for_cycle($3, $6, $9);
|
||||||
|
@ -1938,6 +1938,63 @@ bt_test_suite(t_if_else, "Testing if-else statement");
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Test for-in statement
|
||||||
|
* ---------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
function t_for_in()
|
||||||
|
{
|
||||||
|
bgppath p = +empty+.prepend(5).prepend(4).prepend(3).prepend(2).prepend(1);
|
||||||
|
bgppath q = +empty+.prepend(30).prepend(20).prepend(10);
|
||||||
|
int a;
|
||||||
|
|
||||||
|
# basic for loop
|
||||||
|
a = 0;
|
||||||
|
for int i in p do {
|
||||||
|
a = 2 * a + i;
|
||||||
|
}
|
||||||
|
bt_assert(a = 57);
|
||||||
|
|
||||||
|
# basic for loop, no braces
|
||||||
|
a = 0;
|
||||||
|
for int i in p do a = 2 * a + i;
|
||||||
|
bt_assert(a = 57);
|
||||||
|
|
||||||
|
# for loop with empty body
|
||||||
|
a = 0;
|
||||||
|
for int i in p do { }
|
||||||
|
bt_assert(a = 0);
|
||||||
|
|
||||||
|
# for loop over empty path
|
||||||
|
a = 0;
|
||||||
|
for int i in +empty+ do a = 1;
|
||||||
|
bt_assert(a = 0);
|
||||||
|
|
||||||
|
# for loop with var name shadowing
|
||||||
|
a = 0;
|
||||||
|
for int p in p do {
|
||||||
|
a = 2 * a + p;
|
||||||
|
}
|
||||||
|
bt_assert(a = 57);
|
||||||
|
|
||||||
|
# nested for loops
|
||||||
|
a = 0;
|
||||||
|
int n = 1;
|
||||||
|
for int i in p do {
|
||||||
|
for int j in q do {
|
||||||
|
a = a + i * j * n;
|
||||||
|
n = n + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bt_assert(a = 9300);
|
||||||
|
}
|
||||||
|
|
||||||
|
bt_test_suite(t_for_in, "Testing for-in statement");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Unused functions -- testing only parsing
|
* Unused functions -- testing only parsing
|
||||||
* ----------------------------------------
|
* ----------------------------------------
|
||||||
|
Loading…
Reference in New Issue
Block a user