add SlashEqual operator
This commit is contained in:
parent
eb7a485206
commit
e0a60ddc2c
4 changed files with 18 additions and 0 deletions
|
@ -60,6 +60,7 @@ fn main(a int) int {
|
||||||
str.len += 1
|
str.len += 1
|
||||||
str.len -= 1
|
str.len -= 1
|
||||||
str.len *= 1
|
str.len *= 1
|
||||||
|
str.len /= 1
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (v Typ) voidfunc() {}
|
fn (v Typ) voidfunc() {}
|
||||||
|
|
|
@ -703,6 +703,7 @@ pub const Parser = struct {
|
||||||
|
|
||||||
if (self.compareAnyOf(&[_]TokenType{
|
if (self.compareAnyOf(&[_]TokenType{
|
||||||
.ColonEqual, .Equal, .PlusEqual, .MinusEqual, .StarEqual,
|
.ColonEqual, .Equal, .PlusEqual, .MinusEqual, .StarEqual,
|
||||||
|
.SlashEqual,
|
||||||
})) {
|
})) {
|
||||||
return try self.finishAssignment(expr, mutable);
|
return try self.finishAssignment(expr, mutable);
|
||||||
}
|
}
|
||||||
|
@ -725,15 +726,27 @@ pub const Parser = struct {
|
||||||
.PlusEqual => .Plus,
|
.PlusEqual => .Plus,
|
||||||
.MinusEqual => .Minus,
|
.MinusEqual => .Minus,
|
||||||
.StarEqual => .Star,
|
.StarEqual => .Star,
|
||||||
|
.SlashEqual => .Slash,
|
||||||
|
|
||||||
else => unreachable,
|
else => unreachable,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// we create new_lexeme so that
|
||||||
|
// the AST printer properly prints
|
||||||
|
// x += 1
|
||||||
|
// as
|
||||||
|
// (set x (+ x 1))
|
||||||
|
// and not
|
||||||
|
// (set x (+= x 1))
|
||||||
const new_lexeme: []const u8 = switch (op.ttype) {
|
const new_lexeme: []const u8 = switch (op.ttype) {
|
||||||
.ColonEqual => ":=",
|
.ColonEqual => ":=",
|
||||||
.Equal => "=",
|
.Equal => "=",
|
||||||
|
|
||||||
.PlusEqual => "+",
|
.PlusEqual => "+",
|
||||||
.MinusEqual => "-",
|
.MinusEqual => "-",
|
||||||
.StarEqual => "*",
|
.StarEqual => "*",
|
||||||
|
.SlashEqual => "/",
|
||||||
|
|
||||||
else => unreachable,
|
else => unreachable,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -315,7 +315,10 @@ pub const Scanner = struct {
|
||||||
|
|
||||||
'/' => blk: {
|
'/' => blk: {
|
||||||
var next = self.peekNext();
|
var next = self.peekNext();
|
||||||
|
|
||||||
switch (next) {
|
switch (next) {
|
||||||
|
'=' => return self.makeToken(.SlashEqual),
|
||||||
|
|
||||||
'/' => blk2: {
|
'/' => blk2: {
|
||||||
while (self.peek() != '\n' and !self.isAtEnd()) {
|
while (self.peek() != '\n' and !self.isAtEnd()) {
|
||||||
_ = self.advance();
|
_ = self.advance();
|
||||||
|
|
|
@ -31,6 +31,7 @@ pub const TokenType = enum {
|
||||||
MinusEqual,
|
MinusEqual,
|
||||||
ColonEqual,
|
ColonEqual,
|
||||||
StarEqual,
|
StarEqual,
|
||||||
|
SlashEqual,
|
||||||
|
|
||||||
// comparison ones
|
// comparison ones
|
||||||
EqualEqual,
|
EqualEqual,
|
||||||
|
|
Loading…
Reference in a new issue