do not return value from run(), add run() template
This commit is contained in:
parent
bdf53a6185
commit
c06eeb9684
44
src/main.rs
44
src/main.rs
|
@ -276,7 +276,7 @@ fn compile(code: &String, run_symbol: &String, output_filename: &Path) -> Result
|
||||||
|
|
||||||
let signature = typedef::FunSignature {
|
let signature = typedef::FunSignature {
|
||||||
args: vec![],
|
args: vec![],
|
||||||
ret: primitive.int32,
|
ret: primitive.none,
|
||||||
vars: typedef::VarMap::new(),
|
vars: typedef::VarMap::new(),
|
||||||
};
|
};
|
||||||
let mut store = codegen::concrete_type::ConcreteTypeStore::new();
|
let mut store = codegen::concrete_type::ConcreteTypeStore::new();
|
||||||
|
@ -420,7 +420,7 @@ fn link_with_lld(elf_filename: &Path, obj_filename: &Path) -> Result<(), String>
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
type RunFn = unsafe extern "C" fn() -> i32;
|
type RunFn = unsafe extern "C" fn();
|
||||||
|
|
||||||
struct CellBin {
|
struct CellBin {
|
||||||
cell_id: usize,
|
cell_id: usize,
|
||||||
|
@ -470,13 +470,19 @@ struct Cell {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Cell {
|
impl Cell {
|
||||||
|
const DEFAULT_CODE: &'static str = "def run():\n pass";
|
||||||
|
|
||||||
fn new() -> Self {
|
fn new() -> Self {
|
||||||
Self {
|
Self {
|
||||||
code: "".to_string(),
|
code: Self::DEFAULT_CODE.to_string(),
|
||||||
result: Err("".to_string()),
|
result: Err("".to_string()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn is_default(&self) -> bool {
|
||||||
|
self.code == Self::DEFAULT_CODE
|
||||||
|
}
|
||||||
|
|
||||||
fn update(&mut self) {
|
fn update(&mut self) {
|
||||||
let mut new_bin = CellBin::new(0usize);
|
let mut new_bin = CellBin::new(0usize);
|
||||||
self.result = new_bin
|
self.result = new_bin
|
||||||
|
@ -508,9 +514,13 @@ pub struct List {
|
||||||
pub extern "C" fn __nac3_cells_plot(data: *const List) {
|
pub extern "C" fn __nac3_cells_plot(data: *const List) {
|
||||||
let ui = unsafe { CELL_UI.as_mut().unwrap() };
|
let ui = unsafe { CELL_UI.as_mut().unwrap() };
|
||||||
let data_slice = unsafe { std::slice::from_raw_parts((*data).data, (*data).length) };
|
let data_slice = unsafe { std::slice::from_raw_parts((*data).data, (*data).length) };
|
||||||
let points: Vec<[f64; 2]> = (0..data_slice.len()).map(|i| [i as f64, data_slice[i]]).collect();
|
let points: Vec<[f64; 2]> = (0..data_slice.len())
|
||||||
|
.map(|i| [i as f64, data_slice[i]])
|
||||||
|
.collect();
|
||||||
let line = egui_plot::Line::new(points);
|
let line = egui_plot::Line::new(points);
|
||||||
egui_plot::Plot::new("my_plot").view_aspect(2.0).show(ui, |plot_ui| plot_ui.line(line));
|
egui_plot::Plot::new("my_plot")
|
||||||
|
.view_aspect(2.0)
|
||||||
|
.show(ui, |plot_ui| plot_ui.line(line));
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Cells {
|
impl Cells {
|
||||||
|
@ -527,7 +537,8 @@ impl Cells {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn ensure_last(&mut self) {
|
fn ensure_last(&mut self) {
|
||||||
if self.cells.last().unwrap().result.is_ok() {
|
let last_cell = self.cells.last().unwrap();
|
||||||
|
if last_cell.result.is_ok() && !last_cell.is_default() {
|
||||||
self.cells.push(Cell::new());
|
self.cells.push(Cell::new());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -564,20 +575,13 @@ impl Cells {
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
match &cell.result {
|
match &cell.result {
|
||||||
Ok(bin) => {
|
Ok(bin) => unsafe {
|
||||||
let result = {
|
CELL_UI.replace(
|
||||||
unsafe {
|
std::mem::transmute::<&mut egui::Ui, &'static mut egui::Ui>(ui),
|
||||||
CELL_UI.replace(std::mem::transmute::<
|
);
|
||||||
&mut egui::Ui,
|
bin.run_fn.unwrap()();
|
||||||
&'static mut egui::Ui,
|
CELL_UI.take();
|
||||||
>(ui))
|
},
|
||||||
};
|
|
||||||
let result = unsafe { bin.run_fn.unwrap()() };
|
|
||||||
unsafe { CELL_UI.take() };
|
|
||||||
result
|
|
||||||
};
|
|
||||||
ui.label(format!("{}", result));
|
|
||||||
}
|
|
||||||
Err(msg) => {
|
Err(msg) => {
|
||||||
if !msg.is_empty() {
|
if !msg.is_empty() {
|
||||||
ui.colored_label(egui::Color32::from_rgb(255, 0, 0), msg);
|
ui.colored_label(egui::Color32::from_rgb(255, 0, 0), msg);
|
||||||
|
|
Loading…
Reference in New Issue