RULE* bind_builtin( char* name, LIST*(*f)(PARSE*, FRAME*), int flags, char** args ) { argument_list* arg_list = 0; if ( args ) { arg_list = args_new(); lol_build( arg_list->data, args ); } return new_rule_body( root_module(), name, arg_list, parse_make( f, P0, P0, P0, C0, C0, flags ), 1 ); }
LIST * compile_setcomp( PARSE * parse, FRAME * frame ) { argument_list * arg_list = 0; /* Create new LOL describing argument requirements if supplied. */ if ( parse->right ) { PARSE * p; arg_list = args_new(); for ( p = parse->right; p; p = p->left ) lol_add( arg_list->data, parse_evaluate( p->right, frame ) ); } new_rule_body( frame->module, parse->string, arg_list, parse->left, !parse->num ); return L0; }