cinap_lenrekadd hg and python4bb9e2215 years agoHistory
3279 lines · 93.5 KB · C
RawDownload
    if (  (ntype == if_stmt)          || (ntype == while_stmt)          || (ntype == for_stmt)          || (ntype == try_stmt)          || (ntype == funcdef)          || (ntype == classdef))        res = validate_node(tree);    else {        res = 0;        PyErr_Format(parser_error,                     "Illegal compound statement type: %d.", TYPE(tree));    }    return (res);}  static intvalidate_yield_or_testlist(node *tree){	if (TYPE(tree) == yield_expr) 		return validate_yield_expr(tree);	else		return validate_testlist(tree);} static intvalidate_expr_stmt(node *tree){    int j;    int nch = NCH(tree);    int res = (validate_ntype(tree, expr_stmt)               && is_odd(nch)               && validate_testlist(CHILD(tree, 0)));     if (res && nch == 3        && TYPE(CHILD(tree, 1)) == augassign) {        res = validate_numnodes(CHILD(tree, 1), 1, "augassign")		&& validate_yield_or_testlist(CHILD(tree, 2));         if (res) {            char *s = STR(CHILD(CHILD(tree, 1), 0));             res = (strcmp(s, "+=") == 0                   || strcmp(s, "-=") == 0                   || strcmp(s, "*=") == 0                   || strcmp(s, "/=") == 0                   || strcmp(s, "//=") == 0                   || strcmp(s, "%=") == 0                   || strcmp(s, "&=") == 0                   || strcmp(s, "|=") == 0                   || strcmp(s, "^=") == 0                   || strcmp(s, "<<=") == 0                   || strcmp(s, ">>=") == 0                   || strcmp(s, "**=") == 0);            if (!res)                err_string("illegal augmmented assignment operator");        }    }    else {        for (j = 1; res && (j < nch); j += 2)            res = validate_equal(CHILD(tree, j))                   && validate_yield_or_testlist(CHILD(tree, j + 1));    }    return (res);}  /*  print_stmt: * *      'print' ( [ test (',' test)* [','] ] *              | '>>' test [ (',' test)+ [','] ] ) */static intvalidate_print_stmt(node *tree){    int nch = NCH(tree);    int res = (validate_ntype(tree, print_stmt)               && (nch > 0)               && validate_name(CHILD(tree, 0), "print"));     if (res && nch > 1) {        int sym = TYPE(CHILD(tree, 1));        int i = 1;        int allow_trailing_comma = 1;         if (sym == test)            res = validate_test(CHILD(tree, i++));        else {            if (nch < 3)                res = validate_numnodes(tree, 3, "print_stmt");            else {                res = (validate_ntype(CHILD(tree, i), RIGHTSHIFT)                       && validate_test(CHILD(tree, i+1)));                i += 2;                allow_trailing_comma = 0;            }        }        if (res) {            /*  ... (',' test)* [',']  */            while (res && i+2 <= nch) {                res = (validate_comma(CHILD(tree, i))                       && validate_test(CHILD(tree, i+1)));                allow_trailing_comma = 1;                i += 2;            }            if (res && !allow_trailing_comma)                res = validate_numnodes(tree, i, "print_stmt");            else if (res && i < nch)                res = validate_comma(CHILD(tree, i));        }    }    return (res);}  static intvalidate_del_stmt(node *tree){    return (validate_numnodes(tree, 2, "del_stmt")            && validate_name(CHILD(tree, 0), "del")            && validate_exprlist(CHILD(tree, 1)));}  static intvalidate_return_stmt(node *tree){    int nch = NCH(tree);    int res = (validate_ntype(tree, return_stmt)               && ((nch == 1) || (nch == 2))               && validate_name(CHILD(tree, 0), "return"));     if (res && (nch == 2))        res = validate_testlist(CHILD(tree, 1));     return (res);}  static intvalidate_raise_stmt(node *tree){    int nch = NCH(tree);    int res = (validate_ntype(tree, raise_stmt)               && ((nch == 1) || (nch == 2) || (nch == 4) || (nch == 6)));     if (res) {        res = validate_name(CHILD(tree, 0), "raise");        if (res && (nch >= 2))            res = validate_test(CHILD(tree, 1));        if (res && nch > 2) {            res = (validate_comma(CHILD(tree, 2))                   && validate_test(CHILD(tree, 3)));            if (res && (nch > 4))                res = (validate_comma(CHILD(tree, 4))                       && validate_test(CHILD(tree, 5)));        }    }    else        (void) validate_numnodes(tree, 2, "raise");    if (res && (nch == 4))        res = (validate_comma(CHILD(tree, 2))               && validate_test(CHILD(tree, 3)));     return (res);}  /* yield_expr: 'yield' [testlist] */static intvalidate_yield_expr(node *tree){    int nch = NCH(tree);    int res = (validate_ntype(tree, yield_expr)               && ((nch == 1) || (nch == 2))               && validate_name(CHILD(tree, 0), "yield"));     if (res && (nch == 2))        res = validate_testlist(CHILD(tree, 1));     return (res);}  /* yield_stmt: yield_expr */static intvalidate_yield_stmt(node *tree){    return (validate_ntype(tree, yield_stmt)            && validate_numnodes(tree, 1, "yield_stmt")            && validate_yield_expr(CHILD(tree, 0)));}  static intvalidate_import_as_name(node *tree){    int nch = NCH(tree);    int ok = validate_ntype(tree, import_as_name);     if (ok) {        if (nch == 1)            ok = validate_name(CHILD(tree, 0), NULL);        else if (nch == 3)            ok = (validate_name(CHILD(tree, 0), NULL)                  && validate_name(CHILD(tree, 1), "as")                  && validate_name(CHILD(tree, 2), NULL));        else            ok = validate_numnodes(tree, 3, "import_as_name");    }    return ok;}  /* dotted_name:  NAME ("." NAME)* */static intvalidate_dotted_name(node *tree){    int nch = NCH(tree);    int res = (validate_ntype(tree, dotted_name)               && is_odd(nch)               && validate_name(CHILD(tree, 0), NULL));    int i;     for (i = 1; res && (i < nch); i += 2) {        res = (validate_dot(CHILD(tree, i))               && validate_name(CHILD(tree, i+1), NULL));    }    return res;}  /* dotted_as_name:  dotted_name [NAME NAME] */static intvalidate_dotted_as_name(node *tree){    int nch = NCH(tree);    int res = validate_ntype(tree, dotted_as_name);     if (res) {        if (nch == 1)            res = validate_dotted_name(CHILD(tree, 0));        else if (nch == 3)            res = (validate_dotted_name(CHILD(tree, 0))                   && validate_name(CHILD(tree, 1), "as")                   && validate_name(CHILD(tree, 2), NULL));        else {            res = 0;            err_string("illegal number of children for dotted_as_name");        }    }    return res;}  /* dotted_as_name (',' dotted_as_name)* */static intvalidate_dotted_as_names(node *tree){	int nch = NCH(tree);	int res = is_odd(nch) && validate_dotted_as_name(CHILD(tree, 0));	int i; 	for (i = 1; res && (i < nch); i += 2)	    res = (validate_comma(CHILD(tree, i))		   && validate_dotted_as_name(CHILD(tree, i + 1)));	return (res);}  /* import_as_name (',' import_as_name)* [','] */static intvalidate_import_as_names(node *tree){    int nch = NCH(tree);    int res = validate_import_as_name(CHILD(tree, 0));    int i;     for (i = 1; res && (i + 1 < nch); i += 2)	res = (validate_comma(CHILD(tree, i))	       && validate_import_as_name(CHILD(tree, i + 1)));    return (res);}  /* 'import' dotted_as_names */static intvalidate_import_name(node *tree){	return (validate_ntype(tree, import_name)		&& validate_numnodes(tree, 2, "import_name")		&& validate_name(CHILD(tree, 0), "import")		&& validate_dotted_as_names(CHILD(tree, 1)));} /* Helper function to count the number of leading dots in  * 'from ...module import name' */static intcount_from_dots(node *tree){        int i;        for (i = 0; i < NCH(tree); i++)		if (TYPE(CHILD(tree, i)) != DOT)			break;        return i;} /* 'from' ('.'* dotted_name | '.') 'import' ('*' | '(' import_as_names ')' | *     import_as_names */static intvalidate_import_from(node *tree){	int nch = NCH(tree);	int ndots = count_from_dots(tree);	int havename = (TYPE(CHILD(tree, ndots + 1)) == dotted_name);	int offset = ndots + havename;	int res = validate_ntype(tree, import_from)		&& (nch >= 4 + ndots)		&& validate_name(CHILD(tree, 0), "from")		&& (!havename || validate_dotted_name(CHILD(tree, ndots + 1)))		&& validate_name(CHILD(tree, offset + 1), "import"); 	if (res && TYPE(CHILD(tree, offset + 2)) == LPAR)	    res = ((nch == offset + 5)		   && validate_lparen(CHILD(tree, offset + 2))		   && validate_import_as_names(CHILD(tree, offset + 3))		   && validate_rparen(CHILD(tree, offset + 4)));	else if (res && TYPE(CHILD(tree, offset + 2)) != STAR)	    res = validate_import_as_names(CHILD(tree, offset + 2));	return (res);}  /* import_stmt: import_name | import_from */static intvalidate_import_stmt(node *tree){    int nch = NCH(tree);    int res = validate_numnodes(tree, 1, "import_stmt");     if (res) {	int ntype = TYPE(CHILD(tree, 0)); 	if (ntype == import_name || ntype == import_from)            res = validate_node(CHILD(tree, 0));        else {            res = 0;            err_string("illegal import_stmt child type");        }    }    else if (nch == 1) {        res = 0;        PyErr_Format(parser_error,                     "Unrecognized child node of import_stmt: %d.",                     TYPE(CHILD(tree, 0)));    }    return (res);}    static intvalidate_global_stmt(node *tree){    int j;    int nch = NCH(tree);    int res = (validate_ntype(tree, global_stmt)               && is_even(nch) && (nch >= 2));     if (!res && !PyErr_Occurred())        err_string("illegal global statement");     if (res)        res = (validate_name(CHILD(tree, 0), "global")               && validate_ntype(CHILD(tree, 1), NAME));    for (j = 2; res && (j < nch); j += 2)        res = (validate_comma(CHILD(tree, j))               && validate_ntype(CHILD(tree, j + 1), NAME));     return (res);}  /*  exec_stmt: * *  'exec' expr ['in' test [',' test]] */static intvalidate_exec_stmt(node *tree){    int nch = NCH(tree);    int res = (validate_ntype(tree, exec_stmt)               && ((nch == 2) || (nch == 4) || (nch == 6))               && validate_name(CHILD(tree, 0), "exec")               && validate_expr(CHILD(tree, 1)));     if (!res && !PyErr_Occurred())        err_string("illegal exec statement");    if (res && (nch > 2))        res = (validate_name(CHILD(tree, 2), "in")               && validate_test(CHILD(tree, 3)));    if (res && (nch == 6))        res = (validate_comma(CHILD(tree, 4))               && validate_test(CHILD(tree, 5)));     return (res);}  /*  assert_stmt: * *  'assert' test [',' test] */static intvalidate_assert_stmt(node *tree){    int nch = NCH(tree);    int res = (validate_ntype(tree, assert_stmt)               && ((nch == 2) || (nch == 4))               && (validate_name(CHILD(tree, 0), "assert"))               && validate_test(CHILD(tree, 1)));     if (!res && !PyErr_Occurred())        err_string("illegal assert statement");    if (res && (nch > 2))        res = (validate_comma(CHILD(tree, 2))               && validate_test(CHILD(tree, 3)));     return (res);}  static intvalidate_while(node *tree){    int nch = NCH(tree);    int res = (validate_ntype(tree, while_stmt)               && ((nch == 4) || (nch == 7))               && validate_name(CHILD(tree, 0), "while")               && validate_test(CHILD(tree, 1))               && validate_colon(CHILD(tree, 2))               && validate_suite(CHILD(tree, 3)));     if (res && (nch == 7))        res = (validate_name(CHILD(tree, 4), "else")               && validate_colon(CHILD(tree, 5))               && validate_suite(CHILD(tree, 6)));     return (res);}  static intvalidate_for(node *tree){    int nch = NCH(tree);    int res = (validate_ntype(tree, for_stmt)               && ((nch == 6) || (nch == 9))               && validate_name(CHILD(tree, 0), "for")               && validate_exprlist(CHILD(tree, 1))               && validate_name(CHILD(tree, 2), "in")               && validate_testlist(CHILD(tree, 3))               && validate_colon(CHILD(tree, 4))               && validate_suite(CHILD(tree, 5)));     if (res && (nch == 9))        res = (validate_name(CHILD(tree, 6), "else")               && validate_colon(CHILD(tree, 7))               && validate_suite(CHILD(tree, 8)));     return (res);}  /*  try_stmt: *      'try' ':' suite (except_clause ':' suite)+ ['else' ':' suite] *    | 'try' ':' suite 'finally' ':' suite * */static intvalidate_try(node *tree){    int nch = NCH(tree);    int pos = 3;    int res = (validate_ntype(tree, try_stmt)               && (nch >= 6) && ((nch % 3) == 0));     if (res)        res = (validate_name(CHILD(tree, 0), "try")               && validate_colon(CHILD(tree, 1))               && validate_suite(CHILD(tree, 2))               && validate_colon(CHILD(tree, nch - 2))               && validate_suite(CHILD(tree, nch - 1)));

Lines 1501–2000 of 3279. Previous lines