private void VisitLabeledStatement(labeled_statement ls)
 {
     bw.Write(members[ls.label]);
     WriteDebugInfo(ls.location);
     VisitStatement(ls.statement);
 }
Exemple #2
0
 private void VisitLabeledStatement(labeled_statement stmt)
 {
     VisitStatement(stmt.statement);
 }
 public override void visit(SyntaxTree.labeled_statement _labeled_statement)
 {
     convertion_data_and_alghoritms.check_node_parser_error(_labeled_statement.label_name);
     SymbolInfo si = context.CurrentScope.FindOnlyInScopeAndBlocks(_labeled_statement.label_name.name);
     if (_labeled_statement.to_statement is SyntaxTree.var_statement)
     {
         AddError(get_location(_labeled_statement.label_name), "LABELED_DECLARATION_NOT_ALLOWED");
     }
     if (si == null)
     {
         AddError(new UndefinedNameReference(_labeled_statement.label_name.name, get_location(_labeled_statement.label_name)));
     }
     label_node lab = si.sym_info as label_node;
     if (lab == null)
     {
         AddError(get_location(_labeled_statement.label_name), "IDENT_{0}_IS_NOT_LABEL", _labeled_statement.label_name.name);
     }
     if (lab.is_defined)
     {
         AddError(get_location(_labeled_statement.label_name), "LABEL_{0}_REDEFINED", _labeled_statement.label_name.name);
     }
     lab.is_defined = true;
     lab.comprehensive_code_block = context.block_stack.Peek();
     foreach (goto_statement gs in lab.goto_statements)
     {
         if (!context.check_can_goto(lab.comprehensive_code_block, gs.comprehensive_code_block))
         {
             //AddError(gs.location, "BLOCKED_LABEL_{0}_GOTO", lab.name);
         }
     }
     convertion_data_and_alghoritms.check_node_parser_error(_labeled_statement.to_statement);
     statement_node snode = ret.visit((SyntaxTree.statement)_labeled_statement.to_statement);
     labeled_statement las = new labeled_statement(lab, snode, get_location(_labeled_statement));
     ret.return_value((statement_node)las);
 }