示例#1
0
void wpl_block_foreach::parse_value(wpl_namespace *ns) {
	set_parent_namespace (ns);

	exp_init.reset(new wpl_expression());

	wpl_expression_par_enclosed *exp = new wpl_expression_par_enclosed();
	run_condition.reset(exp);

	ignore_whitespace();
	if (!ignore_letter ('(')) {
		THROW_ELEMENT_EXCEPTION("Expected '(' in foreach loop definition");
	}

	/*
	   Allow declaration of variables inside init statement
	   */
	find_and_parse_complete_type();

	exp_init->load_position(get_position());
	exp_init->parse_value(this);
	load_position(exp_init->get_position());

	exp->insert_fake_open_par();
	exp->load_position(get_position());
	exp->parse_value(this);
	load_position(exp->get_position());

	get_block()->load_position(get_position());
	get_block()->parse_value(this);
	load_position(get_block()->get_position());
}
示例#2
0
void wpl_block_for::parse_value (wpl_namespace *ns) {
	set_parent_namespace(ns);

	ignore_whitespace();
	if (!ignore_letter ('(')) {
		THROW_ELEMENT_EXCEPTION("Expected '(' in for loop definition");
	}

	exp_init->load_position(get_position());
	exp_init->parse_value(ns);
	load_position(exp_init->get_position());

	exp_condition->load_position(get_position());
	exp_condition->parse_value(ns);
	load_position(exp_condition->get_position());

	// This expression catches the end parantheses ')'
	exp_increment->insert_fake_open_par();
	exp_increment->load_position(get_position());
	exp_increment->parse_value(ns);
	load_position(exp_increment->get_position());

	ignore_blockstart();
	wpl_block::parse_value(this);
}