 	
 	func run(_ source: String, get varName: String) throws -> Double {
 		
-		let lexer = Lexer(input: source)
-		let tokens = lexer.tokenize()
-		
-		let parser = Parser(tokens: tokens)
-		let ast = try parser.parse()
-		
-		let bytecode = try compiler.compile(ast)
-		
+		let stdLib = try StdLib().stdLibCode()
+		
+		guard let compiledStdLib = compileLionessSourceCode(stdLib) else {
+			throw RunnerError.stdlibFailed
+		}
+		
+		guard let compiledSource = compileLionessSourceCode(source) else {
+			throw RunnerError.runFailed
+		}
+
+		let bytecode = compiledStdLib + compiledSource
+		
+		let interpreter = try BytecodeInterpreter(bytecode: bytecode)
+		try interpreter.interpret()
+	
 		guard let reg = compiler.getCompiledRegister(for: varName) else {
 			throw RunnerError.registerNotFound
 		}
 		
-		let interpreter = try BytecodeInterpreter(bytecode: bytecode)
-		try interpreter.interpret()
-	
 		do {
 			return try interpreter.getRegValue(for: reg)
 		} catch {


public enum RunnerError: Error {
	case registerNotFound
}

/// Runs through full pipeline, from lexer to interpreter
public class Runner {
	
	fileprivate var logDebug: Bool
	
	fileprivate var source: String?
	

		}
		
		guard let compiledSource = compileLionessSourceCode(source) else {
			throw RunnerError.runFailed
		}

		var fullBytecode = compiledStdLib
