hex literals
This commit is contained in:
@@ -2,10 +2,10 @@
|
|||||||
|
|
||||||
A very cool language
|
A very cool language
|
||||||
|
|
||||||
## Huh?
|
## Features
|
||||||
* Clean indentation-based syntax
|
* Clean indentation-based syntax
|
||||||
* Compiles to x86_64 Assembly
|
* Compiles to x86_64 Assembly
|
||||||
* Almost works
|
* Sometimes works
|
||||||
* Has the pipe operator
|
* Has the pipe operator
|
||||||
|
|
||||||
## Syntax
|
## Syntax
|
||||||
|
|||||||
@@ -4,17 +4,39 @@ func main[] : I64
|
|||||||
let rl: Ptr = c.dlopen("libraylib.so", 2)
|
let rl: Ptr = c.dlopen("libraylib.so", 2)
|
||||||
|
|
||||||
let rl.InitWindow: Ptr = c.dlsym(rl, "InitWindow")
|
let rl.InitWindow: Ptr = c.dlsym(rl, "InitWindow")
|
||||||
|
let rl.SetTargetFPS: Ptr = c.dlsym(rl, "SetTargetFPS")
|
||||||
let rl.WindowShouldClose: Ptr = c.dlsym(rl, "WindowShouldClose")
|
let rl.WindowShouldClose: Ptr = c.dlsym(rl, "WindowShouldClose")
|
||||||
let rl.BeginDrawing: Ptr = c.dlsym(rl, "BeginDrawing")
|
let rl.BeginDrawing: Ptr = c.dlsym(rl, "BeginDrawing")
|
||||||
let rl.EndDrawing: Ptr = c.dlsym(rl, "EndDrawing")
|
let rl.EndDrawing: Ptr = c.dlsym(rl, "EndDrawing")
|
||||||
let rl.ClearBackground: Ptr = c.dlsym(rl, "ClearBackground")
|
let rl.ClearBackground: Ptr = c.dlsym(rl, "ClearBackground")
|
||||||
let rl.CloseWindow: Ptr = c.dlsym(rl, "CloseWindow")
|
let rl.CloseWindow: Ptr = c.dlsym(rl, "CloseWindow")
|
||||||
|
let rl.DrawRectangle: Ptr = c.dlsym(rl, "DrawRectangle")
|
||||||
|
let rl.IsKeyDown: Ptr = c.dlsym(rl, "IsKeyDown")
|
||||||
|
|
||||||
|
let rl.KEY_W: I64 = 87
|
||||||
|
let rl.KEY_S: I64 = 83
|
||||||
|
let rl.KEY_A: I64 = 65
|
||||||
|
let rl.KEY_D: I64 = 68
|
||||||
|
|
||||||
|
let x: I64 = 200
|
||||||
|
let y: I64 = 200
|
||||||
|
|
||||||
rl.InitWindow(800, 600, "Hello, World!")
|
rl.InitWindow(800, 600, "Hello, World!")
|
||||||
|
rl.SetTargetFPS(60)
|
||||||
|
|
||||||
while !rl.WindowShouldClose()
|
while !rl.WindowShouldClose()
|
||||||
|
if rl.IsKeyDown(rl.KEY_W) & 255
|
||||||
|
y = y - 10
|
||||||
|
if rl.IsKeyDown(rl.KEY_S) & 255
|
||||||
|
y = y + 10
|
||||||
|
if rl.IsKeyDown(rl.KEY_A) & 255
|
||||||
|
x = x - 10
|
||||||
|
if rl.IsKeyDown(rl.KEY_D) & 255
|
||||||
|
x = x + 10
|
||||||
|
|
||||||
rl.BeginDrawing()
|
rl.BeginDrawing()
|
||||||
rl.ClearBackground(4278190335) // 0xff0000ff
|
rl.ClearBackground(0xffffffff)
|
||||||
|
rl.DrawRectangle(x, y, 100, 100, 0xff0000ff)
|
||||||
rl.EndDrawing()
|
rl.EndDrawing()
|
||||||
|
|
||||||
rl.CloseWindow()
|
rl.CloseWindow()
|
||||||
@@ -232,7 +232,7 @@ impl Tokenizer {
|
|||||||
self.advance();
|
self.advance();
|
||||||
self.add_token(TokenType::String);
|
self.add_token(TokenType::String);
|
||||||
}
|
}
|
||||||
' ' | '\t' | '\r' => {}
|
' ' | '\r' => {}
|
||||||
'\n' => {
|
'\n' => {
|
||||||
self.loc.line += 1;
|
self.loc.line += 1;
|
||||||
self.loc.column = 1;
|
self.loc.column = 1;
|
||||||
@@ -294,12 +294,17 @@ impl Tokenizer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn scan_number(&mut self) {
|
fn scan_number(&mut self) {
|
||||||
|
if self.match_char('x') {
|
||||||
|
while self.peek().is_ascii_hexdigit() {
|
||||||
|
self.advance();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
while self.peek().is_ascii_digit() {
|
while self.peek().is_ascii_digit() {
|
||||||
self.advance();
|
self.advance();
|
||||||
}
|
}
|
||||||
|
|
||||||
if self.peek() == '.'
|
if self.peek() == '.'
|
||||||
&& (self.current + 1 >= self.source.len())
|
&& self.current + 1 < self.source.len()
|
||||||
&& self.source[self.current + 1].is_ascii_digit()
|
&& self.source[self.current + 1].is_ascii_digit()
|
||||||
{
|
{
|
||||||
self.advance();
|
self.advance();
|
||||||
@@ -307,16 +312,13 @@ impl Tokenizer {
|
|||||||
self.advance();
|
self.advance();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self.add_token(TokenType::Number);
|
self.add_token(TokenType::Number);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn scan_identifier(&mut self) {
|
fn scan_identifier(&mut self) {
|
||||||
while self.peek().is_alphanumeric()
|
while self.peek().is_alphanumeric() || self.peek() == '_' || self.peek() == '.' {
|
||||||
|| self.peek() == '_'
|
|
||||||
|| self.peek() == '.'
|
|
||||||
|| self.peek() == '!'
|
|
||||||
{
|
|
||||||
self.advance();
|
self.advance();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -343,6 +345,7 @@ impl Tokenizer {
|
|||||||
false
|
false
|
||||||
} else {
|
} else {
|
||||||
self.current += 1;
|
self.current += 1;
|
||||||
|
self.loc.column += 1;
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user