summaryrefslogtreecommitdiffstats
path: root/compiler/rustc_ast/src/entry.rs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/rustc_ast/src/entry.rs')
-rw-r--r--compiler/rustc_ast/src/entry.rs29
1 files changed, 29 insertions, 0 deletions
diff --git a/compiler/rustc_ast/src/entry.rs b/compiler/rustc_ast/src/entry.rs
index 337014619..cd8a5a669 100644
--- a/compiler/rustc_ast/src/entry.rs
+++ b/compiler/rustc_ast/src/entry.rs
@@ -1,3 +1,7 @@
+use crate::{attr, Attribute};
+use rustc_span::symbol::sym;
+use rustc_span::Symbol;
+
#[derive(Debug)]
pub enum EntryPointType {
None,
@@ -6,3 +10,28 @@ pub enum EntryPointType {
Start,
OtherMain, // Not an entry point, but some other function named main
}
+
+pub fn entry_point_type(
+ attrs: &[Attribute],
+ at_root: bool,
+ name: Option<Symbol>,
+) -> EntryPointType {
+ if attr::contains_name(attrs, sym::start) {
+ EntryPointType::Start
+ } else if attr::contains_name(attrs, sym::rustc_main) {
+ EntryPointType::RustcMainAttr
+ } else {
+ if let Some(name) = name
+ && name == sym::main
+ {
+ if at_root {
+ // This is a top-level function so it can be `main`.
+ EntryPointType::MainNamed
+ } else {
+ EntryPointType::OtherMain
+ }
+ } else {
+ EntryPointType::None
+ }
+ }
+}