generated from ElnuDev/rust-project
Add variable-to-variable assignment
This commit is contained in:
parent
01173d2f7d
commit
4bf6e7b820
2 changed files with 55 additions and 50 deletions
|
@ -6,7 +6,9 @@ if True:
|
||||||
"Bob will be here in [x] seconds."
|
"Bob will be here in [x] seconds."
|
||||||
if True:
|
if True:
|
||||||
x = "1"
|
x = "1"
|
||||||
let x = "4"
|
let y = "4"
|
||||||
|
y = "5"
|
||||||
|
x = y
|
||||||
"[x]"
|
"[x]"
|
||||||
"Bob will be here in [x] seconds."
|
"Bob will be here in [x] seconds."
|
||||||
"Bob will be here in [x] seconds."
|
"Bob will be here in [x] seconds."
|
||||||
|
|
|
@ -37,12 +37,20 @@ impl CommandContext {
|
||||||
assign_type,
|
assign_type,
|
||||||
variable,
|
variable,
|
||||||
value,
|
value,
|
||||||
} => match assign_type {
|
} => {
|
||||||
|
let value = if let Token::Keyword(keyword) = value {
|
||||||
|
self.context
|
||||||
|
.borrow()
|
||||||
|
.get_variables()
|
||||||
|
.get(keyword)
|
||||||
|
.unwrap_or_else(|| panic!("undefined variable `{keyword}`"))
|
||||||
|
.clone()
|
||||||
|
} else {
|
||||||
|
value.clone()
|
||||||
|
};
|
||||||
|
match assign_type {
|
||||||
Define => panic!("define command should not be executed at runtime!"),
|
Define => panic!("define command should not be executed at runtime!"),
|
||||||
GlobalAssign => {
|
GlobalAssign => {
|
||||||
if let Token::Keyword(_) = value {
|
|
||||||
todo!("assignment variable interpolation isn't implemented");
|
|
||||||
}
|
|
||||||
let root = self.context.borrow().get_root(&self.context);
|
let root = self.context.borrow().get_root(&self.context);
|
||||||
// Don't want to re-borrow if root is self
|
// Don't want to re-borrow if root is self
|
||||||
let root = if Rc::ptr_eq(&self.context, &root) {
|
let root = if Rc::ptr_eq(&self.context, &root) {
|
||||||
|
@ -58,9 +66,6 @@ impl CommandContext {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
Let => {
|
Let => {
|
||||||
if let Token::Keyword(_) = value {
|
|
||||||
todo!("assignment variable interpolation isn't implemented");
|
|
||||||
}
|
|
||||||
self.context
|
self.context
|
||||||
.borrow()
|
.borrow()
|
||||||
.variables
|
.variables
|
||||||
|
@ -69,9 +74,6 @@ impl CommandContext {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
Assign => {
|
Assign => {
|
||||||
if let Token::Keyword(_) = value {
|
|
||||||
todo!("assignment variable interpolation isn't implemented");
|
|
||||||
}
|
|
||||||
let mut block_option = Some(self.context.clone());
|
let mut block_option = Some(self.context.clone());
|
||||||
let mut modified = false;
|
let mut modified = false;
|
||||||
while let Some(block) = block_option {
|
while let Some(block) = block_option {
|
||||||
|
@ -94,6 +96,7 @@ impl CommandContext {
|
||||||
}
|
}
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
Eat { .. } => return None,
|
Eat { .. } => return None,
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue