mirror of
https://github.com/RoBaertschi/tt.git
synced 2025-04-15 21:43:30 +00:00
fix some function stuff
This commit is contained in:
parent
6425cd3b55
commit
45dad474e0
@ -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")
|
||||
}
|
||||
|
@ -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
18
design.md
Normal file
@ -0,0 +1,18 @@
|
||||
# Designs
|
||||
|
||||
Playground for language design dessisions
|
||||
|
||||
## Function Calls
|
||||
|
||||
```tt
|
||||
fn hi(hello: i32) = {
|
||||
3
|
||||
};
|
||||
|
||||
fn main() = {
|
||||
hi!;
|
||||
hi();
|
||||
hi;
|
||||
};
|
||||
|
||||
```
|
@ -3,9 +3,8 @@
|
||||
## Syntax
|
||||
|
||||
```tt
|
||||
// Return type is i64
|
||||
fn main() = {
|
||||
i : = 3;
|
||||
i := 3;
|
||||
i
|
||||
};
|
||||
```
|
||||
|
@ -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
20
test.tt
@ -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
|
||||
};
|
||||
|
1
todo.md
1
todo.md
@ -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
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user