Skip to content

Commit 7439eab

Browse files
committed
internal: add virtual pkg "moonbitlang/core/panic"
1 parent 5ccf4a3 commit 7439eab

8 files changed

Lines changed: 82 additions & 27 deletions

File tree

builtin/intrinsics.mbt

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -62,34 +62,10 @@ pub fn ignore[T](t : T) -> Unit = "%ignore"
6262
pub fn physical_equal[T](a : T, b : T) -> Bool = "%refeq"
6363

6464
///|
65-
/// Aborts the program with an error message. Always causes a panic, regardless
66-
/// of the message provided.
67-
///
68-
/// Parameters:
69-
///
70-
/// * `message` : A string containing the error message to be displayed when
71-
/// aborting.
72-
///
73-
/// Returns a value of type `T`. However, this function never actually returns a
74-
/// value as it always causes a panic.
75-
///
76-
/// Example:
77-
///
78-
/// ```moonbit
79-
/// test "panic abort/with_message" {
80-
/// let x : Int = abort("Something went wrong") // specify return type as Int
81-
/// ignore(x)
82-
/// }
83-
/// ```
84-
pub fn abort[T](msg : String) -> T {
85-
ignore(msg)
86-
panic()
87-
}
65+
pub fnalias @panic.panic
8866

8967
///|
90-
pub fn panic[T]() -> T = "%panic"
91-
92-
// Bool primitive ops
68+
pub fnalias @panic.abort
9369

9470
///|
9571
/// Performs logical negation on a boolean value.

builtin/moon.pkg.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
{
2-
"import": [],
2+
"import": [
3+
"moonbitlang/core/panic"
4+
],
35
"test-import": [
46
"moonbitlang/core/char",
57
"moonbitlang/core/string",

intrinsics/intrinsics.mbt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// Copyright 2025 International Digital Economy Academy
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
///|
16+
pub fn unreachable[T]() -> T = "%panic"

intrinsics/intrinsics.mbti

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package "moonbitlang/core/intrinsics"
2+
3+
// Values
4+
fn unreachable[T]() -> T
5+
6+
// Types and methods
7+
8+
// Type aliases
9+
10+
// Traits
11+

intrinsics/moon.pkg.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{}

panic/moon.pkg.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"import": [
3+
"moonbitlang/core/intrinsics"
4+
],
5+
"virtual": {
6+
"has-default": true
7+
}
8+
}

panic/panic.mbt

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// Copyright 2025 International Digital Economy Academy
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
///|
16+
/// Aborts the program. Always causes a panic, regardless of the message provided.
17+
///
18+
/// Returns a value of type `T`. However, this function never actually returns a
19+
/// value as it always causes a panic.
20+
pub fn abort[T](msg : String) -> T {
21+
let _ = msg
22+
panic()
23+
}
24+
25+
///|
26+
pub fn panic[T]() -> T {
27+
@intrinsics.unreachable()
28+
}

panic/panic.mbti

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package "moonbitlang/core/panic"
2+
3+
// Values
4+
fn abort[T](String) -> T
5+
6+
fn panic[T]() -> T
7+
8+
// Types and methods
9+
10+
// Type aliases
11+
12+
// Traits
13+

0 commit comments

Comments
 (0)