fix some function stuff

This commit is contained in:
Robin Bärtschi 2025-03-03 14:36:25 +01:00
parent 6425cd3b55
commit 45dad474e0
8 changed files with 44 additions and 14 deletions

View File

@ -47,7 +47,7 @@ func (sp *SourceProgram) Build(backend asm.Backend, emitAsmOnly bool, toPrint To
id := 0
addRootNode := func(task task) int {
l.Debugf("registering root task %d", id)
l.Debugf("registering root task %d %q", id, task.Name())
node := &node{task: task}
nodes[id] = node
rootNodes = append(rootNodes, id)
@ -56,7 +56,7 @@ func (sp *SourceProgram) Build(backend asm.Backend, emitAsmOnly bool, toPrint To
}
addNode := func(task task, deps ...int) int {
l.Debugf("registering task %d", id)
l.Debugf("registering task %d %q", id, task.Name())
if len(deps) <= 0 {
panic("node without dep is useless")
}

View File

@ -260,8 +260,8 @@ func runTasks(nodes map[int]*node, rootNodes []int, l *utils.Logger) error {
if done[id] != notStarted {
panic(fmt.Sprintf("tried starting task %d twice", id))
}
l.Debugf("executing task %d", id)
node := nodes[id]
l.Debugf("executing task %d %q", id, node.task.Name())
output[id] = &strings.Builder{}
go node.task.Run(id, output[id], doneChan)
running = append(running, id)
@ -299,7 +299,7 @@ func runTasks(nodes map[int]*node, rootNodes []int, l *utils.Logger) error {
for !allFinished {
select {
case result := <-doneChan:
l.Debugf("task %d is done with err: %v", result.Id, result.Err)
l.Debugf("task %d %q is done with err: %v", result.Id, nodes[result.Id].task.Name(), result.Err)
for i, id := range running {
if id == result.Id {
running = slices.Delete(running, i, i+1)

18
design.md Normal file
View File

@ -0,0 +1,18 @@
# Designs
Playground for language design dessisions
## Function Calls
```tt
fn hi(hello: i32) = {
3
};
fn main() = {
hi!;
hi();
hi;
};
```

View File

@ -3,9 +3,8 @@
## Syntax
```tt
// Return type is i64
fn main() = {
i : = 3;
i := 3;
i
};
```

View File

@ -192,6 +192,9 @@ func (p *Parser) parseArgumentList() ([]ast.Argument, bool) {
for p.peekTokenIs(token.Ident) {
p.nextToken()
name := p.curToken.Literal
if ok, _ := p.expectPeek(token.Colon); !ok {
return args, false
}
p.nextToken()
t, ok := p.parseType()

20
test.tt
View File

@ -1,13 +1,17 @@
fn main() = {
hi := 4;
i := 5;
if hi == 4 {
test2 := 3;
hi = 0
if i == 5 {
0
} else {
1
}
else {
hi = 1
};
};
fn test2() = {};
fn test2(hello: i32,) = {
hello
};
fn test2(hello: i32,) = {
hello
};

View File

@ -1,3 +1,4 @@
- [ ] Fix inconsensity in asm, change all structs to pointer
- [ ] Fix inconsensity in Tests
- [ ] Find a better way todo tests, like to generate a test case
- [ ] Add packages

View File

@ -73,6 +73,11 @@ func VarResolve(p *ast.Program) (map[string]Scope, error) {
for _, d := range p.Declarations {
switch d := d.(type) {
case *ast.FunctionDeclaration:
_, ok := functionToScope[d.Name]
if ok {
return functionToScope, errorf(d.Token, "duplicate function name %q", d.Name)
}
s := Scope{Variables: make(map[string]Var)}
for _, arg := range d.Args {
s.SetUniq(arg.Name)