]> git.lizzy.rs Git - rust.git/blob - src/libsyntax/entry.rs
The war on abort_if_errors
[rust.git] / src / libsyntax / entry.rs
1 // Copyright 2012-2015 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
4 //
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
10
11 use attr;
12 use ast::{Item, ItemFn};
13
14 pub enum EntryPointType {
15     None,
16     MainNamed,
17     MainAttr,
18     Start,
19     OtherMain, // Not an entry point, but some other function named main
20 }
21
22 // Beware, this is duplicated in librustc/middle/entry.rs, make sure to keep
23 // them in sync.
24 pub fn entry_point_type(item: &Item, depth: usize) -> EntryPointType {
25     match item.node {
26         ItemFn(..) => {
27             if attr::contains_name(&item.attrs, "start") {
28                 EntryPointType::Start
29             } else if attr::contains_name(&item.attrs, "main") {
30                 EntryPointType::MainAttr
31             } else if item.ident.name.as_str() == "main" {
32                 if depth == 1 {
33                     // This is a top-level function so can be 'main'
34                     EntryPointType::MainNamed
35                 } else {
36                     EntryPointType::OtherMain
37                 }
38             } else {
39                 EntryPointType::None
40             }
41         }
42         _ => EntryPointType::None,
43     }
44 }