feat(tvix/eval): implement string concatenation
Change-Id: If61066e59232b2bad42b5cb5f0f2d9b9c416be8b Reviewed-on: https://cl.tvl.fyi/c/depot/+/6137 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org>
This commit is contained in:
		
							parent
							
								
									322ce36cea
								
							
						
					
					
						commit
						fb3d024d75
					
				
					 6 changed files with 23 additions and 1 deletions
				
			
		|  | @ -0,0 +1 @@ | |||
| "hello world" | ||||
|  | @ -0,0 +1 @@ | |||
| "hello " + "world" | ||||
|  | @ -0,0 +1 @@ | |||
| "hello world" | ||||
|  | @ -0,0 +1 @@ | |||
| "hello ${"world"}" | ||||
|  | @ -63,6 +63,12 @@ impl NixString { | |||
|             Cow::Owned(s) => Cow::Owned(format!("\"{}\"", s)), | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     pub fn concat(&self, other: &Self) -> Self { | ||||
|         let mut s = self.as_str().to_owned(); | ||||
|         s.push_str(other.as_str()); | ||||
|         NixString::Heap(s) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| fn nix_escape_char(ch: char) -> Option<&'static str> { | ||||
|  |  | |||
|  | @ -67,7 +67,19 @@ impl VM { | |||
|                     self.push(c); | ||||
|                 } | ||||
| 
 | ||||
|                 OpCode::OpAdd => arithmetic_op!(self, +), | ||||
|                 OpCode::OpAdd => { | ||||
|                     let b = self.pop(); | ||||
|                     let a = self.pop(); | ||||
| 
 | ||||
|                     let result = if let (Value::String(s1), Value::String(s2)) = (&a, &b) { | ||||
|                         Value::String(s1.concat(s2)) | ||||
|                     } else { | ||||
|                         arithmetic_op!(b, a, +) | ||||
|                     }; | ||||
| 
 | ||||
|                     self.push(result) | ||||
|                 } | ||||
| 
 | ||||
|                 OpCode::OpSub => arithmetic_op!(self, -), | ||||
|                 OpCode::OpMul => arithmetic_op!(self, *), | ||||
|                 OpCode::OpDiv => arithmetic_op!(self, /), | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue