Skip to content

Commit

Permalink
Refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
ryuichiueda committed Jan 11, 2025
1 parent ded296c commit c7101cc
Show file tree
Hide file tree
Showing 10 changed files with 31 additions and 24 deletions.
2 changes: 1 addition & 1 deletion src/child.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ pub fn wait_pipeline(core: &mut ShellCore, pids: Vec<Option<Pid>>,
show_time(core);
}
set_foreground(core);
let _ = core.db.set_layer_array("PIPESTATUS", pipestatus.iter().map(|e|e.to_string()).collect(), 0);
let _ = core.db.set_array("PIPESTATUS", pipestatus.iter().map(|e|e.to_string()).collect(), None);

if core.options.query("pipefail") {
pipestatus.retain(|e| *e != 0);
Expand Down
2 changes: 1 addition & 1 deletion src/core.rs
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ impl ShellCore {
let _ = self.db.set_param("MACHTYPE", &machtype);
let _ = self.db.set_param("HOSTTYPE", &t_arch);
let _ = self.db.set_param("OSTYPE", &t_os);
let _ = self.db.set_array("BASH_VERSINFO", versinfo);
let _ = self.db.set_array("BASH_VERSINFO", versinfo, None);
}

pub fn flip_exit_status(&mut self) {
Expand Down
3 changes: 3 additions & 0 deletions src/core/builtins/error
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
../../../test/test_builtins.bash
../../../test/test_builtins.bash
../../../test/test_builtins.bash
4 changes: 2 additions & 2 deletions src/core/builtins/parameter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ fn set_local_array(arg: &str, core: &mut ShellCore, layer: usize) -> Result<(),
let mut feeder = Feeder::new(arg);
if feeder.scanner_name(core) == feeder.len() { // name only
let name = feeder.consume(feeder.len());
return core.db.set_layer_array(&name, vec![], layer);
return core.db.set_array(&name, vec![], Some(layer));
}

let mut sub = match Substitution::parse(&mut feeder, core) {
Expand Down Expand Up @@ -111,7 +111,7 @@ pub fn declare(core: &mut ShellCore, args: &mut Vec<String>) -> i32 {
if ! utils::is_name(&name, core) {
return 1; //TODO: error message
}
if let Err(e) = core.db.set_array(&name, vec![]) {
if let Err(e) = core.db.set_array(&name, vec![], None) {
error::print(&e, core);
return 1;
}
Expand Down
18 changes: 8 additions & 10 deletions src/core/database.rs
Original file line number Diff line number Diff line change
Expand Up @@ -197,12 +197,6 @@ impl DataBase {
self.params[0].insert( key.to_string(), Box::new(SpecialData::from(f)) );
}

pub fn set_layer_array(&mut self, name: &str, v: Vec<String>, layer: usize) -> Result<(), String> {
self.write_check(name)?;
self.params[layer].insert( name.to_string(), Box::new(ArrayData::from(v)));
Ok(())
}

pub fn set_layer_assoc(&mut self, name: &str, layer: usize) -> Result<(), String> {
self.write_check(name)?;
self.params[layer].insert(name.to_string(), Box::new(AssocData::default()));
Expand All @@ -215,7 +209,7 @@ impl DataBase {
match self.params[layer].get_mut(name) {
Some(d) => d.set_as_array(&pos.to_string(), val),
None => {
self.set_layer_array(name, vec![], layer)?;
setter::array(self, name, vec![], layer)?;
self.set_layer_array_elem(name, val, layer, pos)
},
}
Expand All @@ -240,9 +234,13 @@ impl DataBase {
self.set_layer_assoc_elem(name, key, val, layer)
}

pub fn set_array(&mut self, name: &str, v: Vec<String>) -> Result<(), String> {
let layer = self.solve_layer(name);
self.set_layer_array(name, v, layer)
pub fn set_array(&mut self, name: &str, v: Vec<String>, layer: Option<usize>) -> Result<(), String> {
let layer = match layer {
Some(n) => n,
None => self.solve_layer(name),
};

setter::array(self, name, v, layer)
}

pub fn set_assoc(&mut self, name: &str) -> Result<(), String> {
Expand Down
10 changes: 8 additions & 2 deletions src/core/database/setter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@
//SPDXLicense-Identifier: BSD-3-Clause

use crate::core::DataBase;
use std::{env, process};
use crate::core::database::ArrayData;
use crate::utils::{random, clock};
use std::{env, process};
use super::getter;

pub fn initialize(data: &mut DataBase) {
Expand All @@ -23,7 +24,7 @@ pub fn initialize(data: &mut DataBase) {

getter::special_variable(data, "SECONDS");

data.set_array("FUNCNAME", vec![]).unwrap();
data.set_array("FUNCNAME", vec![], None).unwrap();
}

pub fn flag(db: &mut DataBase, name: &str, flag: char) {
Expand All @@ -35,3 +36,8 @@ pub fn flag(db: &mut DataBase, name: &str, flag: char) {
}
}

pub fn array(db: &mut DataBase, name: &str, v: Vec<String>, layer: usize) -> Result<(), String> {
db.write_check(name)?;
db.params[layer].insert( name.to_string(), Box::new(ArrayData::from(v)));
Ok(())
}
4 changes: 2 additions & 2 deletions src/elements/command/function_def.rs
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ impl FunctionDefinition {
core: &mut ShellCore) -> Option<Pid> {
let mut array = core.db.get_array_all("FUNCNAME");
array.insert(0, args[0].clone());
let _ = core.db.set_array("FUNCNAME", array);
let _ = core.db.set_array("FUNCNAME", array, None);

let len = core.db.position_parameters.len();
args[0] = core.db.position_parameters[len-1][0].clone();
Expand All @@ -76,7 +76,7 @@ impl FunctionDefinition {
//core.db.set_param("#", &number);
let mut array = core.db.get_array_all("FUNCNAME");
array.remove(0);
let _ = core.db.set_array("FUNCNAME", array);
let _ = core.db.set_array("FUNCNAME", array, None);
return pid;
}

Expand Down
4 changes: 2 additions & 2 deletions src/elements/substitution.rs
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ impl Substitution {
}

match (&self.evaluated_array, index) {
(Some(a), None) => core.db.set_layer_array(&self.name, a.clone(), layer),
(Some(a), None) => core.db.set_array(&self.name, a.clone(), Some(layer)),
_ => Err("evaluation error 2".to_string()),
}
}
Expand All @@ -99,7 +99,7 @@ impl Substitution {
}

match &self.evaluated_array {
Some(data) => core.db.set_layer_array(&self.name, data.to_vec(), layer),
Some(data) => core.db.set_array(&self.name, data.to_vec(), Some(layer)),
_ => Err("evaluation error 3".to_string()),
}
}
Expand Down
6 changes: 3 additions & 3 deletions src/feeder/terminal/completion.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ fn is_dir(s: &str, core: &mut ShellCore) -> bool {
impl Terminal {
pub fn completion(&mut self, core: &mut ShellCore, tab_num: usize) {
self.escape_at_completion = true;
let _ = core.db.set_array("COMPREPLY", vec![]);
let _ = core.db.set_array("COMPREPLY", vec![], None);
self.set_completion_info(core);

if ! Self::set_custom_compreply(core).is_ok()
Expand Down Expand Up @@ -121,7 +121,7 @@ impl Terminal {
}

let tmp: Vec<String> = list.iter().map(|p| p.replacen(&tilde_path, &tilde_prefix, 1)).collect();
core.db.set_array("COMPREPLY", tmp)
core.db.set_array("COMPREPLY", tmp, None)
}

fn make_default_compreply(&mut self, core: &mut ShellCore, args: &mut Vec<String>,
Expand Down Expand Up @@ -328,7 +328,7 @@ impl Terminal {

words_all = words_all[from..].to_vec();
words_left = words_left[from..].to_vec();
let _ = core.db.set_array("COMP_WORDS", words_all);
let _ = core.db.set_array("COMP_WORDS", words_all, None);

let mut num = words_left.len();
match left_string.chars().last() {
Expand Down
2 changes: 1 addition & 1 deletion test/ok
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@
./test_builtins.bash
./test_others.bash
./test_calculation.bash
./test_parameters.bash
./test_compound.bash
./test_parameters.bash
./test_job.bash

0 comments on commit c7101cc

Please sign in to comment.