Conlang/stdlib/lib.cl
John 9a687624fc stdlib: Add some funky syntax tests
TODO: make stuff like this into actual lexer->parser->analysis->interpreter tests.
2024-04-18 21:10:11 -05:00

108 lines
1.6 KiB
Common Lisp

//! # The Conlang Standard Library
#[intrinsic = "bool"]
pub type bool;
#[intrinsic = "char"]
pub type char;
#[intrinsic = "i8"]
pub type i8;
#[intrinsic = "i16"]
pub type i16;
#[intrinsic = "i32"]
pub type i32;
#[intrinsic = "i64"]
pub type i64;
#[intrinsic = "u8"]
pub type u8;
#[intrinsic = "u16"]
pub type u16;
#[intrinsic = "u32"]
pub type u32;
#[intrinsic = "u64"]
pub type u64;
impl bool {
const MIN: Self = false;
const MAX: Self = {
fn ret_true() -> Self {
true
}
ret_true()
};
}
fn if_else() -> i32 {
// block 1
let x = 10;
let y = x + 2;
if x > 10
// compare x and 10
// end block 1, goto block 2 else goto block 3
{
// block 2
4
// end block 2, goto block 4
} else {
// block 3
5
// end block 3, goto block 4
}
// block 4
}
#[cfg("test")]
mod test {
//! Tests for funky behavior
struct UnitLike;
struct TupleLike(super::i32, super::self::test::super::char)
struct StructLike {
pub member1: UnitLike,
member2: TupleLike,
}
enum NeverLike;
enum EmptyLike {
Empty,
}
enum Hodgepodge {
Empty,
UnitLike (),
Tuple (TupleLike),
StructEmpty {},
StructLike { member1: UnitLike, member2: TupleLike },
}
fn noop () -> bool {
loop if false {
} else break loop if false {
} else break loop if false {
} else break true;
}
fn while_else() -> i32 {
while conditional {
pass
} else {
fail
}
}
}