Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

librustc: Always parse macro!()/macro![] as expressions if not #19984

Merged
merged 1 commit into from
Dec 18, 2014

Conversation

japaric
Copy link
Member

@japaric japaric commented Dec 18, 2014

followed by a semicolon.

This allows code like vec![1i, 2, 3].len(); to work.

This breaks code that uses macros as statements without putting
semicolons after them, such as:

fn main() {
    ...
    assert!(a == b)
    assert!(c == d)
    println(...);
}

It also breaks code that uses macros as items without semicolons:

local_data_key!(foo)

fn main() {
    println("hello world")
}

Add semicolons to fix this code. Those two examples can be fixed as
follows:

fn main() {
    ...
    assert!(a == b);
    assert!(c == d);
    println(...);
}

local_data_key!(foo);

fn main() {
    println("hello world")
}

RFC #378.

Closes #18635.

[breaking-change]


Rebased version of #18958
r? @alexcrichton
cc @pcwalton

followed by a semicolon.

This allows code like `vec![1i, 2, 3].len();` to work.

This breaks code that uses macros as statements without putting
semicolons after them, such as:

    fn main() {
        ...
        assert!(a == b)
        assert!(c == d)
        println(...);
    }

It also breaks code that uses macros as items without semicolons:

    local_data_key!(foo)

    fn main() {
        println("hello world")
    }

Add semicolons to fix this code. Those two examples can be fixed as
follows:

    fn main() {
        ...
        assert!(a == b);
        assert!(c == d);
        println(...);
    }

    local_data_key!(foo);

    fn main() {
        println("hello world")
    }

RFC rust-lang#378.

Closes rust-lang#18635.

[breaking-change]
bors added a commit that referenced this pull request Dec 18, 2014
followed by a semicolon.

This allows code like `vec![1i, 2, 3].len();` to work.

This breaks code that uses macros as statements without putting
semicolons after them, such as:

    fn main() {
        ...
        assert!(a == b)
        assert!(c == d)
        println(...);
    }

It also breaks code that uses macros as items without semicolons:

    local_data_key!(foo)

    fn main() {
        println("hello world")
    }

Add semicolons to fix this code. Those two examples can be fixed as
follows:

    fn main() {
        ...
        assert!(a == b);
        assert!(c == d);
        println(...);
    }

    local_data_key!(foo);

    fn main() {
        println("hello world")
    }

RFC #378.

Closes #18635.

[breaking-change]

---

Rebased version of #18958
r? @alexcrichton 
cc @pcwalton
@nikomatsakis
Copy link
Contributor

💃 I was wondering what would become of this PR

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Implement parse macro!() / macro![] as expr (RFC 378)
5 participants