diff --git a/README.md b/README.md index b8e6fc4..2168721 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,5 @@ # jorts -a compiler for the lox language from https://craftinginterpreters.com +an interpreter for the lox language from https://craftinginterpreters.com -this is a learning project. the implemtation is based heavily off the C part -of the book, but also the Java part for the scanner. - -## notes - - - jorts' lox bytecode is not compatible with any implementation. - -## how do? - -``` -zig build run -``` - -and play around with it +this is a learning project. diff --git a/src/chunk.zig b/src/chunk.zig index eb002d6..c32345e 100644 --- a/src/chunk.zig +++ b/src/chunk.zig @@ -18,8 +18,6 @@ const AllOpcodes = struct { pub Nil: u8 = 8, pub True: u8 = 9, pub False: u8 = 10, - - pub Not: u8 = 11, }; pub const OpCode = AllOpcodes{}; @@ -176,8 +174,6 @@ pub const Chunk = struct { return try simpleInstruction(stdout, "OP_TRUE", index); } else if (instruction == OpCode.False) { return try simpleInstruction(stdout, "OP_FALSE", index); - } else if (instruction == OpCode.Not) { - return try simpleInstruction(stdout, "OP_NOT", index); } else { try stdout.print("Unknown opcode: {}\n", instruction); return index + 1; diff --git a/src/compiler.zig b/src/compiler.zig index 5928b95..350e6ad 100644 --- a/src/compiler.zig +++ b/src/compiler.zig @@ -75,7 +75,7 @@ var rules = []ParseRule{ ParseRule{ .infix = Compiler.binary, .precedence = .Factor }, // as the token enum says, those are 1/2 char tokens. - ParseRule{ .prefix = Compiler.unary }, + ParseRule{}, // this is specifically for the != operator ParseRule{ .precedence = .Equality }, ParseRule{}, @@ -236,7 +236,6 @@ pub const Compiler = struct { switch (ttype) { .MINUS => try self.emitByte(OpCode.Negate), - .BANG => try self.emitByte(OpCode.Not), else => unreachable, } } diff --git a/src/vm.zig b/src/vm.zig index 5b89051..f1ce443 100644 --- a/src/vm.zig +++ b/src/vm.zig @@ -16,10 +16,6 @@ pub const InterpretResult = error{ RuntimeError, }; -fn isFalsey(val: value.Value) bool { - return val.vtype == .Nil or (val.vtype == .Bool and !val.as.Bool); -} - pub const VM = struct { chk: *Chunk = undefined, src: []const u8, @@ -174,9 +170,6 @@ pub const VM = struct { chunk.OpCode.Subtract => try self.doSub(), chunk.OpCode.Multiply => try self.doMul(), chunk.OpCode.Divide => try self.doDiv(), - chunk.OpCode.Not => blk: { - try self.push(values.BoolVal(isFalsey(self.pop()))); - }, chunk.OpCode.Negate => blk: { var val = self.peek(0); if (val.vtype != .Bool) {