Moved const and extern identifiers to the left

This commit is contained in:
2025-04-04 20:15:31 +02:00
parent 863fb7de5a
commit ba34637dc1
20 changed files with 69 additions and 86 deletions

View File

@ -1,7 +1,7 @@
const idtype {
idtype const {
pid 1
}
const state {
state const {
exited 0x4
}

View File

@ -1,4 +1,4 @@
extern user32 {
user32 extern {
MessageBoxA(window *any, text *byte, title *byte, flags uint) -> int
}

View File

@ -1,3 +1,13 @@
cp const {
utf8 65001
}
kernel32 extern {
SetConsoleCP(cp uint)
SetConsoleOutputCP(cp uint)
ExitProcess(code uint)
}
init() {
kernel32.SetConsoleCP(cp.utf8)
kernel32.SetConsoleOutputCP(cp.utf8)
@ -12,13 +22,3 @@ exit() {
crash() {
kernel32.ExitProcess(1)
}
const cp {
utf8 65001
}
extern kernel32 {
SetConsoleCP(cp uint)
SetConsoleOutputCP(cp uint)
ExitProcess(code uint)
}

View File

@ -1,5 +1,23 @@
import sys
std const {
in 0
out 1
err 2
}
in(buffer []byte) -> int {
return sys.read(std.in, buffer, len(buffer))
}
out(buffer []byte) -> int {
return sys.write(std.out, buffer, len(buffer))
}
error(buffer []byte) -> int {
return sys.write(std.err, buffer, len(buffer))
}
read(fd int, buffer []byte) -> int {
return sys.read(fd, buffer, len(buffer))
}

View File

@ -1,19 +0,0 @@
import sys
in(buffer []byte) -> int {
return sys.read(std.in, buffer, len(buffer))
}
out(buffer []byte) -> int {
return sys.write(std.out, buffer, len(buffer))
}
error(buffer []byte) -> int {
return sys.write(std.err, buffer, len(buffer))
}
const std {
in 0
out 1
err 2
}

View File

@ -1,4 +1,4 @@
extern kernel32 {
kernel32 extern {
VirtualAlloc(address int, size uint, flags uint32, protection uint32) -> *any
}

View File

@ -1,9 +1,9 @@
const prot {
read 0x1
prot const {
read 0x1
write 0x2
}
const map {
private 0x02
map const {
private 0x02
anonymous 0x20
}

View File

@ -1,9 +1,9 @@
const prot {
read 0x1
prot const {
read 0x1
write 0x2
}
const map {
private 0x02
map const {
private 0x02
anonymous 0x1000
}

View File

@ -1,9 +1,9 @@
const page {
page const {
readwrite 0x0004
}
const mem {
commit 0x1000
reserve 0x2000
mem const {
commit 0x1000
reserve 0x2000
decommit 0x4000
}

View File

@ -1,4 +1,4 @@
extern kernel32 {
kernel32 extern {
VirtualFree(address *any, size uint, type uint32) -> bool
}

View File

@ -10,7 +10,7 @@ write(fd int, buffer *byte, length int) -> int {
return length
}
extern kernel32 {
kernel32 extern {
GetStdHandle(handle int64) -> int64
ReadConsole(fd int64, buffer *byte, length uint32, written *uint32) -> bool
WriteConsoleA(fd int64, buffer *byte, length uint32, written *uint32) -> bool

View File

@ -1,6 +1,16 @@
import core
import sys
clone const {
vm 0x100
fs 0x200
files 0x400
sighand 0x800
parent 0x8000
thread 0x10000
io 0x80000000
}
create(func *any) -> int {
stack := sys.mmap(0, 4096, 0x1|0x2, 0x02|0x20|0x100)
stack += 4096 - 8
@ -9,13 +19,3 @@ create(func *any) -> int {
store(stack, 8, func)
return sys.clone(clone.vm|clone.fs|clone.files|clone.sighand|clone.parent|clone.thread|clone.io, stack, 0, 0, 0)
}
const clone {
vm 0x100
fs 0x200
files 0x400
sighand 0x800
parent 0x8000
thread 0x10000
io 0x80000000
}

View File

@ -1,7 +1,7 @@
kernel32 extern {
CreateThread(attributes int, stackSize int, address *any, parameter int) -> int
}
create(func *any) -> int {
return kernel32.CreateThread(0, 4096, func, 0)
}
extern kernel32 {
CreateThread(attributes int, stackSize int, address *any, parameter int) -> int
}

View File

@ -2,12 +2,10 @@ package errors
var (
EmptySwitch = &Base{"Empty switch"}
ExpectedConstName = &Base{"Expected a name for the const group"}
InvalidDefinition = &Base{"Invalid definition"}
ExpectedFunctionDefinition = &Base{"Expected function definition"}
ExpectedIfBeforeElse = &Base{"Expected an 'if' block before 'else'"}
ExpectedPackageName = &Base{"Expected package name"}
ExpectedDLLName = &Base{"Expected DLL name"}
InvalidNumber = &Base{"Invalid number"}
InvalidCondition = &Base{"Invalid condition"}
InvalidExpression = &Base{"Invalid expression"}

View File

@ -9,14 +9,8 @@ import (
// scanConst scans a block of constants.
func (s *Scanner) scanConst(file *fs.File, tokens token.List, i int) (int, error) {
i++
if tokens[i].Kind != token.Identifier {
return i, errors.New(errors.ExpectedConstName, file, tokens[i].Position)
}
groupName := tokens[i].Text(file.Bytes)
i++
i += 2
if tokens[i].Kind != token.BlockStart {
return i, errors.New(errors.MissingBlockStart, file, tokens[i].Position)

View File

@ -8,14 +8,8 @@ import (
// scanExtern scans a block of external function declarations.
func (s *Scanner) scanExtern(file *fs.File, tokens token.List, i int) (int, error) {
i++
if tokens[i].Kind != token.Identifier {
return i, errors.New(errors.ExpectedDLLName, file, tokens[i].Position)
}
dllName := tokens[i].Text(file.Bytes)
i++
i += 2
if tokens[i].Kind != token.BlockStart {
return i, errors.New(errors.MissingBlockStart, file, tokens[i].Position)

View File

@ -43,6 +43,10 @@ func (s *Scanner) scanFile(path string, pkg string) error {
i, err = s.scanFunction(file, tokens, i)
case token.BlockStart:
i, err = s.scanStruct(file, tokens, i)
case token.Extern:
i, err = s.scanExtern(file, tokens, i)
case token.Const:
i, err = s.scanConst(file, tokens, i)
case token.GroupEnd:
return errors.New(errors.MissingGroupStart, file, next.Position)
case token.BlockEnd:
@ -54,10 +58,6 @@ func (s *Scanner) scanFile(path string, pkg string) error {
}
case token.Import:
i, err = s.scanImport(file, tokens, i)
case token.Extern:
i, err = s.scanExtern(file, tokens, i)
case token.Const:
i, err = s.scanConst(file, tokens, i)
case token.EOF:
return nil
case token.Invalid:

View File

@ -1 +0,0 @@
extern {}

View File

@ -15,7 +15,6 @@ var errs = []struct {
ExpectedError error
}{
{"EmptySwitch.q", errors.EmptySwitch},
{"ExpectedDLLName.q", errors.ExpectedDLLName},
{"ExpectedFunctionDefinition.q", errors.ExpectedFunctionDefinition},
{"ExpectedIfBeforeElse.q", errors.ExpectedIfBeforeElse},
{"ExpectedIfBeforeElse2.q", errors.ExpectedIfBeforeElse},

View File

@ -1,6 +1,6 @@
const num {
one 1
two 2
num const {
one 1
two 2
three 3
}