From 9d909a0b8ad55b00c720f01827abd3a622b3cbb4 Mon Sep 17 00:00:00 2001 From: Marvin Blum Date: Wed, 6 Jan 2016 21:43:17 +0100 Subject: [PATCH] Finished loading type file. --- ToDo.md | 1 + src/types/loader.go | 25 +++++++++++++++++-------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/ToDo.md b/ToDo.md index 2c0963e..e9acb4c 100644 --- a/ToDo.md +++ b/ToDo.md @@ -14,6 +14,7 @@ * ~~better error reporting~~ - ~~recover panic~~ - ~~line, column~~ +* type check for functions ## Special cases diff --git a/src/types/loader.go b/src/types/loader.go index f608d41..09732f5 100644 --- a/src/types/loader.go +++ b/src/types/loader.go @@ -48,6 +48,7 @@ func LoadTypes(path string) error { } data := strings.Replace(win_new_line, unix_new_line, string(content), -1) // make this work on windows and unix + functions = make([]FunctionType, 0) parseTypes(data) return nil @@ -73,29 +74,37 @@ func parseTypes(content string) { func parseNullFunction(line string) { parts := getParts(line) - - for _, part := range parts { - - } + functions = append(functions, FunctionType{parts[0], NULL, 0}) } func parseUnaryFunction(line string) { parts := getParts(line) - for _, part := range parts { - + if len(parts) < 2 { + return } + + args := getArgs(parts[1]) + functions = append(functions, FunctionType{parts[0], UNARY, len(args)}) } func parseBinaryFunction(line string) { parts := getParts(line) - for _, part := range parts { - + if len(parts) < 3 { + return } + + argsLeft := getArgs(parts[0]) + argsRight := getArgs(parts[2]) + functions = append(functions, FunctionType{parts[1], BINARY, len(argsLeft) + len(argsRight)}) } func getParts(line string) []string { line = line[2:] return strings.Split(line, " ") } + +func getArgs(part string) []string { + return strings.Split(part, ",") +}