Scanning on Demand 16

This commit is contained in:
nazrin 2025-06-03 22:57:02 +00:00
parent aba643a88e
commit 8fb449825d
6 changed files with 209 additions and 32 deletions

View file

@ -1,38 +1,46 @@
module clox.main;
import std.stdio;
import std.file;
import clox.chunk;
import clox.dbg;
import clox.vm;
int main(string[] argv){
Chunk chunk;
extern(C) int isatty(int);
ubyte constant = chunk.addConstant(1.2);
chunk.write(OpCode.Constant);
chunk.write(constant);
constant = chunk.addConstant(3.4);
chunk.write(OpCode.Constant);
chunk.write(constant);
chunk.write(OpCode.Add);
constant = chunk.addConstant(5.6);
chunk.write(OpCode.Constant);
chunk.write(constant);
chunk.write(OpCode.Divide);
chunk.write(OpCode.Negate);
chunk.write(OpCode.Return);
VM vm = VM(0);
vm.interpret(&chunk);
return 0;
struct Lox{
VM vm;
this(int _){
vm = VM(0);
}
int runFile(string path){
string source = path.readText();
VM.InterpretResult result = vm.interpret(source);
final switch(result){
case VM.InterpretResult.CompileError: return 65;
case VM.InterpretResult.RuntimeError: return 70;
case VM.InterpretResult.Ok: return 0;
}
}
int runPrompt(){
while(true){
write("> ");
string line = stdin.readln();
if(!line){
writeln();
return 0;
}
vm.interpret(line);
}
}
}
int main(string[] argv){
Lox lox = Lox(0);
if(isatty(stdin.fileno))
return lox.runPrompt();
else
return lox.runFile("/dev/stdin");
}