1.15
(пропущена 1.14 чек коммент)
This commit is contained in:
		
							parent
							
								
									5accf66180
								
							
						
					
					
						commit
						4a5ef76889
					
				@ -8,6 +8,11 @@ fn find_labels(stack: &mut Stack) {
 | 
				
			|||||||
        let label = &stack.program[stack.program_counter as usize];
 | 
					        let label = &stack.program[stack.program_counter as usize];
 | 
				
			||||||
        stack.program_counter += 1;
 | 
					        stack.program_counter += 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /*
 | 
				
			||||||
 | 
					         * "Теперь трубой можно подменять значения в лейблах"
 | 
				
			||||||
 | 
					         ? но как это реализовать?
 | 
				
			||||||
 | 
					           Да и тем более, не понятно работает ли это вообще в lbruntime
 | 
				
			||||||
 | 
					        */
 | 
				
			||||||
        if !label.name.starts_with('@') {
 | 
					        if !label.name.starts_with('@') {
 | 
				
			||||||
            continue;
 | 
					            continue;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -32,8 +37,15 @@ fn find_prefix_operators(instruction: &mut Instruction, memory: &mut StackVec) {
 | 
				
			|||||||
    match instruction.name.chars().nth(0) {
 | 
					    match instruction.name.chars().nth(0) {
 | 
				
			||||||
        Some('|') => {
 | 
					        Some('|') => {
 | 
				
			||||||
            instruction.name = instruction.name.chars().skip(1).collect();
 | 
					            instruction.name = instruction.name.chars().skip(1).collect();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            instruction.data = memory.pop();
 | 
					            instruction.data = memory.pop();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        Some('/') => {
 | 
				
			||||||
 | 
					            instruction.name = instruction.name.chars().skip(1).collect();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            memory.push(instruction.data);
 | 
				
			||||||
 | 
					            instruction.data = 0;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        _ => {}
 | 
					        _ => {}
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -46,6 +58,12 @@ pub fn execute(stack: &mut Stack, mut origin_stack: Option<&mut Stack>, mod_name
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        find_prefix_operators(&mut instruction, &mut stack.memory);
 | 
					        find_prefix_operators(&mut instruction, &mut stack.memory);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if instruction.name.chars().nth(0) == Some('#')
 | 
				
			||||||
 | 
					            || instruction.name.chars().nth(0) == Some('$')
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            instruction.name = instruction.name.chars().skip(1).collect();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if instruction.name.starts_with('@') {
 | 
					        if instruction.name.starts_with('@') {
 | 
				
			||||||
            continue;
 | 
					            continue;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -120,22 +138,20 @@ pub fn execute(stack: &mut Stack, mut origin_stack: Option<&mut Stack>, mod_name
 | 
				
			|||||||
            "getc" => instructions::io::getc(&mut stack.memory),
 | 
					            "getc" => instructions::io::getc(&mut stack.memory),
 | 
				
			||||||
            "scan" => instructions::io::scan(&mut stack.memory),
 | 
					            "scan" => instructions::io::scan(&mut stack.memory),
 | 
				
			||||||
            "meow" => instructions::io::meow(&mut stack.memory),
 | 
					            "meow" => instructions::io::meow(&mut stack.memory),
 | 
				
			||||||
            "#print" => instructions::io::print(instruction.arg.clone()),
 | 
					            "print" => instructions::io::print(instruction.arg.clone()),
 | 
				
			||||||
            "$print" => instructions::io::print(instruction.arg.clone()),
 | 
					            "println" => instructions::io::println(instruction.arg.clone()),
 | 
				
			||||||
            "#println" => instructions::io::println(instruction.arg.clone()),
 | 
					 | 
				
			||||||
            "$println" => instructions::io::println(instruction.arg.clone()),
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // Modules
 | 
					            // Modules
 | 
				
			||||||
            "args" => {
 | 
					            "args" => {
 | 
				
			||||||
                instructions::modules::args(&mut stack.memory, &mut origin_stack, instruction.data)
 | 
					                instructions::modules::args(&mut stack.memory, &mut origin_stack, instruction.data)
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            "#exec" => {
 | 
					            "exec" => {
 | 
				
			||||||
                let arg = instruction.arg.clone();
 | 
					                let arg = instruction.arg.clone();
 | 
				
			||||||
                instructions::modules::exec(stack, arg, mod_name.clone())
 | 
					                instructions::modules::exec(stack, arg, mod_name.clone())
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // Self-modifying
 | 
					            // Self-modifying
 | 
				
			||||||
            "#insert" => {
 | 
					            "insert" => {
 | 
				
			||||||
                let arg = instruction.arg.clone();
 | 
					                let arg = instruction.arg.clone();
 | 
				
			||||||
                let data = instruction.data.clone();
 | 
					                let data = instruction.data.clone();
 | 
				
			||||||
                instructions::self_modify::insert(&mut stack.program, arg, data)
 | 
					                instructions::self_modify::insert(&mut stack.program, arg, data)
 | 
				
			||||||
@ -145,8 +161,8 @@ pub fn execute(stack: &mut Stack, mut origin_stack: Option<&mut Stack>, mod_name
 | 
				
			|||||||
            "dump" => instructions::special::dump(&mut stack.memory),
 | 
					            "dump" => instructions::special::dump(&mut stack.memory),
 | 
				
			||||||
            "size" => instructions::special::size(&mut stack.memory),
 | 
					            "size" => instructions::special::size(&mut stack.memory),
 | 
				
			||||||
            "maxsize" => instructions::special::maxsize(&mut stack.memory),
 | 
					            "maxsize" => instructions::special::maxsize(&mut stack.memory),
 | 
				
			||||||
            "#expr" => instructions::special::expr(&mut stack.memory, instruction.arg.clone()),
 | 
					            "expr" => instructions::special::expr(&mut stack.memory, instruction.arg.clone()),
 | 
				
			||||||
            "nop" => continue,
 | 
					            "field" => continue,
 | 
				
			||||||
            "quit" => break,
 | 
					            "quit" => break,
 | 
				
			||||||
            "exit" => instructions::special::exit(instruction.data),
 | 
					            "exit" => instructions::special::exit(instruction.data),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user