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
|
id := 0
|
||||||
|
|
||||||
addRootNode := func(task task) int {
|
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}
|
node := &node{task: task}
|
||||||
nodes[id] = node
|
nodes[id] = node
|
||||||
rootNodes = append(rootNodes, id)
|
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 {
|
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 {
|
if len(deps) <= 0 {
|
||||||
panic("node without dep is useless")
|
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 {
|
if done[id] != notStarted {
|
||||||
panic(fmt.Sprintf("tried starting task %d twice", id))
|
panic(fmt.Sprintf("tried starting task %d twice", id))
|
||||||
}
|
}
|
||||||
l.Debugf("executing task %d", id)
|
|
||||||
node := nodes[id]
|
node := nodes[id]
|
||||||
|
l.Debugf("executing task %d %q", id, node.task.Name())
|
||||||
output[id] = &strings.Builder{}
|
output[id] = &strings.Builder{}
|
||||||
go node.task.Run(id, output[id], doneChan)
|
go node.task.Run(id, output[id], doneChan)
|
||||||
running = append(running, id)
|
running = append(running, id)
|
||||||
@ -299,7 +299,7 @@ func runTasks(nodes map[int]*node, rootNodes []int, l *utils.Logger) error {
|
|||||||
for !allFinished {
|
for !allFinished {
|
||||||
select {
|
select {
|
||||||
case result := <-doneChan:
|
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 {
|
for i, id := range running {
|
||||||
if id == result.Id {
|
if id == result.Id {
|
||||||
running = slices.Delete(running, i, i+1)
|
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
|
## Syntax
|
||||||
|
|
||||||
```tt
|
```tt
|
||||||
// Return type is i64
|
|
||||||
fn main() = {
|
fn main() = {
|
||||||
i : = 3;
|
i := 3;
|
||||||
i
|
i
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
@ -192,6 +192,9 @@ func (p *Parser) parseArgumentList() ([]ast.Argument, bool) {
|
|||||||
for p.peekTokenIs(token.Ident) {
|
for p.peekTokenIs(token.Ident) {
|
||||||
p.nextToken()
|
p.nextToken()
|
||||||
name := p.curToken.Literal
|
name := p.curToken.Literal
|
||||||
|
if ok, _ := p.expectPeek(token.Colon); !ok {
|
||||||
|
return args, false
|
||||||
|
}
|
||||||
p.nextToken()
|
p.nextToken()
|
||||||
t, ok := p.parseType()
|
t, ok := p.parseType()
|
||||||
|
|
||||||
|
20
test.tt
20
test.tt
@ -1,13 +1,17 @@
|
|||||||
fn main() = {
|
fn main() = {
|
||||||
hi := 4;
|
i := 5;
|
||||||
|
|
||||||
if hi == 4 {
|
if i == 5 {
|
||||||
test2 := 3;
|
0
|
||||||
hi = 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 asm, change all structs to pointer
|
||||||
- [ ] Fix inconsensity in Tests
|
- [ ] Fix inconsensity in Tests
|
||||||
- [ ] Find a better way todo tests, like to generate a test case
|
- [ ] 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 {
|
for _, d := range p.Declarations {
|
||||||
switch d := d.(type) {
|
switch d := d.(type) {
|
||||||
case *ast.FunctionDeclaration:
|
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)}
|
s := Scope{Variables: make(map[string]Var)}
|
||||||
for _, arg := range d.Args {
|
for _, arg := range d.Args {
|
||||||
s.SetUniq(arg.Name)
|
s.SetUniq(arg.Name)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user