Scanning on Demand 16
This commit is contained in:
parent
aba643a88e
commit
8fb449825d
6 changed files with 209 additions and 32 deletions
|
|
@ -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");
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue