stdlib: Inference engine caught some type errors! Also added some hot garbage.
This commit is contained in:
19
stdlib/std/io.cl
Normal file
19
stdlib/std/io.cl
Normal file
@@ -0,0 +1,19 @@
|
||||
//! The IO module contains functions for interacting with
|
||||
//! input and output streams
|
||||
use super::str::str;
|
||||
|
||||
/// Immediately causes program execution to stop
|
||||
#[builtin = "panic"]
|
||||
fn panic(..args) -> !;
|
||||
|
||||
/// Prints whatever you give it
|
||||
#[builtin = "print"]
|
||||
fn print(..args);
|
||||
|
||||
/// Prints whatever you give it, followed by a newline
|
||||
#[builtin = "println"]
|
||||
fn println(..args);
|
||||
|
||||
/// Debug-prints a thing, returning it
|
||||
#[builtin = "dbg"]
|
||||
fn dbg(arg) -> _ arg
|
||||
@@ -278,9 +278,9 @@ pub mod ops {
|
||||
}
|
||||
|
||||
impl usize {
|
||||
pub const MIN: Self = (); // __march_ptr_width_unsigned_min(); // TODO: intrinsics
|
||||
pub const MAX: Self = (); // __march_ptr_width_unsigned_max(); // TODO: intrinsics
|
||||
pub const BIT_WIDTH: u32 = (); // __march_ptr_width_bits(); // TODO: intrinsics
|
||||
pub const MIN: Self = u64::MIN as usize; // __march_ptr_width_unsigned_min(); // TODO: intrinsics
|
||||
pub const MAX: Self = u64::MAX as usize; // __march_ptr_width_unsigned_max(); // TODO: intrinsics
|
||||
pub const BIT_WIDTH: u32 = u64::BIT_WIDTH; // __march_ptr_width_bits(); // TODO: intrinsics
|
||||
pub fn default() -> Self {
|
||||
0
|
||||
}
|
||||
@@ -512,9 +512,9 @@ pub mod ops {
|
||||
}
|
||||
|
||||
impl isize {
|
||||
pub const MIN: Self = (); // __march_ptr_width_signed_min(); // TODO: intrinsics
|
||||
pub const MAX: Self = (); // __march_ptr_width_signed_max(); // TODO: intrinsics
|
||||
pub const BIT_WIDTH: u32 = (); // __march_ptr_width_bits(); // TODO: intrinsics
|
||||
pub const MIN: Self = i64::MIN as isize; // __march_ptr_width_signed_min(); // TODO: intrinsics
|
||||
pub const MAX: Self = i64::MAX as isize; // __march_ptr_width_signed_max(); // TODO: intrinsics
|
||||
pub const BIT_WIDTH: u32 = i64::BIT_WIDTH; // __march_ptr_width_bits(); // TODO: intrinsics
|
||||
pub fn default() -> Self {
|
||||
0
|
||||
}
|
||||
|
||||
@@ -6,24 +6,31 @@ pub enum Option<T> {
|
||||
None,
|
||||
}
|
||||
|
||||
impl Option {
|
||||
pub fn is_some(self: &Self) -> bool {
|
||||
match self {
|
||||
Some(_) => true,
|
||||
None => false,
|
||||
}
|
||||
}
|
||||
pub fn is_none(self: &Self) -> bool {
|
||||
match self {
|
||||
Some(_) => false,
|
||||
None => true,
|
||||
}
|
||||
}
|
||||
/// Maps from one option space to another
|
||||
impl<T> Option<T> {
|
||||
// pub fn is_some(self) -> bool {
|
||||
// match self {
|
||||
// Option::Some(_) => true,
|
||||
// Option::None() => false,
|
||||
// }
|
||||
// }
|
||||
// pub fn is_none(self: &Self) -> bool {
|
||||
// match self {
|
||||
// Option::Some(_) => false,
|
||||
// Option::None() => true,
|
||||
// }
|
||||
// }
|
||||
// /// Maps from one option space to another
|
||||
// pub fn map<U>(self: Self, f: fn(T) -> U) -> Option<U> {
|
||||
// match self {
|
||||
// Some(value) => Some(f(value)),
|
||||
// None => None,
|
||||
// Option::Some(value) => Option::Some(f(value)),
|
||||
// Option::None() => Option::None(),
|
||||
// }
|
||||
// }
|
||||
|
||||
// pub fn and_then<U>(self: Self, f: fn(T) -> Option<U>) -> Option<U> {
|
||||
// match self {
|
||||
// Option::Some(value) => f(value),
|
||||
// Option::None() => Option::None(),
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
@@ -1,15 +1,17 @@
|
||||
//! Iterable ranges
|
||||
|
||||
/// An Exclusive Range `a .. b` iterates from a to b, excluding b
|
||||
// #[lang = "range_exc"]
|
||||
#[lang = "range_exc"]
|
||||
pub struct RangeExc<T>(T, T)
|
||||
|
||||
/// An Inclusive Range `a ..= b` iterates from a to b, including b
|
||||
// #[lang = "range_inc"]
|
||||
#[lang = "range_inc"]
|
||||
pub struct RangeInc<T>(T, T)
|
||||
|
||||
impl RangeExc {
|
||||
fn next<T>(this: &RangeExc) -> T {
|
||||
(*this).0
|
||||
}
|
||||
impl<T> RangeExc<T> {
|
||||
// fn next(self: &Self) -> T {
|
||||
// let out = (*self.0);
|
||||
// (*self).0 += 1;
|
||||
// out
|
||||
// }
|
||||
}
|
||||
|
||||
@@ -6,29 +6,29 @@ pub enum Result<T, E> {
|
||||
Err(E),
|
||||
}
|
||||
|
||||
impl Result {
|
||||
pub fn is_ok(&self) -> bool {
|
||||
match self {
|
||||
Ok(_) => true,
|
||||
Err(_) => false,
|
||||
}
|
||||
}
|
||||
pub fn is_err(&self) -> bool {
|
||||
match self {
|
||||
Ok(_) => false,
|
||||
Err(_) => true,
|
||||
}
|
||||
}
|
||||
/// Maps the value inside the Result::Ok, leaving errors alone.
|
||||
// pub fn map<U>(self, f: fn(T) -> U) -> Result<U, E> {
|
||||
// match self {
|
||||
impl<T, E> Result<T, E> {
|
||||
// pub fn is_ok(self: &Self) -> bool {
|
||||
// match *self {
|
||||
// Ok(_) => true,
|
||||
// Err(_) => false,
|
||||
// }
|
||||
// }
|
||||
// pub fn is_err(self: &Self) -> bool {
|
||||
// match *self {
|
||||
// Ok(_) => false,
|
||||
// Err(_) => true,
|
||||
// }
|
||||
// }
|
||||
// /// Maps the value inside the Result::Ok, leaving errors alone.
|
||||
// pub fn map<U>(self: &Self, f: fn(T) -> U) -> Result<U, E> {
|
||||
// match *self {
|
||||
// Ok(t) => Ok(f(t)),
|
||||
// Err(e) => Err(e),
|
||||
// }
|
||||
// }
|
||||
/// Maps the value inside the Result::Err, leaving values alone.
|
||||
// pub fn map_err<F>(self, f: fn(E) -> F) -> Result<T, F> {
|
||||
// match self {
|
||||
// /// Maps the value inside the Result::Err, leaving values alone.
|
||||
// pub fn map_err<F>(self: &Self, f: fn(E) -> F) -> Result<T, F> {
|
||||
// match *self {
|
||||
// Ok(t) => Ok(t),
|
||||
// Err(e) => Err(f(e)),
|
||||
// }
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
//! TODO: give conland a string type
|
||||
use super::num::u8;
|
||||
use super::num::{char, u8};
|
||||
|
||||
// #[lang = "str"]
|
||||
#[lang = "str"]
|
||||
type str = [u8];
|
||||
|
||||
#[builtin = "chars"]
|
||||
fn chars(s: &str) -> [char];
|
||||
|
||||
#[builtin = "fmt"]
|
||||
fn fmt(..args) -> &str;
|
||||
|
||||
@@ -32,12 +32,13 @@ fn noop () -> bool {
|
||||
|
||||
} else break loop if false {
|
||||
|
||||
} else break true;
|
||||
} else break true
|
||||
}
|
||||
|
||||
fn while_else() -> i32 {
|
||||
let (conditional, pass, fail) = (true, 10, 100 as i32);
|
||||
while conditional {
|
||||
pass
|
||||
pass;
|
||||
} else {
|
||||
fail
|
||||
}
|
||||
@@ -66,7 +67,7 @@ fn if_else() -> i32 {
|
||||
mod horrible_imports {
|
||||
mod foo {
|
||||
use super::{bar::*, baz::*};
|
||||
struct Foo(&Foo, &Bar)
|
||||
struct Foo(&Bar, &Baz)
|
||||
}
|
||||
mod bar {
|
||||
use super::{foo::*, baz::*};
|
||||
|
||||
Reference in New Issue
Block a user