Added server example

This commit is contained in:
2025-02-06 12:49:17 +01:00
parent d4f9071ee4
commit f36b1f6c7c
5 changed files with 71 additions and 7 deletions

View File

@ -5,6 +5,7 @@ import (
"git.akyoto.dev/cli/q/src/errors"
"git.akyoto.dev/cli/q/src/expression"
"git.akyoto.dev/cli/q/src/token"
"git.akyoto.dev/cli/q/src/types"
"git.akyoto.dev/cli/q/src/x86"
)
@ -94,6 +95,10 @@ func (f *Function) CompileCall(root *expression.Expression) (*Function, error) {
}
if !types.Is(typ, fn.Input[i].Type) {
if parameters[i].Token.Kind == token.Number && parameters[i].Token.Text(f.File.Bytes) == "0" {
continue
}
return nil, errors.New(&errors.TypeMismatch{
Encountered: typ.Name(),
Expected: fn.Input[i].Type.Name(),

View File

@ -4,7 +4,6 @@ import (
"git.akyoto.dev/cli/q/src/asm"
"git.akyoto.dev/cli/q/src/errors"
"git.akyoto.dev/cli/q/src/expression"
"git.akyoto.dev/cli/q/src/sizeof"
"git.akyoto.dev/cli/q/src/token"
"git.akyoto.dev/cli/q/src/types"
)
@ -37,11 +36,11 @@ func (f *Function) ExpressionToMemory(node *expression.Expression, memory asm.Me
return nil, err
}
size := byte(sizeof.Signed(int64(number)))
// size := byte(sizeof.Signed(int64(number)))
if size > memory.Length {
return nil, errors.New(&errors.NumberExceedsBounds{Number: number, ExpectedSize: memory.Length, Size: size}, f.File, node.Token.Position)
}
// if size > memory.Length {
// return nil, errors.New(&errors.NumberExceedsBounds{Number: number, ExpectedSize: memory.Length, Size: size}, f.File, node.Token.Position)
// }
f.MemoryNumber(asm.STORE, memory, number)
return types.Int, nil

View File

@ -35,7 +35,15 @@ func (s *Scanner) scanStruct(file *fs.File, tokens token.List, i int) (int, erro
fieldTypeName := tokens[i].Text(file.Bytes)
fieldType := types.Int
if fieldTypeName != "Int" {
switch fieldTypeName {
case "Int", "Int64":
case "Int32":
fieldType = types.Int32
case "Int16":
fieldType = types.Int16
case "Int8":
fieldType = types.Int8
default:
panic("not implemented")
}