From 1208bda68cdf0ed4d0afb844f338b721568d6be3 Mon Sep 17 00:00:00 2001 From: Marvin Blum Date: Sat, 14 Nov 2015 16:22:39 +0100 Subject: [PATCH 01/20] Issue #21. --- README.md | 12 ++++-------- src/parser/parser.go | 27 +++++++++++++++------------ src/parser/parser_test.go | 7 +++++++ test/parser_expression_array.asl | 1 + 4 files changed, 27 insertions(+), 20 deletions(-) create mode 100644 test/parser_expression_array.asl diff --git a/README.md b/README.md index 6248c8b..d2ee5b5 100644 --- a/README.md +++ b/README.md @@ -252,18 +252,14 @@ The following features are not implemented yet, but will be in 1.1.0 or a future * scopes * else if -* arrays within expressions (like someArray-[someEntity]) +* selector in expression scopes won't be supported, since they are a stupid concept and can be replaced by functions. -There is a simple workaround for arrays within expressions: + +Selectors in expressions do not work (yet): ``` -// want: ... forEach allCurators-[myCurator]; - -var myCuratorArray = [myCurator]; // or a more complex expression within array -foreach allCurators-myCuratorArray { - // ... -} +var x = ([1, 2, 3]-[1, 2])[0]; // should result in 3 ``` ## Contribute diff --git a/src/parser/parser.go b/src/parser/parser.go index 3e58b2a..52a85e8 100644 --- a/src/parser/parser.go +++ b/src/parser/parser.go @@ -70,34 +70,35 @@ func (c *Compiler) parseVar() { if c.accept("=") { c.next() c.appendOut(" = ", false) - - if c.accept("[") { - c.parseArray() - } else { - c.parseExpression(true) - } + c.parseExpression(true) } c.expect(";") c.appendOut(";", true) } -func (c *Compiler) parseArray() { +func (c *Compiler) parseArray(out bool) string { + output := "" c.expect("[") - c.appendOut("[", false) + output += "[" if !c.accept("]") { - c.parseExpression(true) + output += c.parseExpression(false) for c.accept(",") { c.next() - c.appendOut(",", false) - c.parseExpression(true) + output += ","+c.parseExpression(false) } } c.expect("]") - c.appendOut("]", false) + output += "]" + + if out { + c.appendOut(output, false) + } + + return output } func (c *Compiler) parseIf() { @@ -463,6 +464,8 @@ func (c *Compiler) parseIdentifier() string { name := c.get().Token c.next() output = "(" + c.parseFunctionCall(false, name) + ")" + } else if c.accept("[") { + output += c.parseArray(false) } else if c.seek("[") { output += "("+c.get().Token c.next() diff --git a/src/parser/parser_test.go b/src/parser/parser_test.go index 443fa44..20e2d3a 100644 --- a/src/parser/parser_test.go +++ b/src/parser/parser_test.go @@ -161,6 +161,13 @@ func TestParserPreprocessor(t *testing.T) { equal(t, got, want) } +func TestParserExpressionArray(t *testing.T) { + got := getCompiled(t, "test/parser_expression_array.asl") + want := "x = [1,2,3]-[2,3];\r\n" + + equal(t, got, want) +} + func getCompiled(t *testing.T, file string) string { code, err := ioutil.ReadFile(file) diff --git a/test/parser_expression_array.asl b/test/parser_expression_array.asl new file mode 100644 index 0000000..84e35fb --- /dev/null +++ b/test/parser_expression_array.asl @@ -0,0 +1 @@ +var x = [1, 2, 3]-[2, 3]; From 59f02f77826ff03ce65e66cae1e59a47ce1efb77 Mon Sep 17 00:00:00 2001 From: Marvin Blum Date: Sat, 14 Nov 2015 16:43:36 +0100 Subject: [PATCH 02/20] Issue #23. --- CHANGELOG.md | 5 +++++ src/main/asl.go | 2 +- src/parser/parser.go | 2 +- src/tokenizer/tokenizer.go | 28 +++++++++++++++++++++++++++- src/tokenizer/tokenizer_test.go | 12 +++++++++++- test/tokenizer_mask.asl | 2 ++ 6 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 test/tokenizer_mask.asl diff --git a/CHANGELOG.md b/CHANGELOG.md index 4a9a067..e201263 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +**1.1.1** + +* arrays can now be declared within expressions +* code keyword bug fix + **1.1.0** * changed syntax of foreach diff --git a/src/main/asl.go b/src/main/asl.go index 656a3c0..8523c84 100644 --- a/src/main/asl.go +++ b/src/main/asl.go @@ -101,7 +101,7 @@ func compile(path string) { continue } - token := tokenizer.Tokenize(code) + token := tokenizer.Tokenize(code, false) compiler := parser.Compiler{} sqf := compiler.Parse(token, pretty) diff --git a/src/parser/parser.go b/src/parser/parser.go index 52a85e8..2e9262d 100644 --- a/src/parser/parser.go +++ b/src/parser/parser.go @@ -314,7 +314,7 @@ func (c *Compiler) parseInlineCode() string { if len(code) > 2 { compiler := Compiler{} - output = "{"+compiler.Parse(tokenizer.Tokenize([]byte(code[1:len(code)-1])), false)+"}" + output = "{"+compiler.Parse(tokenizer.Tokenize([]byte(code[1:len(code)-1]), true), false)+"}" } c.expect(")") diff --git a/src/tokenizer/tokenizer.go b/src/tokenizer/tokenizer.go index eb11f00..cc0b557 100644 --- a/src/tokenizer/tokenizer.go +++ b/src/tokenizer/tokenizer.go @@ -58,7 +58,11 @@ var new_line = []byte{'\r', '\n'} // Tokenizes the given byte array into syntax tokens, // which can be parsed later. -func Tokenize(code []byte) []Token { +func Tokenize(code []byte, doStripSlashes bool) []Token { + if doStripSlashes { + code = stripSlashes(code); + } + code = removeComments(code) tokens := make([]Token, 0) token, mask, isstring, line, column := "", false, false, 0, 0 @@ -114,6 +118,28 @@ func Tokenize(code []byte) []Token { return tokens } +// Removes slashes from input code. +// This is used for the "code" keyword for correct strings in resulting code. +func stripSlashes(code []byte) []byte { + newcode := make([]byte, len(code)) + j, mask := 0, false + + for i := 0; i < len(code); i++ { + c := code[i] + + if c == '\\' && !mask { + mask = true + continue + } + + newcode[j] = code[i] + mask = false + j++ + } + + return newcode +} + // Removes all comments from input byte array. // Comments are single line comments, starting with // (two slashes), // multi line comments with /* ... */ (slash star, star slash). diff --git a/src/tokenizer/tokenizer_test.go b/src/tokenizer/tokenizer_test.go index ea50718..b1d3d25 100644 --- a/src/tokenizer/tokenizer_test.go +++ b/src/tokenizer/tokenizer_test.go @@ -94,6 +94,16 @@ func TestTokenizerPreprocessor(t *testing.T) { compareTokens(t, &got, &want) } +func TestTokenizerMask(t *testing.T) { + got := getTokens(t, "test/tokenizer_mask.asl") + //var y = code("var z = \"Hello \\"World\\"\";"); + want := []string{"var", "x", "=", "\"Hello \\\"World\\\"\"", ";", + "var", "y", "=", "code", "(", "\"var z = \\\"Hello \\\\\"World\\\\\"\\\";\"", ")", ";"} + + compareLength(t, &got, &want) + compareTokens(t, &got, &want) +} + func compareLength(t *testing.T, got *[]tokenizer.Token, want *[]string) { if len(*got) != len(*want) { t.Error("Length of tokens got and expected tokens not equal, was:") @@ -130,5 +140,5 @@ func getTokens(t *testing.T, file string) []tokenizer.Token { t.FailNow() } - return tokenizer.Tokenize(code) + return tokenizer.Tokenize(code, false) } diff --git a/test/tokenizer_mask.asl b/test/tokenizer_mask.asl new file mode 100644 index 0000000..c8fef9e --- /dev/null +++ b/test/tokenizer_mask.asl @@ -0,0 +1,2 @@ +var x = "Hello \"World\""; +var y = code("var z = \"Hello \\"World\\"\";"); From fa766cc78cac03797287b929239f09f5d31f7340 Mon Sep 17 00:00:00 2001 From: Marvin Blum Date: Sat, 14 Nov 2015 16:45:07 +0100 Subject: [PATCH 03/20] Updated README. --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index d2ee5b5..f0ed727 100644 --- a/README.md +++ b/README.md @@ -68,6 +68,9 @@ var one = array[0]; // accessing using a statement: var zwo = array[33/3-2]; + +// it is possble to use arrays in expressions: +var emptyArray = one-[0]; ``` ### Control structures From f1f564d89bcf7f8e0cf633f79ce498bd5336dbe1 Mon Sep 17 00:00:00 2001 From: Marvin Blum Date: Sat, 14 Nov 2015 16:48:24 +0100 Subject: [PATCH 04/20] Updated version. --- src/main/asl.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/asl.go b/src/main/asl.go index 8523c84..c1aa9f7 100644 --- a/src/main/asl.go +++ b/src/main/asl.go @@ -11,7 +11,7 @@ import ( ) const ( - version = "1.1.0" + version = "1.1.1" extension = ".asl" sqfextension = ".sqf" PathSeparator = string(os.PathSeparator) From d07611c3a5ce9d8e6bd4583ad2b54cadce2ee58b Mon Sep 17 00:00:00 2001 From: Marvin Blum Date: Thu, 26 Nov 2015 15:26:53 +0100 Subject: [PATCH 05/20] Fixed "switch" in keyword list. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f0ed727..bfa5c46 100644 --- a/README.md +++ b/README.md @@ -234,7 +234,7 @@ Keywords should not be used as identifiers. Here is a full list of all keywords | var | | if | | while | -| witch | +| switch | | for | | foreach | | func | From 69e684a2305334a2be37485464b6b3a782065fec Mon Sep 17 00:00:00 2001 From: Marvin Blum Date: Tue, 15 Dec 2015 23:19:41 +0100 Subject: [PATCH 06/20] go fmt. --- src/main/asl.go | 191 ++++++++++++++++---------------- src/parser/parser.go | 128 ++++++++++----------- src/parser/parserHelper.go | 18 +-- src/parser/parser_test.go | 8 +- src/tokenizer/tokenizer.go | 102 ++++++++--------- src/tokenizer/tokenizer_test.go | 6 +- 6 files changed, 227 insertions(+), 226 deletions(-) diff --git a/src/main/asl.go b/src/main/asl.go index c1aa9f7..f7748ef 100644 --- a/src/main/asl.go +++ b/src/main/asl.go @@ -1,34 +1,34 @@ package main import ( - "parser" - "tokenizer" "fmt" "io/ioutil" - "path/filepath" "os" + "parser" + "path/filepath" "strings" + "tokenizer" ) const ( - version = "1.1.1" - extension = ".asl" - sqfextension = ".sqf" - PathSeparator = string(os.PathSeparator) + version = "1.1.1" + extension = ".asl" + sqfextension = ".sqf" + PathSeparator = string(os.PathSeparator) ) type ASLFile struct { - in string - out string - newname string + in string + out string + newname string } var ( - recursive bool = false - pretty bool = false - exit bool = false - aslFiles []ASLFile - inDir string + recursive bool = false + pretty bool = false + exit bool = false + aslFiles []ASLFile + inDir string ) func usage() { @@ -42,109 +42,110 @@ func usage() { } func flags(flag string) bool { - flag = strings.ToLower(flag) - - if flag[0] == '-' { - if flag == "-v" { - fmt.Println("asl version "+version) - exit = true - } else if flag == "-r" { - recursive = true - } else if flag == "-pretty" { - pretty = true - } else if flag == "--help" { - usage() - exit = true - } - - return true - } - - return false + flag = strings.ToLower(flag) + + if flag[0] == '-' { + if flag == "-v" { + fmt.Println("asl version " + version) + exit = true + } else if flag == "-r" { + recursive = true + } else if flag == "-pretty" { + pretty = true + } else if flag == "--help" { + usage() + exit = true + } + + return true + } + + return false } func readAslFiles(path string) { - dir, err := ioutil.ReadDir(path) - - if err != nil { - fmt.Println("Error reading in directory!") - return - } - - for i := 0; i < len(dir); i++ { - name := dir[i].Name() - - if dir[i].IsDir() && recursive { - readAslFiles(filepath.FromSlash(path+PathSeparator+name)) - continue - } + dir, err := ioutil.ReadDir(path) - if !dir[i].IsDir() && strings.ToLower(filepath.Ext(name)) == extension { - in := filepath.FromSlash(path+PathSeparator+dir[i].Name()) - out := filepath.FromSlash("./"+path[len(inDir):len(path)]) - newname := name[:len(name)-len(filepath.Ext(name))] - - file := ASLFile{in, out, newname} - aslFiles = append(aslFiles, file) - } - } + if err != nil { + fmt.Println("Error reading in directory!") + return + } + + for i := 0; i < len(dir); i++ { + name := dir[i].Name() + + if dir[i].IsDir() && recursive { + readAslFiles(filepath.FromSlash(path + PathSeparator + name)) + continue + } + + if !dir[i].IsDir() && strings.ToLower(filepath.Ext(name)) == extension { + in := filepath.FromSlash(path + PathSeparator + dir[i].Name()) + out := filepath.FromSlash("./" + path[len(inDir):len(path)]) + newname := name[:len(name)-len(filepath.Ext(name))] + + file := ASLFile{in, out, newname} + aslFiles = append(aslFiles, file) + } + } } func compile(path string) { - for i := 0; i < len(aslFiles); i++ { - out := filepath.FromSlash(path+PathSeparator+aslFiles[i].out+PathSeparator+aslFiles[i].newname+sqfextension) - fmt.Println(aslFiles[i].in+" -> "+out) - code, err := ioutil.ReadFile(aslFiles[i].in) - - if err != nil { - fmt.Println("Error reading file: "+aslFiles[i].in) - continue - } - - token := tokenizer.Tokenize(code, false) - compiler := parser.Compiler{} - sqf := compiler.Parse(token, pretty) - - os.MkdirAll(filepath.FromSlash(path+PathSeparator+aslFiles[i].out), 0777) - err = ioutil.WriteFile(out, []byte(sqf), 0666) - - if err != nil { - fmt.Println("Error writing file: "+aslFiles[i].out) - fmt.Println(err) - } - } + for i := 0; i < len(aslFiles); i++ { + out := filepath.FromSlash(path + PathSeparator + aslFiles[i].out + PathSeparator + aslFiles[i].newname + sqfextension) + fmt.Println(aslFiles[i].in + " -> " + out) + code, err := ioutil.ReadFile(aslFiles[i].in) + + if err != nil { + fmt.Println("Error reading file: " + aslFiles[i].in) + continue + } + + token := tokenizer.Tokenize(code, false) + compiler := parser.Compiler{} + sqf := compiler.Parse(token, pretty) + + os.MkdirAll(filepath.FromSlash(path+PathSeparator+aslFiles[i].out), 0777) + err = ioutil.WriteFile(out, []byte(sqf), 0666) + + if err != nil { + fmt.Println("Error writing file: " + aslFiles[i].out) + fmt.Println(err) + } + } } func main() { args := os.Args - + // flags if len(args) < 2 { - usage() - return + usage() + return } - + var i int - for i = 1; i < len(args) && flags(args[i]); i++ {} - - if exit { - return + for i = 1; i < len(args) && flags(args[i]); i++ { } - + + if exit { + return + } + // in/out parameter out := "" - + if i < len(args) { - inDir = args[i] - i++ + inDir = args[i] + i++ } else { - return + return } - + if i < len(args) { - out = args[i] + out = args[i] } - + readAslFiles(inDir) compile(out) } diff --git a/src/parser/parser.go b/src/parser/parser.go index 2e9262d..e60706f 100644 --- a/src/parser/parser.go +++ b/src/parser/parser.go @@ -10,7 +10,7 @@ const new_line = "\r\n" // and writes SQF code into desired location. func (c *Compiler) Parse(token []tokenizer.Token, prettyPrinting bool) string { if !c.initParser(token, prettyPrinting) { - return "" + return "" } for c.tokenIndex < len(token) { @@ -21,9 +21,9 @@ func (c *Compiler) Parse(token []tokenizer.Token, prettyPrinting bool) string { } func (c *Compiler) parseBlock() { - if c.get().Preprocessor { - c.parsePreprocessor() - } else if c.accept("var") { + if c.get().Preprocessor { + c.parsePreprocessor() + } else if c.accept("var") { c.parseVar() } else if c.accept("if") { c.parseIf() @@ -42,9 +42,9 @@ func (c *Compiler) parseBlock() { } else if c.accept("try") { c.parseTryCatch() } else if c.accept("exitwith") { - c.parseExitWith() + c.parseExitWith() } else if c.accept("waituntil") { - c.parseWaitUntil() + c.parseWaitUntil() } else if c.accept("case") || c.accept("default") { return } else { @@ -57,9 +57,9 @@ func (c *Compiler) parseBlock() { } func (c *Compiler) parsePreprocessor() { - // we definitely want a new line before and after - c.appendOut(new_line+c.get().Token+new_line, false) - c.next() + // we definitely want a new line before and after + c.appendOut(new_line+c.get().Token+new_line, false) + c.next() } func (c *Compiler) parseVar() { @@ -78,7 +78,7 @@ func (c *Compiler) parseVar() { } func (c *Compiler) parseArray(out bool) string { - output := "" + output := "" c.expect("[") output += "[" @@ -87,17 +87,17 @@ func (c *Compiler) parseArray(out bool) string { for c.accept(",") { c.next() - output += ","+c.parseExpression(false) + output += "," + c.parseExpression(false) } } c.expect("]") output += "]" - + if out { - c.appendOut(output, false) + c.appendOut(output, false) } - + return output } @@ -231,20 +231,20 @@ func (c *Compiler) parseFunctionParameter() { if c.accept("{") { return } - + c.appendOut("params [", false) for !c.accept(")") { name := c.get().Token c.next() - + if c.accept("=") { - c.next() - value := c.get().Token - c.next() - c.appendOut("[\""+name+"\","+value+"]", false) + c.next() + value := c.get().Token + c.next() + c.appendOut("[\""+name+"\","+value+"]", false) } else { - c.appendOut("\""+name+"\"", false) + c.appendOut("\""+name+"\"", false) } if !c.accept(")") { @@ -252,7 +252,7 @@ func (c *Compiler) parseFunctionParameter() { c.appendOut(",", false) } } - + c.appendOut("];", true) } @@ -279,47 +279,47 @@ func (c *Compiler) parseTryCatch() { } func (c *Compiler) parseExitWith() { - c.expect("exitwith") - c.expect("{") - c.appendOut("if (true) exitWith {", true) - c.parseBlock() - c.expect("}") - c.appendOut("};", true) + c.expect("exitwith") + c.expect("{") + c.appendOut("if (true) exitWith {", true) + c.parseBlock() + c.expect("}") + c.appendOut("};", true) } func (c *Compiler) parseWaitUntil() { - c.expect("waituntil") - c.expect("(") - c.appendOut("waitUntil {", false) - c.parseExpression(true) - - if c.accept(";") { - c.next() - c.appendOut(";", false) - c.parseExpression(true) - } - - c.expect(")") - c.expect(";") - c.appendOut("};", true) + c.expect("waituntil") + c.expect("(") + c.appendOut("waitUntil {", false) + c.parseExpression(true) + + if c.accept(";") { + c.next() + c.appendOut(";", false) + c.parseExpression(true) + } + + c.expect(")") + c.expect(";") + c.appendOut("};", true) } func (c *Compiler) parseInlineCode() string { - c.expect("code") - c.expect("(") - - code := c.get().Token - c.next() - output := "{}" - - if len(code) > 2 { - compiler := Compiler{} - output = "{"+compiler.Parse(tokenizer.Tokenize([]byte(code[1:len(code)-1]), true), false)+"}" - } - - c.expect(")") - - return output + c.expect("code") + c.expect("(") + + code := c.get().Token + c.next() + output := "{}" + + if len(code) > 2 { + compiler := Compiler{} + output = "{" + compiler.Parse(tokenizer.Tokenize([]byte(code[1:len(code)-1]), true), false) + "}" + } + + c.expect(")") + + return output } // Everything that does not start with a keyword. @@ -459,19 +459,19 @@ func (c *Compiler) parseIdentifier() string { output := "" if c.accept("code") { - output += c.parseInlineCode() + output += c.parseInlineCode() } else if c.seek("(") && !c.accept("!") && !c.accept("-") { name := c.get().Token c.next() output = "(" + c.parseFunctionCall(false, name) + ")" } else if c.accept("[") { - output += c.parseArray(false) + output += c.parseArray(false) } else if c.seek("[") { - output += "("+c.get().Token - c.next() - c.expect("[") - output += " select ("+c.parseExpression(false)+"))" - c.expect("]") + output += "(" + c.get().Token + c.next() + c.expect("[") + output += " select (" + c.parseExpression(false) + "))" + c.expect("]") } else if c.accept("!") || c.accept("-") { output = c.get().Token c.next() diff --git a/src/parser/parserHelper.go b/src/parser/parserHelper.go index 298158b..5759226 100644 --- a/src/parser/parserHelper.go +++ b/src/parser/parserHelper.go @@ -1,16 +1,16 @@ package parser import ( - "strconv" - "tokenizer" + "strconv" + "tokenizer" ) type Compiler struct { - tokens []tokenizer.Token - tokenIndex int - out string - offset int - pretty bool + tokens []tokenizer.Token + tokenIndex int + out string + offset int + pretty bool } // Initilizes the parser. @@ -24,7 +24,7 @@ func (c *Compiler) initParser(token []tokenizer.Token, prettyPrinting bool) bool c.out = "" c.offset = 0 c.pretty = prettyPrinting - + return true } @@ -38,7 +38,7 @@ func (c *Compiler) accept(token string) bool { // Throws if current token does not match expected one. func (c *Compiler) expect(token string) { if !c.tokenEqual(token, c.get()) { - panic("Parse error, expected '" + token + "' but was '" + c.get().Token + "' in line "+strconv.Itoa(c.get().Line)+" at "+strconv.Itoa(c.get().Column)) + panic("Parse error, expected '" + token + "' but was '" + c.get().Token + "' in line " + strconv.Itoa(c.get().Line) + " at " + strconv.Itoa(c.get().Column)) } c.next() diff --git a/src/parser/parser_test.go b/src/parser/parser_test.go index 20e2d3a..43b6c87 100644 --- a/src/parser/parser_test.go +++ b/src/parser/parser_test.go @@ -1,10 +1,10 @@ package parser_test import ( - "tokenizer" - "parser" "io/ioutil" + "parser" "testing" + "tokenizer" ) func TestParserDeclaration(t *testing.T) { @@ -50,9 +50,9 @@ func TestParserForeach(t *testing.T) { } func TestParserSwitch(t *testing.T) { - got := getCompiled(t, "test/tokenizer_switch.asl") + got := getCompiled(t, "test/tokenizer_switch.asl") want := "switch (x) do {\r\ncase 1:\r\n{\r\nx = 1;\r\n};\r\ncase 2:\r\n{\r\nx = 2;\r\n};\r\ndefault:\r\n{\r\nx = 3;\r\n};\r\n};\r\n" - + equal(t, got, want) } diff --git a/src/tokenizer/tokenizer.go b/src/tokenizer/tokenizer.go index cc0b557..003b89f 100644 --- a/src/tokenizer/tokenizer.go +++ b/src/tokenizer/tokenizer.go @@ -5,10 +5,10 @@ import ( ) type Token struct { - Token string + Token string Preprocessor bool - Line int - Column int + Line int + Column int } var delimiter = []byte{ @@ -59,10 +59,10 @@ var new_line = []byte{'\r', '\n'} // Tokenizes the given byte array into syntax tokens, // which can be parsed later. func Tokenize(code []byte, doStripSlashes bool) []Token { - if doStripSlashes { - code = stripSlashes(code); - } - + if doStripSlashes { + code = stripSlashes(code) + } + code = removeComments(code) tokens := make([]Token, 0) token, mask, isstring, line, column := "", false, false, 0, 0 @@ -70,10 +70,10 @@ func Tokenize(code []byte, doStripSlashes bool) []Token { for i := 0; i < len(code); i++ { c := code[i] column++ - + if byteArrayContains(new_line, c) { - line++ - column = 0 + line++ + column = 0 } // string masks (backslash) @@ -95,8 +95,8 @@ func Tokenize(code []byte, doStripSlashes bool) []Token { } else { // preprocessor, delimeter, keyword or variable/expression if c == preprocessor { - tokens = append(tokens, preprocessorLine(code, &i, line, column)) - token = "" + tokens = append(tokens, preprocessorLine(code, &i, line, column)) + token = "" } else if byteArrayContains(delimiter, c) { if token != "" { tokens = append(tokens, Token{token, false, line, column}) @@ -121,23 +121,23 @@ func Tokenize(code []byte, doStripSlashes bool) []Token { // Removes slashes from input code. // This is used for the "code" keyword for correct strings in resulting code. func stripSlashes(code []byte) []byte { - newcode := make([]byte, len(code)) - j, mask := 0, false - - for i := 0; i < len(code); i++ { - c := code[i] - - if c == '\\' && !mask { + newcode := make([]byte, len(code)) + j, mask := 0, false + + for i := 0; i < len(code); i++ { + c := code[i] + + if c == '\\' && !mask { mask = true continue } - - newcode[j] = code[i] - mask = false - j++ - } - - return newcode + + newcode[j] = code[i] + mask = false + j++ + } + + return newcode } // Removes all comments from input byte array. @@ -180,31 +180,31 @@ func removeComments(code []byte) []byte { // Reads preprocessor command until end of line func preprocessorLine(code []byte, i *int, lineNr, column int) Token { - c := byte('0') - var line string - - for *i < len(code) { - c = code[*i] - - if byteArrayContains(new_line, c) { - break - } - - line += string(c) - (*i)++ - } - - // read all new line characters (\r and \n) - c = code[*i] - - for byteArrayContains(new_line, c) { - (*i)++ - c = code[*i] - } - - (*i)-- // for will count up 1, so subtract it here - - return Token{line, true, lineNr, column} + c := byte('0') + var line string + + for *i < len(code) { + c = code[*i] + + if byteArrayContains(new_line, c) { + break + } + + line += string(c) + (*i)++ + } + + // read all new line characters (\r and \n) + c = code[*i] + + for byteArrayContains(new_line, c) { + (*i)++ + c = code[*i] + } + + (*i)-- // for will count up 1, so subtract it here + + return Token{line, true, lineNr, column} } // Returns the next character in code starting at i. diff --git a/src/tokenizer/tokenizer_test.go b/src/tokenizer/tokenizer_test.go index b1d3d25..c12b6c4 100644 --- a/src/tokenizer/tokenizer_test.go +++ b/src/tokenizer/tokenizer_test.go @@ -1,9 +1,9 @@ package tokenizer_test import ( - "tokenizer" "io/ioutil" "testing" + "tokenizer" ) func TestTokenizerVar(t *testing.T) { @@ -96,9 +96,9 @@ func TestTokenizerPreprocessor(t *testing.T) { func TestTokenizerMask(t *testing.T) { got := getTokens(t, "test/tokenizer_mask.asl") - //var y = code("var z = \"Hello \\"World\\"\";"); + //var y = code("var z = \"Hello \\"World\\"\";"); want := []string{"var", "x", "=", "\"Hello \\\"World\\\"\"", ";", - "var", "y", "=", "code", "(", "\"var z = \\\"Hello \\\\\"World\\\\\"\\\";\"", ")", ";"} + "var", "y", "=", "code", "(", "\"var z = \\\"Hello \\\\\"World\\\\\"\\\";\"", ")", ";"} compareLength(t, &got, &want) compareTokens(t, &got, &want) From 29804f0d2056726297e562c70ce778816f0084e0 Mon Sep 17 00:00:00 2001 From: Marvin Blum Date: Tue, 15 Dec 2015 23:23:24 +0100 Subject: [PATCH 07/20] Renamed parser helper, upcounted version number. --- src/main/asl.go | 2 +- src/parser/{parserHelper.go => parser_helper.go} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename src/parser/{parserHelper.go => parser_helper.go} (100%) diff --git a/src/main/asl.go b/src/main/asl.go index f7748ef..a1c1da9 100644 --- a/src/main/asl.go +++ b/src/main/asl.go @@ -11,7 +11,7 @@ import ( ) const ( - version = "1.1.1" + version = "1.2.0" extension = ".asl" sqfextension = ".sqf" PathSeparator = string(os.PathSeparator) diff --git a/src/parser/parserHelper.go b/src/parser/parser_helper.go similarity index 100% rename from src/parser/parserHelper.go rename to src/parser/parser_helper.go From 4dfa2ee3efea71e0ec5986ed0913d8ede6816620 Mon Sep 17 00:00:00 2001 From: Marvin Blum Date: Tue, 15 Dec 2015 23:53:47 +0100 Subject: [PATCH 08/20] Issue #17 and concurrent compiling. --- src/main/asl.go | 69 +++++++++++++++++++++++++++---------- src/parser/parser_helper.go | 5 +-- 2 files changed, 53 insertions(+), 21 deletions(-) diff --git a/src/main/asl.go b/src/main/asl.go index a1c1da9..2c390d1 100644 --- a/src/main/asl.go +++ b/src/main/asl.go @@ -41,6 +41,7 @@ func usage() { fmt.Println(" output directory, directory structure will be created corresponding to input directory") } +// Parses compiler flags. func flags(flag string) bool { flag = strings.ToLower(flag) @@ -63,6 +64,7 @@ func flags(flag string) bool { return false } +// Creates a list of all ASL files to compile. func readAslFiles(path string) { dir, err := ioutil.ReadDir(path) @@ -90,28 +92,57 @@ func readAslFiles(path string) { } } +// Recovers and prints thrown error. +func recoverCompileError(file string, waiter chan bool) { + if r := recover(); r != nil { + fmt.Println("Compile error in file "+file+":", r) + } + + waiter <- true // the show must go on +} + +// Compiles a single ASL file. +func compileFile(path string, file ASLFile, waiter chan bool) { + defer recoverCompileError(file.in, waiter) + + // read file + out := filepath.FromSlash(path + PathSeparator + file.out + PathSeparator + file.newname + sqfextension) + fmt.Println(file.in + " -> " + out) + code, err := ioutil.ReadFile(file.in) + + if err != nil { + fmt.Println("Error reading file: " + file.in) + return + } + + // compile + token := tokenizer.Tokenize(code, false) + compiler := parser.Compiler{} + sqf := compiler.Parse(token, pretty) + + os.MkdirAll(filepath.FromSlash(path+PathSeparator+file.out), 0777) + err = ioutil.WriteFile(out, []byte(sqf), 0666) + + if err != nil { + fmt.Println("Error writing file: " + file.out) + fmt.Println(err) + } + + waiter <- true // done +} + +// Compiles ASL files concurrently. func compile(path string) { + waiter := make(chan bool, len(aslFiles)) + + // fire compile for i := 0; i < len(aslFiles); i++ { - out := filepath.FromSlash(path + PathSeparator + aslFiles[i].out + PathSeparator + aslFiles[i].newname + sqfextension) - fmt.Println(aslFiles[i].in + " -> " + out) - code, err := ioutil.ReadFile(aslFiles[i].in) + go compileFile(path, aslFiles[i], waiter) + } - if err != nil { - fmt.Println("Error reading file: " + aslFiles[i].in) - continue - } - - token := tokenizer.Tokenize(code, false) - compiler := parser.Compiler{} - sqf := compiler.Parse(token, pretty) - - os.MkdirAll(filepath.FromSlash(path+PathSeparator+aslFiles[i].out), 0777) - err = ioutil.WriteFile(out, []byte(sqf), 0666) - - if err != nil { - fmt.Println("Error writing file: " + aslFiles[i].out) - fmt.Println(err) - } + // wait until all files are compiled + for i := 0; i < len(aslFiles); i++ { + <-waiter } } diff --git a/src/parser/parser_helper.go b/src/parser/parser_helper.go index 5759226..b868726 100644 --- a/src/parser/parser_helper.go +++ b/src/parser/parser_helper.go @@ -1,6 +1,7 @@ package parser import ( + "errors" "strconv" "tokenizer" ) @@ -38,7 +39,7 @@ func (c *Compiler) accept(token string) bool { // Throws if current token does not match expected one. func (c *Compiler) expect(token string) { if !c.tokenEqual(token, c.get()) { - panic("Parse error, expected '" + token + "' but was '" + c.get().Token + "' in line " + strconv.Itoa(c.get().Line) + " at " + strconv.Itoa(c.get().Column)) + panic(errors.New("Parse error, expected '" + token + "' but was '" + c.get().Token + "' in line " + strconv.Itoa(c.get().Line) + " at " + strconv.Itoa(c.get().Column))) } c.next() @@ -62,7 +63,7 @@ func (c *Compiler) next() { // Returns current token or throws, if no more tokens are available. func (c *Compiler) get() tokenizer.Token { if c.tokenIndex >= len(c.tokens) { - panic("No more tokens") + panic(errors.New("No more tokens")) } return c.tokens[c.tokenIndex] From ed1d19851e123aa9ab239eee9957ac8ea5f9b2d5 Mon Sep 17 00:00:00 2001 From: Marvin Blum Date: Tue, 15 Dec 2015 23:56:20 +0100 Subject: [PATCH 09/20] Updated ToDo. --- ToDo.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ToDo.md b/ToDo.md index bd1bb5d..2c0963e 100644 --- a/ToDo.md +++ b/ToDo.md @@ -6,14 +6,14 @@ * ~~pretty/minified printing~~ * ~~usage~~ * ~~recursive compiling~~ -* concurrent compiling +* ~~concurrent compiling~~ * ~~inline buildin function call -> foo(a)(bar(x)(y));~~ * ~~negative values e.g. -1, operator !~~ * ~~tokenizer splits commands like "format" -> for, mat~~ * ~~try ... catch~~ -* better error reporting - - recover panic - - line, column +* ~~better error reporting~~ + - ~~recover panic~~ + - ~~line, column~~ ## Special cases From 05e69372019ac94ee5c05b31c531aca2fd87c701 Mon Sep 17 00:00:00 2001 From: Marvin Blum Date: Thu, 17 Dec 2015 22:49:56 +0100 Subject: [PATCH 10/20] Started loading type information. --- src/main/asl.go | 48 +- src/types/loader.go | 32 + types | 2198 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 2263 insertions(+), 15 deletions(-) create mode 100644 src/types/loader.go create mode 100644 types diff --git a/src/main/asl.go b/src/main/asl.go index 2c390d1..f28752a 100644 --- a/src/main/asl.go +++ b/src/main/asl.go @@ -8,12 +8,14 @@ import ( "path/filepath" "strings" "tokenizer" + "types" ) const ( version = "1.2.0" extension = ".asl" sqfextension = ".sqf" + typeinfo = "types" PathSeparator = string(os.PathSeparator) ) @@ -45,23 +47,32 @@ func usage() { func flags(flag string) bool { flag = strings.ToLower(flag) - if flag[0] == '-' { - if flag == "-v" { - fmt.Println("asl version " + version) - exit = true - } else if flag == "-r" { - recursive = true - } else if flag == "-pretty" { - pretty = true - } else if flag == "--help" { - usage() - exit = true - } - - return true + if flag[0] != '-' { + return false } - return false + if flag == "-v" { + fmt.Println("asl version " + version) + exit = true + } else if flag == "-r" { + recursive = true + } else if flag == "-pretty" { + pretty = true + } else if flag == "--help" { + usage() + exit = true + } + + return true +} + +// Loads types from types file. +// If none is provided, an error will be printed. +func loadTypes() { + if err := types.LoadTypes(typeinfo); err != nil { + fmt.Println("No 'types' file provided. Please add type information to this file from 'supportInfo' script command output.") + exit = true + } } // Creates a list of all ASL files to compile. @@ -163,6 +174,13 @@ func main() { return } + // load type information + loadTypes() + + if exit { + return + } + // in/out parameter out := "" diff --git a/src/types/loader.go b/src/types/loader.go new file mode 100644 index 0000000..5120e83 --- /dev/null +++ b/src/types/loader.go @@ -0,0 +1,32 @@ +package types + +import ( + "fmt" + "io/ioutil" + "strings" +) + +// Loads type information from file. +func LoadTypes(path string) error { + content, err := ioutil.ReadFile(path) + + if err != nil { + return err + } + + if err := parseTypes(string(content)); err != nil { + return err + } + + return nil +} + +func parseTypes(content string) error { + lines := strings.Split(content, "\\n") + + for _, line := range lines { + fmt.Println(line) + } + + return nil +} diff --git a/types b/types new file mode 100644 index 0000000..54ac633 --- /dev/null +++ b/types @@ -0,0 +1,2198 @@ +t:SCALAR +t:BOOL +t:ARRAY +t:STRING +t:NOTHING +t:ANY +t:NAMESPACE +t:NaN +t:IF +t:WHILE +t:FOR +t:SWITCH +t:EXCEPTION +t:WITH +t:CODE +t:OBJECT +t:VECTOR +t:TRANS +t:ORIENT +t:SIDE +t:GROUP +t:TEXT +t:SCRIPT +t:TARGET +t:JCLASS +t:CONFIG +t:DISPLAY +t:CONTROL +t:NetObject +t:SUBGROUP +t:TEAM_MEMBER +t:TASK +t:DIARY_RECORD +t:LOCATION +b:ARRAY waypointattachobject SCALAR,OBJECT +b:OBJECT,GROUP enableattack BOOL +b:ARRAY isflatempty ARRAY +b:OBJECT removeaction SCALAR +b:OBJECT neartargets SCALAR +b:STRING setmarkersizelocal ARRAY +b:OBJECT campreparefov SCALAR +b:CONTROL ctrlsetfontheightsecondary SCALAR +b:CONTROL ctrlsetfonth5b STRING +b:CONTROL ctrlsettextcolor ARRAY +b:CONTROL lbcolorright SCALAR +b:CONTROL lnbdeletecolumn SCALAR +b:CONTROL tvsetpictureright ARRAY +b:OBJECT setobjecttextureglobal ARRAY +b:SCALAR setforcegeneratorrtd ARRAY +b:OBJECT removecuratoreditableobjects ARRAY +b:OBJECT swimindepth SCALAR +b:LOCATION setsize ARRAY +b:OBJECT addgoggles STRING +b:OBJECT setmimic STRING +b:OBJECT additem STRING +b:OBJECT disableconversation BOOL +b:SCALAR setfsmvariable ARRAY +b:CONTROL ctrlsetstructuredtext TEXT +b:OBJECT setcuratorwaypointcost SCALAR +b:OBJECT setcuratoreditingareatype BOOL +b:OBJECT setlightintensity SCALAR +b:LOCATION attachobject OBJECT +b:SCALAR fademusic SCALAR +b:OBJECT removeweaponturret ARRAY +b:OBJECT action ARRAY +b:OBJECT fire STRING +b:OBJECT fire ARRAY +b:OBJECT setvehicleammodef SCALAR +b:CONTROL newoverlay CONFIG +b:OBJECT backpackspacefor STRING +b:OBJECT kbreact ARRAY +b:OBJECT setfatigue SCALAR +b:CONTROL lnbsetcurselrow SCALAR +b:SCALAR setgusts SCALAR +b:STRING configclasses CONFIG +b:TASK setsimpletasktarget ARRAY +b:ANY exec STRING +b:OBJECT,GROUP lockwp BOOL +b:OBJECT setparticlecircle ARRAY +b:OBJECT campreparerelpos ARRAY +b:ARRAY findemptyposition ARRAY +b:CONTROL ctrlsettextsecondary STRING +b:CONTROL lnbsetcolumnspos ARRAY +b:CONTROL lnbpicture ARRAY +b:CONTROL tvsetcursel ARRAY +b:OBJECT animationphase STRING +b:OBJECT setactualcollectivertd SCALAR +b:OBJECT setcuratorcoef ARRAY +b:CONTROL ctrlsetmodelscale SCALAR +b:GROUP addvehicle OBJECT +b:CONTROL removemenuitem SCALAR +b:CONTROL removemenuitem STRING +b:CONTROL setobjectarguments ARRAY +b:NAMESPACE getvariable STRING +b:NAMESPACE getvariable ARRAY +b:CONTROL getvariable STRING +b:OBJECT getvariable STRING +b:OBJECT getvariable ARRAY +b:GROUP getvariable STRING +b:GROUP getvariable ARRAY +b:TEAM_MEMBER getvariable STRING +b:TEAM_MEMBER getvariable ARRAY +b:TASK getvariable STRING +b:LOCATION getvariable STRING +b:OBJECT assignasdriver OBJECT +b:CONTROL lnbdata ARRAY +b:CONTROL buttonsetaction STRING +b:OBJECT hcgroupparams GROUP +b:OBJECT settargetage STRING +b:IF then CODE +b:IF then ARRAY +b:ARRAY ordergetin BOOL +b:STRING setmarkersize ARRAY +b:SCALAR cuttext ARRAY +b:SCALAR faderadio SCALAR +b:OBJECT campreparedive SCALAR +b:OBJECT forceweaponfire ARRAY +b:OBJECT kbhastopic STRING +b:CONTROL lnbsettext ARRAY +b:TEAM_MEMBER addteammember TEAM_MEMBER +b:CODE foreachmemberteam TEAM_MEMBER +b:SCALAR setlightnings SCALAR +b:OBJECT addlivestats SCALAR +b:CONTROL updatedrawicon ARRAY +b:STRING enableaifeature BOOL +b:OBJECT triggerattachobject SCALAR +b:OBJECT setface STRING +b:OBJECT setrank STRING +b:OBJECT forceadduniform STRING +b:CONTROL addmenuitem ARRAY +b:SIDE setfriend ARRAY +b:DISPLAY createdisplay STRING +b:CONTROL lbsetpicturecolor ARRAY +b:TEAM_MEMBER sendtask ARRAY +b:OBJECT engineon BOOL +b:OBJECT addweaponglobal STRING +b:OBJECT linkitem STRING +b:ARRAY synchronizewaypoint ARRAY +b:OBJECT synchronizewaypoint ARRAY +b:ARRAY inrangeofartillery ARRAY +b:FOR step SCALAR +b:OBJECT addheadgear STRING +b:GROUP setgroupowner SCALAR +b:CONTROL drawicon ARRAY +b:CONTROL lbadd STRING +b:CONTROL lbsettextright ARRAY +b:CONTROL cbsetchecked BOOL +b:SIDE revealmine OBJECT +b:ARRAY,OBJECT nearroads SCALAR +b:OBJECT moveincargo OBJECT +b:OBJECT moveincargo ARRAY +b:ARRAY,OBJECT domove ARRAY +b:OBJECT setnamesound STRING +b:CONTROL inserteditorobject ARRAY +b:OBJECT setvehicletipars ARRAY +b:CONTROL ctrlcommit SCALAR +b:CONTROL lbpicture SCALAR +b:CONTROL lnbaddcolumn SCALAR +b:CONTROL lnbsetpicturecolorselectedright ARRAY +b:OBJECT enableautostartuprtd BOOL +b:STRING ppeffectcommit SCALAR +b:SCALAR ppeffectcommit SCALAR +b:ARRAY ppeffectcommit SCALAR +b:WHILE do CODE +b:WITH do CODE +b:FOR do CODE +b:SWITCH do CODE +b:OBJECT settriggeractivation ARRAY +b:SCALAR setfog SCALAR,ARRAY +b:ARRAY setwaypointtimeout ARRAY +b:OBJECT lockturret ARRAY +b:OBJECT,GROUP setgroupidglobal ARRAY +b:CONTROL lbcolor SCALAR +b:CONTROL lbsetpicturecolorselected ARRAY +b:OBJECT enablepersonturret ARRAY +b:OBJECT addcuratoreditingarea ARRAY +b:OBJECT setmagazineturretammo ARRAY +b:OBJECT switchlight STRING +b:OBJECT camsetfocus ARRAY +b:IF exitwith CODE +b:SCALAR cutfadeout SCALAR +b:OBJECT setdamage SCALAR +b:SCALAR setovercast SCALAR +b:OBJECT camsetdive SCALAR +b:OBJECT worldtomodel ARRAY +b:OBJECT sethitindex ARRAY +b:OBJECT assignascargoindex ARRAY +b:OBJECT buildingpos SCALAR +b:FOR from SCALAR +b:CONTROL createmenu SCALAR +b:OBJECT canadditemtouniform STRING +b:OBJECT lockedturret ARRAY +b:SCALAR fadespeech SCALAR +b:DISPLAY displayctrl SCALAR +b:CONTROL lbpictureright SCALAR +b:OBJECT setbleedingremaining SCALAR +b:OBJECT enableuavwaypoints BOOL +b:STRING setmarkershapelocal STRING +b:ARRAY setwaypointdescription STRING +b:OBJECT switchcamera STRING +b:CONTROL listobjects STRING +b:OBJECT addrating SCALAR +b:OBJECT campreparefocus ARRAY +b:ARRAY,OBJECT nearobjectsready SCALAR +b:OBJECT removealleventhandlers STRING +b:OBJECT gethidefrom OBJECT +b:CONTROL allow3dmode BOOL +b:OBJECT enablefatigue BOOL +b:CONTROL lbisselected SCALAR +b:CONTROL lnbsetpicturecolorselected ARRAY +b:OBJECT customradio ARRAY +b:ARRAY vectordiff ARRAY +b:CONTROL drawlocation LOCATION +b:OBJECT addmagazineturret ARRAY +b:ARRAY setwaypointvisible BOOL +b:OBJECT setdropinterval SCALAR +b:SIDE getfriend SIDE +b:OBJECT setpos ARRAY +b:OBJECT magazineturretammo ARRAY +b:STRING setmarkershape STRING +b:CONTROL seteditorobjectscope ARRAY +b:OBJECT land STRING +b:ANY isequalto ANY +b:ARRAY,OBJECT nearentities SCALAR,ARRAY +b:STRING setmarkertextlocal STRING +b:OBJECT setlightambient ARRAY +b:CONTROL tvsort ARRAY +b:OBJECT addcuratoreditableobjects ARRAY +b:SCALAR setwinddir SCALAR +b:OBJECT removesimpletask TASK +b:ANY spawn CODE +b:OBJECT campreparefovrange ARRAY +b:OBJECT setvectorup ARRAY +b:SIDE countside ARRAY +b:OBJECT campreparedir SCALAR +b:OBJECT limitspeed SCALAR +b:OBJECT setposatl ARRAY +b:CONTROL getobjectargument ARRAY +b:OBJECT setdestination ARRAY +b:OBJECT setunitability SCALAR +b:OBJECT kbtell ARRAY +b:CONTROL ctrlsettooltipcolortext ARRAY +b:OBJECT removecuratoraddons ARRAY +b:OBJECT setoxygenremaining SCALAR +b:DISPLAY ctrlcreate ARRAY +b:CONTROL showneweditorobject ARRAY +b:CONTROL ondoubleclick STRING +b:ARRAY,OBJECT distancesqr ARRAY,OBJECT +b:LOCATION distancesqr LOCATION +b:LOCATION distancesqr ARRAY +b:ARRAY distancesqr LOCATION +b:OBJECT addbackpackglobal STRING +b:STRING iskindof STRING +b:STRING iskindof ARRAY +b:OBJECT iskindof STRING +b:CONTROL editobject STRING +b:ARRAY intersect ARRAY +b:OBJECT setvehiclearmor SCALAR +b:CONTROL nmenuitems SCALAR,STRING +b:OBJECT hideobject BOOL +b:OBJECT kbwassaid ARRAY +b:CONTROL ctrlmapscreentoworld ARRAY +b:TEAM_MEMBER unregistertask STRING +b:SCALAR,NaN != SCALAR,NaN +b:STRING != STRING +b:OBJECT != OBJECT +b:GROUP != GROUP +b:SIDE != SIDE +b:TEXT != TEXT +b:CONFIG != CONFIG +b:DISPLAY != DISPLAY +b:CONTROL != CONTROL +b:TEAM_MEMBER != TEAM_MEMBER +b:NetObject != NetObject +b:TASK != TASK +b:LOCATION != LOCATION +b:OBJECT joinassilent ARRAY +b:OBJECT setvectordirandup ARRAY +b:OBJECT removehandgunitem STRING +b:OBJECT setflagside SIDE +b:ARRAY setwaypointtype STRING +b:OBJECT emptypositions STRING +b:ARRAY setwaypointname STRING +b:ANY remoteexec ARRAY +b:CODE foreachmember TEAM_MEMBER +b:SCALAR setwindstr SCALAR +b:ARRAY vectoradd ARRAY +b:TASK settaskstate STRING +b:ARRAY deleteat SCALAR +b:OBJECT enablesimulation BOOL +b:STRING objstatus STRING +b:OBJECT weapondirection STRING +b:OBJECT removemagazineturret ARRAY +b:OBJECT forcespeed SCALAR +b:OBJECT moveindriver OBJECT +b:OBJECT additemtouniform STRING +b:OBJECT removeallmpeventhandlers STRING +b:OBJECT gethit STRING +b:CONTROL drawarrow ARRAY +b:CONTROL lbsetpicturerightcolordisabled ARRAY +b:CONTROL tvsetdata ARRAY +b:CONTROL ctrlremovealleventhandlers STRING +b:OBJECT setunloadincombat ARRAY +b:LOCATION setrectangular BOOL +b:OBJECT additemtovest STRING +b:ANY params ARRAY +b:CONTROL addmenu ARRAY +b:OBJECT setuseractiontext ARRAY +b:OBJECT setvehicleposition ARRAY +b:OBJECT assignascargo OBJECT +b:ARRAY,OBJECT sideradio STRING +b:OBJECT moveincommander OBJECT +b:ARRAY pushback ANY +b:OBJECT isflashlighton STRING +b:OBJECT setposworld ARRAY +b:STRING createvehiclelocal ARRAY +b:OBJECT triggerattachvehicle ARRAY +b:STRING setmarkerpos ARRAY +b:OBJECT assignitem STRING +b:CONTROL setdrawicon ARRAY +b:STRING setmarkeralphalocal SCALAR +b:OBJECT landat SCALAR +b:OBJECT disablecollisionwith OBJECT +b:CONTROL ctrlsetfontp STRING +b:CONTROL ctrlsetfontp SCALAR +b:CONTROL ctrlsetautoscrolldelay SCALAR +b:OBJECT setskill ARRAY +b:OBJECT setskill SCALAR +b:OBJECT savestatus STRING +b:OBJECT diarysubjectexists STRING +b:OBJECT removeweaponattachmentcargo ARRAY +b:ARRAY,OBJECT dofire OBJECT +b:OBJECT allowdamage BOOL +b:ARRAY setwaypointscript STRING +b:OBJECT setspeaker STRING +b:OBJECT setrepaircargo SCALAR +b:OBJECT setvehicleid SCALAR +b:CONTROL ctrlsetfont STRING +b:CONTROL lbsetvalue ARRAY +b:CONTROL lnbsetpicturecolorright ARRAY +b:DISPLAY displayaddeventhandler ARRAY +b:OBJECT setsuppression SCALAR +b:TEAM_MEMBER setleader TEAM_MEMBER +b:ARRAY vectormultiply SCALAR +b:OBJECT removeweaponcargo ARRAY +b:CONTROL getobjectchildren STRING +b:DISPLAY closedisplay SCALAR +b:OBJECT skillfinal STRING +b:ARRAY append ARRAY +b:OBJECT addbackpackcargoglobal ARRAY +b:OBJECT stop BOOL +b:ARRAY,OBJECT say2d STRING +b:ARRAY,OBJECT say2d ARRAY +b:OBJECT countunknown ARRAY +b:ARRAY select SCALAR +b:ARRAY select BOOL +b:ARRAY select ARRAY +b:STRING select ARRAY +b:CONFIG select SCALAR +b:OBJECT addmagazinecargo ARRAY +b:OBJECT,GROUP enablegunlights STRING +b:CONTROL ctrlsettooltip STRING +b:CONTROL lbtext SCALAR +b:CONTROL lbsetpicturerightcolor ARRAY +b:CONTROL lnbsetpicturecolor ARRAY +b:OBJECT curatorcoef STRING +b:OBJECT setparticleparams ARRAY +b:CONTROL deleteeditorobject STRING +b:OBJECT cameraeffect ARRAY +b:OBJECT addmagazinecargoglobal ARRAY +b:OBJECT getcargoindex OBJECT +b:ARRAY,OBJECT doartilleryfire ARRAY +b:CONTROL showlegend BOOL +b:EXCEPTION catch CODE +b:OBJECT setunitpos STRING +b:BOOL setcamuseti SCALAR +b:CONTROL htmlload STRING +b:CONTROL lnbsetvalue ARRAY +b:OBJECT setcustomweightrtd SCALAR +b:OBJECT selectdiarysubject STRING +b:STRING ppeffectadjust ARRAY +b:SCALAR ppeffectadjust ARRAY +b:OBJECT selectionposition ARRAY,STRING +b:STRING setmarkeralpha SCALAR +b:OBJECT additemcargoglobal ARRAY +b:SCALAR preloadobject STRING,OBJECT +b:OBJECT setpitch SCALAR +b:ARRAY,OBJECT setmusiceffect STRING +b:CONTROL drawrectangle ARRAY +b:CONTROL lnbsetcolorright ARRAY +b:ARRAY allowgetin BOOL +b:CODE foreach ARRAY +b:ARRAY,OBJECT commandartilleryfire ARRAY +b:STRING setmarkerbrush STRING +b:SCALAR,NaN <= SCALAR,NaN +b:OBJECT canadd STRING +b:OBJECT loadmagazine ARRAY +b:CONTROL ctrlshow BOOL +b:ANY execvm STRING +b:CONTROL lbsetselectcolor ARRAY +b:OBJECT addcuratorcameraarea ARRAY +b:OBJECT setautonomous BOOL +b:OBJECT canslingload OBJECT +b:TEAM_MEMBER registertask STRING +b:TASK settaskresult ARRAY +b:ARRAY,OBJECT distance2d ARRAY,OBJECT +b:OBJECT enablereload BOOL +b:OBJECT setunconscious BOOL +b:ARRAY,OBJECT nearobjects SCALAR,ARRAY +b:OBJECT turretunit ARRAY +b:OBJECT removeitem STRING +b:OBJECT countenemy ARRAY +b:OBJECT setlightflaresize SCALAR +b:CONTROL tvsettooltip ARRAY +b:OBJECT enablemimics BOOL +b:CONTROL ctrlsetmodeldirandup ARRAY +b:OBJECT creatediarysubject ARRAY +b:OBJECT unlinkitem STRING +b:ANY execfsm STRING +b:ANY call CODE +b:OBJECT selectweapon STRING +b:OBJECT setvehiclelock STRING +b:OBJECT setflagtexture STRING +b:OBJECT addprimaryweaponitem STRING +b:OBJECT switchmove STRING +b:ARRAY,OBJECT commandtarget OBJECT +b:CONTROL ctrlsetfonth2b STRING +b:OBJECT addcuratoraddons ARRAY +b:OBJECT currentmagazineturret ARRAY +b:OBJECT currentmagazinedetailturret ARRAY +b:OBJECT minedetectedby SIDE +b:CONTROL onshownewobject STRING +b:OBJECT removeweaponglobal STRING +b:OBJECT,GROUP setgroupid ARRAY +b:OBJECT setvehicleammo SCALAR +b:OBJECT camsetpos ARRAY +b:SCALAR,NaN >= SCALAR,NaN +b:STRING createvehicle ARRAY +b:SCALAR debugfsm BOOL +b:OBJECT attachto ARRAY +b:CONTROL drawline ARRAY +b:CONTROL lnbvalue ARRAY +b:CONTROL tvsetpicture ARRAY +b:CONTROL progresssetposition SCALAR +b:CONTROL ctrlremoveeventhandler ARRAY +b:OBJECT animatedoor ARRAY +b:ARRAY setwaypointloitertype STRING +b:ARRAY setwaypointstatements ARRAY +b:OBJECT respawnvehicle ARRAY +b:OBJECT flyinheight SCALAR +b:OBJECT setidentity STRING +b:ARRAY,OBJECT settitleeffect ARRAY +b:OBJECT isuniformallowed STRING +b:ARRAY joinsilent OBJECT,GROUP +b:OBJECT addmagazineammocargo ARRAY +b:OBJECT removesecondaryweaponitem STRING +b:OBJECT switchgesture STRING +b:OBJECT camcommit SCALAR +b:OBJECT setvelocitytransformation ARRAY +b:CONFIG >> STRING +b:OBJECT kbaddtopic ARRAY +b:CONTROL ctrlenable BOOL +b:DISPLAY displayseteventhandler ARRAY +b:CONTROL lnbtext ARRAY +b:OBJECT connectterminaltouav OBJECT +b:STRING ppeffectenable BOOL +b:ARRAY ppeffectenable BOOL +b:SCALAR ppeffectenable BOOL +b:OBJECT adduniform STRING +b:OBJECT allowdammage BOOL +b:CONTROL ctrlmapcursor ARRAY +b:OBJECT setcollisionlight BOOL +b:OBJECT,GROUP enableirlasers BOOL +b:OBJECT enablecopilot BOOL +b:CONTROL ctrlsetfonth4b STRING +b:CONTROL tvsortbyvalue ARRAY +b:OBJECT loadidentity STRING +b:TEAM_MEMBER createtask ARRAY +b:LOCATION settext STRING +b:LOCATION setside SIDE +b:OBJECT,GROUP setbehaviour STRING +b:SCALAR,NaN ^ SCALAR,NaN +b:OBJECT hcremovegroup GROUP +b:CONTROL loadoverlay CONFIG +b:OBJECT assignasgunner OBJECT +b:OBJECT removeitemfromvest STRING +b:OBJECT playmove STRING +b:OBJECT addbackpackcargo ARRAY +b:OBJECT setweaponreloadingtime ARRAY +b:CONTROL posscreentoworld ARRAY +b:CONTROL tvsetpicturecolor ARRAY +b:OBJECT isuavconnectable ARRAY +b:OBJECT setfaceanimation SCALAR +b:STRING counttype ARRAY +b:ARRAY setwaypointposition ARRAY +b:BOOL && BOOL +b:BOOL && CODE +b:OBJECT groupchat STRING +b:OBJECT globalchat STRING +b:CONTROL lbtextright SCALAR +b:FOR to SCALAR +b:OBJECT useaudiotimeformoves BOOL +b:SCALAR fadesound SCALAR +b:OBJECT groupselectunit ARRAY +b:OBJECT setrandomlip BOOL +b:OBJECT modeltoworldvisual ARRAY +b:SCALAR setrain SCALAR +b:CONTROL updatemenuitem ARRAY +b:OBJECT,GROUP setformdir SCALAR +b:STRING createunit ARRAY +b:GROUP createunit ARRAY +b:CONTROL removedrawlinks ARRAY +b:ARRAY,OBJECT commandchat STRING +b:SCALAR cutrsc ARRAY +b:OBJECT allowcrewinimmobile BOOL +b:CONTROL ctrlsetfonth6b STRING +b:CONTROL lnbsetpicture ARRAY +b:CONTROL tvdata ARRAY +b:CONTROL tvvalue ARRAY +b:OBJECT setwingforcescalertd ARRAY +b:OBJECT allowcuratorlogicignoreareas BOOL +b:OBJECT doorphase STRING +b:ARRAY vectorcrossproduct ARRAY +b:CONTROL ctrlsetmodel STRING +b:CONTROL geteditorobjectscope STRING +b:CONTROL drawlink ARRAY +b:OBJECT gethitindex SCALAR +b:OBJECT addmagazineglobal STRING +b:OBJECT lockdriver BOOL +b:STRING setmarkercolorlocal STRING +b:ARRAY joinstring STRING +b:OBJECT addsecondaryweaponitem STRING +b:OBJECT getartilleryeta ARRAY +b:CONTROL lnbaddrow ARRAY +b:CONTROL lnbtextright ARRAY +b:CONTROL lnbsettextright ARRAY +b:CONTROL controlsgroupctrl SCALAR +b:OBJECT lock BOOL +b:OBJECT lock SCALAR +b:ARRAY sort BOOL +b:OBJECT camsetfovrange ARRAY +b:OBJECT globalradio STRING +b:STRING setmarkertext STRING +b:OBJECT enableai STRING +b:OBJECT addscore SCALAR +b:OBJECT playaction STRING +b:GROUP addwaypoint ARRAY +b:ARRAY arrayintersect ARRAY +b:STRING camcreate ARRAY +b:GROUP unitsbelowheight SCALAR +b:ARRAY unitsbelowheight SCALAR +b:OBJECT weaponsturret ARRAY +b:CONTROL ctrlsetbackgroundcolor ARRAY +b:CONTROL lbsetselected ARRAY +b:SCALAR radiochannelremove ARRAY +b:OBJECT setlightdaylight BOOL +b:OBJECT synchronizeobjectsremove ARRAY +b:OBJECT addbackpack STRING +b:ARRAY,OBJECT commandmove ARRAY +b:STRING,TEXT setattributes ARRAY +b:ARRAY,OBJECT commandfollow OBJECT +b:CONTROL seteditormode STRING +b:OBJECT ammo STRING +b:OBJECT lightattachobject ARRAY +b:OBJECT skill STRING +b:CONTROL tvpictureright ARRAY +b:CONTROL ctrlmapanimadd ARRAY +b:CONTROL ctrlmapworldtoscreen ARRAY +b:OBJECT synchronizeobjectsadd ARRAY +b:ARRAY ropeattachto OBJECT +b:ARRAY,OBJECT say STRING +b:ARRAY,OBJECT say ARRAY +b:ARRAY resize SCALAR +b:SCALAR,NaN % SCALAR,NaN +b:ARRAY setwaypointcompletionradius SCALAR +b:OBJECT findnearestenemy ARRAY,OBJECT +b:OBJECT setunitposweak STRING +b:OBJECT removemagazines STRING +b:OBJECT playgesture STRING +b:STRING splitstring STRING +b:OBJECT setcenterofmass ARRAY +b:TASK setsimpletaskdescription ARRAY +b:OBJECT setdir SCALAR +b:OBJECT camsettarget OBJECT +b:OBJECT camsettarget ARRAY +b:ARRAY set ARRAY +b:OBJECT setvectordir ARRAY +b:OBJECT moveto ARRAY +b:CONTROL getobjectproxy STRING +b:CODE count ARRAY +b:GROUP setgroupicon ARRAY +b:GROUP setgroupiconparams ARRAY +b:CONTROL evalobjectargument ARRAY +b:STRING addpublicvariableeventhandler CODE +b:STRING addpublicvariableeventhandler ARRAY +b:OBJECT enablecollisionwith OBJECT +b:OBJECT setunitrecoilcoefficient SCALAR +b:CONTROL tvtooltip SCALAR +b:CONTROL lbsetpictureright ARRAY +b:DISPLAY createmissiondisplay STRING +b:DISPLAY createmissiondisplay ARRAY +b:LOCATION setposition ARRAY +b:STRING setmarkertypelocal STRING +b:OBJECT removemagazineglobal STRING +b:OBJECT groupradio STRING +b:OBJECT setfuelcargo SCALAR +b:OBJECT addmpeventhandler ARRAY +b:OBJECT hcsetgroup ARRAY +b:OBJECT setdammage SCALAR +b:STRING hintc STRING +b:STRING hintc TEXT +b:STRING hintc ARRAY +b:OBJECT setcaptive SCALAR,BOOL +b:OBJECT settriggerstatements ARRAY +b:OBJECT findcover ARRAY +b:OBJECT,GROUP setcombatmode STRING +b:TEAM_MEMBER setcombatmode STRING +b:OBJECT disabletiequipment BOOL +b:OBJECT loadstatus STRING +b:ARRAY vectordistance ARRAY +b:CONTROL removedrawicon ARRAY +b:OBJECT weaponaccessoriescargo ARRAY +b:OBJECT assignteam STRING +b:OBJECT camsetfov SCALAR +b:OBJECT,GROUP setspeedmode STRING +b:OBJECT settriggertext STRING +b:SCALAR setradiomsg STRING +b:OBJECT,GROUP setformation STRING +b:TEAM_MEMBER setformation STRING +b:OBJECT removempeventhandler ARRAY +b:OBJECT joinas ARRAY +b:CONTROL lbsetcursel SCALAR +b:CONTROL tvpicture ARRAY +b:DISPLAY displayremoveeventhandler ARRAY +b:OBJECT customchat ARRAY +b:OBJECT currentweaponturret ARRAY +b:OBJECT canadditemtobackpack STRING +b:ARRAY setwaypointbehaviour STRING +b:CONTROL allowfileoperations BOOL +b:ARRAY,OBJECT seteffectcondition STRING +b:OBJECT setpilotlight BOOL +b:CONTROL lnbpictureright ARRAY +b:OBJECT addcuratorpoints SCALAR +b:STRING setdebriefingtext ARRAY +b:TASK sendtaskresult ARRAY +b:OBJECT createsimpletask ARRAY +b:SCALAR,NaN * SCALAR,NaN +b:CONTROL setvisibleiftreecollapsed ARRAY +b:OBJECT assignasturret ARRAY +b:CONTROL editorseteventhandler ARRAY +b:CONTROL ctrlsetfontpb STRING +b:CONTROL lbsetcolor ARRAY +b:OBJECT setcuratorcameraareaceiling SCALAR +b:OBJECT setlightattenuation ARRAY +b:OBJECT creatediaryrecord ARRAY +b:LOCATION setimportance SCALAR +b:GROUP getgroupicon SCALAR +b:NAMESPACE setvariable ARRAY +b:CONTROL setvariable ARRAY +b:OBJECT setvariable ARRAY +b:GROUP setvariable ARRAY +b:TEAM_MEMBER setvariable ARRAY +b:TASK setvariable ARRAY +b:LOCATION setvariable ARRAY +b:ARRAY,OBJECT dowatch ARRAY +b:ARRAY,OBJECT dowatch OBJECT +b:OBJECT setvehiclevarname STRING +b:CONTROL moveobjecttoend STRING +b:OBJECT campreparetarget OBJECT +b:OBJECT campreparetarget ARRAY +b:ANY param ARRAY +b:OBJECT canadditemtovest STRING +b:SCALAR,NaN + SCALAR,NaN +b:STRING + STRING +b:ARRAY + ARRAY +b:ANY onmapsingleclick STRING,CODE +b:OBJECT setlightcolor ARRAY +b:OBJECT hideobjectglobal BOOL +b:CONTROL lbsetpicturecolordisabled ARRAY +b:CONTROL lnbsetdata ARRAY +b:CONTROL lnbcolorright ARRAY +b:CONTROL tvcollapse ARRAY +b:CODE foreachmemberagent TEAM_MEMBER +b:OBJECT setbrakesrtd ARRAY +b:ARRAY vectorfromto ARRAY +b:SCALAR enablechannel BOOL +b:LOCATION setspeech STRING +b:OBJECT lockcamerato ARRAY +b:SCALAR,NaN atan2 SCALAR,NaN +b:OBJECT setposasl ARRAY +b:ARRAY setwppos ARRAY +b:OBJECT sendsimplecommand STRING +b:OBJECT moveingunner OBJECT +b:ARRAY deleterange ARRAY +b:CONTROL ctrlsetfontsecondary STRING +b:CONTROL ctrlsettext STRING +b:CONTROL ctrlsetfonth1 STRING +b:CONTROL tvexpand ARRAY +b:ARRAY nearestobject STRING +b:ARRAY nearestobject SCALAR +b:OBJECT setlightflaremaxdistance SCALAR +b:OBJECT setmass SCALAR,ARRAY +b:OBJECT removemagazinesturret ARRAY +b:OBJECT addeventhandler ARRAY +b:OBJECT campreload SCALAR +b:SCALAR,NaN - SCALAR,NaN +b:ARRAY - ARRAY +b:STRING setmarkerdir SCALAR +b:OBJECT isirlaseron STRING +b:ARRAY setwaypointcombatmode STRING +b:OBJECT,GROUP knowsabout OBJECT +b:SIDE knowsabout OBJECT +b:CONTROL ctrlsetfonth2 STRING +b:CONTROL ctrlsetactivecolor ARRAY +b:CONTROL lnbdeleterow SCALAR +b:CONTROL lnbsetcolor ARRAY +b:ARRAY vectordistancesqr ARRAY +b:OBJECT worldtomodelvisual ARRAY +b:OBJECT removeitems STRING +b:OBJECT lockcargo ARRAY +b:OBJECT lockcargo BOOL +b:ARRAY setwaypointformation STRING +b:OBJECT forcewalk BOOL +b:ARRAY,OBJECT lookat ARRAY,OBJECT +b:OBJECT setowner SCALAR +b:OBJECT kbadddatabasetargets STRING +b:CONTROL ctrlsetfonth3 STRING +b:CONTROL ctrlsettooltipcolorshade ARRAY +b:ARRAY,OBJECT commandfsm ARRAY +b:CONTROL lbsetpicturerightcolorselected ARRAY +b:CONTROL slidersetspeed ARRAY +b:SCALAR ppeffectforceinnvg BOOL +b:OBJECT setcamerainterest SCALAR +b:OBJECT modeltoworld ARRAY +b:STRING setmarkerposlocal ARRAY +b:OBJECT addmagazines ARRAY +b:OBJECT playmovenow STRING +b:ANY in ARRAY +b:OBJECT in OBJECT +b:ARRAY in LOCATION +b:OBJECT assignascommander OBJECT +b:OBJECT countfriendly ARRAY +b:STRING setmarkercolor STRING +b:OBJECT addmagazine STRING +b:OBJECT addmagazine ARRAY +b:ARRAY,OBJECT dotarget OBJECT +b:SCALAR,NaN / SCALAR,NaN +b:CONFIG / STRING +b:ARRAY,OBJECT sidechat STRING +b:OBJECT addvest STRING +b:OBJECT,GROUP reveal OBJECT +b:OBJECT,GROUP reveal ARRAY +b:GROUP setcurrentwaypoint ARRAY +b:OBJECT addhandgunitem STRING +b:OBJECT aimedattarget ARRAY +b:CONTROL ctrlsetfonth4 STRING +b:CONTROL ctrladdeventhandler ARRAY +b:SCALAR radiochannelsetlabel STRING +b:ANY remoteexeccall ARRAY +b:TEAM_MEMBER deleteresources ARRAY +b:SCALAR setwaves SCALAR +b:OBJECT setslingload OBJECT +b:ARRAY,OBJECT commandfire OBJECT +b:OBJECT setname STRING +b:OBJECT setname ARRAY +b:LOCATION setname STRING +b:OBJECT addweaponturret ARRAY +b:STRING createsite ARRAY +b:OBJECT addweaponcargo ARRAY +b:SCALAR getfsmvariable STRING +b:OBJECT disableai STRING +b:SCALAR setwindforce SCALAR +b:CONTROL drawellipse ARRAY +b:CONTROL ctrlsetfonth5 STRING +b:CONTROL lbsetdata ARRAY +b:OBJECT saveidentity STRING +b:LOCATION settype STRING +b:OBJECT camcommand STRING +b:OBJECT additemtobackpack STRING +b:OBJECT weaponaccessories STRING +b:OBJECT sethit ARRAY +b:OBJECT setparticlefire ARRAY +b:OBJECT getspeed STRING +b:OBJECT setammo ARRAY +b:OBJECT removemagazine ARRAY,STRING +b:OBJECT lockedcargo SCALAR +b:CONTROL ctrlsetfonth6 STRING +b:CONTROL ctrlsettooltipcolorbox ARRAY +b:ARRAY setwaypointloiterradius SCALAR +b:OBJECT deletevehiclecrew OBJECT +b:OBJECT turretlocal ARRAY +b:OBJECT addweaponitem ARRAY +b:GROUP removegroupicon SCALAR +b:STRING setmarkerbrushlocal STRING +b:OBJECT removeweapon STRING +b:CONTROL mapcenteroncamera BOOL +b:CONTROL lbvalue SCALAR +b:CONTROL lnbcolor ARRAY +b:CONTROL slidersetposition SCALAR +b:CONTROL slidersetrange ARRAY +b:SCALAR radiochannelsetcallsign STRING +b:TEAM_MEMBER addresources ARRAY +b:OBJECT setlightuseflare BOOL +b:OBJECT addweapon STRING +b:OBJECT campreparepos ARRAY +b:OBJECT setformationtask STRING +b:STRING setpipeffect ARRAY +b:OBJECT inflame BOOL +b:OBJECT camconstuctionsetparams ARRAY +b:OBJECT switchaction STRING +b:SCALAR setairportside SIDE +b:SCALAR publicvariableclient STRING +b:CONTROL ctrlsetchecked BOOL +b:OBJECT assigncurator OBJECT +b:CONTROL lbsettooltip ARRAY +b:OBJECT,GROUP allowfleeing SCALAR +b:OBJECT suppressfor SCALAR +b:CONTROL addeditorobject ARRAY +b:ARRAY showwaypoint STRING +b:ARRAY,OBJECT commandradio STRING +b:OBJECT vehicleradio STRING +b:CONTROL findeditorobject ARRAY +b:CONTROL findeditorobject ANY +b:OBJECT setflagowner OBJECT +b:CONTROL posworldtoscreen ARRAY +b:CONTROL ctrlsetposition ARRAY +b:CONTROL tvadd ARRAY +b:CONTROL tvsetvalue ARRAY +b:STRING callextension STRING +b:ARRAY vectorcos ARRAY +b:LOCATION setdirection SCALAR +b:ARRAY setwaypointhouseposition SCALAR +b:OBJECT campreparebank SCALAR +b:STRING setmarkertype STRING +b:SIDE addscoreside SCALAR +b:OBJECT,GROUP move ARRAY +b:OBJECT camcommitprepared SCALAR +b:OBJECT setvelocity ARRAY +b:OBJECT disablenvgequipment BOOL +b:CONTROL ctrlsetfade SCALAR +b:CONTROL lbsetpicture ARRAY +b:CONTROL lbsetcolorright ARRAY +b:CONTROL tvsetpicturecolorright ARRAY +b:OBJECT moveinany OBJECT +b:OBJECT ropedetach OBJECT +b:OBJECT setcurrenttask TASK +b:ARRAY waypointattachvehicle OBJECT +b:OBJECT sethidebehind ARRAY +b:SCALAR,NaN max SCALAR,NaN +b:OBJECT targetknowledge OBJECT +b:ARRAY,OBJECT commandwatch ARRAY +b:ARRAY,OBJECT commandwatch OBJECT +b:CONTROL show3dicons BOOL +b:OBJECT camsetdir ARRAY +b:ARRAY,OBJECT setsoundeffect ARRAY +b:CONTROL setobjectproxy ARRAY +b:CONTROL lnbsetpictureright ARRAY +b:CONTROL tvdelete ARRAY +b:TEAM_MEMBER setfromeditor BOOL +b:OBJECT setrotorbrakertd SCALAR +b:ARRAY,OBJECT distance ARRAY,OBJECT +b:LOCATION distance LOCATION +b:LOCATION distance ARRAY +b:ARRAY distance LOCATION +b:SCALAR,NaN mod SCALAR,NaN +b:ARRAY,OBJECT say3d STRING +b:ARRAY,OBJECT say3d ARRAY +b:SCALAR cutobj ARRAY +b:OBJECT moveinturret ARRAY +b:OBJECT removeitemfromuniform STRING +b:OBJECT setlightbrightness SCALAR +b:OBJECT directsay STRING +b:OBJECT buildingexit SCALAR +b:OBJECT synchronizetrigger ARRAY +b:OBJECT hasweapon STRING +b:OBJECT fireattarget ARRAY +b:OBJECT kbremovetopic STRING +b:ARRAY join OBJECT,GROUP +b:ARRAY,OBJECT dofollow OBJECT +b:OBJECT setposasl2 ARRAY +b:SCALAR,NaN min SCALAR,NaN +b:OBJECT setparticlerandom ARRAY +b:OBJECT enablesimulationglobal BOOL +b:CONTROL execeditorscript ARRAY +b:OBJECT playactionnow STRING +b:OBJECT magazinesturret ARRAY +b:CONTROL ctrlsetfontheight SCALAR +b:CONTROL ctrlsetfontheighth1 SCALAR +b:CONTROL ctrlsetautoscrollrewind BOOL +b:CONTROL ctrlseteventhandler ARRAY +b:OBJECT animate ARRAY +b:OBJECT setobjecttexture ARRAY +b:ARRAY targetsaggregate ARRAY +b:OBJECT removeitemfrombackpack STRING +b:ANY breakout STRING +b:OBJECT gethitpointdamage STRING +b:OBJECT assigntoairport SCALAR +b:CONTROL ctrlsetfonth1b STRING +b:CONTROL ctrlsetfontheighth2 SCALAR +b:OBJECT setwantedrpmrtd ARRAY +b:OBJECT removecuratorcameraarea SCALAR +b:TASK setsimpletaskdestination ARRAY +b:BOOL || BOOL +b:BOOL || CODE +b:ARRAY findemptypositionready ARRAY +b:ARRAY find ANY +b:STRING find STRING +b:OBJECT settriggertype STRING +b:OBJECT camsetbank SCALAR +b:OBJECT setunitrank STRING +b:BOOL and BOOL +b:BOOL and CODE +b:SWITCH : CODE +b:SCALAR,NaN == SCALAR,NaN +b:STRING == STRING +b:OBJECT == OBJECT +b:GROUP == GROUP +b:SIDE == SIDE +b:TEXT == TEXT +b:CONFIG == CONFIG +b:DISPLAY == DISPLAY +b:CONTROL == CONTROL +b:TEAM_MEMBER == TEAM_MEMBER +b:NetObject == NetObject +b:TASK == TASK +b:LOCATION == LOCATION +b:OBJECT hcselectgroup ARRAY +b:CONTROL ctrlsetfontheighth3 SCALAR +b:CONTROL ctrlsetautoscrollspeed SCALAR +b:CONTROL tvtext ARRAY +b:OBJECT enableautotrimrtd BOOL +b:SCALAR setrainbow SCALAR +b:OBJECT selectweaponturret ARRAY +b:OBJECT disableuavconnectability ARRAY +b:OBJECT enableropeattach BOOL +b:OBJECT targetsquery ARRAY +b:OBJECT leavevehicle OBJECT +b:GROUP leavevehicle OBJECT +b:CONTROL lookatpos ARRAY +b:STRING setmarkerdirlocal SCALAR +b:OBJECT removeprimaryweaponitem STRING +b:STRING servercommand STRING +b:OBJECT unassignitem STRING +b:OBJECT setammocargo SCALAR +b:OBJECT kbadddatabase STRING +b:CONTROL ctrlsetfontheighth4 SCALAR +b:CONTROL ctrlsetscale SCALAR +b:CONTROL ctrlsettextcolorsecondary ARRAY +b:CONTROL lbsetselectcolorright ARRAY +b:OBJECT setenginerpmrtd ARRAY +b:OBJECT enableuavconnectability ARRAY +b:OBJECT addaction ARRAY +b:GROUP addgroupicon ARRAY +b:OBJECT addweaponcargoglobal ARRAY +b:OBJECT settriggerarea ARRAY +b:BOOL or BOOL +b:BOOL or CODE +b:SCALAR,NaN < SCALAR,NaN +b:ARRAY,OBJECT glanceat ARRAY,OBJECT +b:CONTROL ctrlsetfonth3b STRING +b:CONTROL ctrlsetfontheighth5 SCALAR +b:CONTROL lbdata SCALAR +b:CONTROL tvcount ARRAY +b:OBJECT removecuratoreditingarea SCALAR +b:GROUP selectleader OBJECT +b:OBJECT additemcargo ARRAY +b:OBJECT camsetrelpos ARRAY +b:ARRAY,OBJECT nearsupplies SCALAR,ARRAY +b:OBJECT remotecontrol OBJECT +b:OBJECT setfuel SCALAR +b:OBJECT vehiclechat STRING +b:CONTROL ctrlsetfontheighth6 SCALAR +b:ARRAY,OBJECT dofsm ARRAY +b:CONTROL lbdelete SCALAR +b:TEAM_MEMBER removeteammember TEAM_MEMBER +b:SCALAR,NaN > SCALAR,NaN +b:OBJECT removeeventhandler ARRAY +b:ARRAY setwaypointspeed STRING +b:OBJECT setparticleclass STRING +b:CONTROL selecteditorobject STRING +b:GROUP copywaypoints GROUP +b:OBJECT settriggertimeout ARRAY +b:CODE else CODE +b:OBJECT sethitpointdamage ARRAY +b:CONTROL ctrlsetforegroundcolor ARRAY +b:DISPLAY displayremovealleventhandlers STRING +b:SCALAR radiochanneladd ARRAY +b:OBJECT setobjectmaterial ARRAY +b:OBJECT setposaslw ARRAY +b:ARRAY vectordotproduct ARRAY +b:OBJECT turretowner ARRAY +u:clearitemcargoglobal OBJECT +u:updateobjecttree CONTROL +u:formattext ARRAY +u:hcallgroups OBJECT +u:markerdir STRING +u:captivenum OBJECT +u:triggertext OBJECT +u:setgroupiconsselectable BOOL +u:playersnumber SIDE +u:camerainterest OBJECT +u:clearweaponcargo OBJECT +u:owner OBJECT +u:ceil SCALAR,NaN +u:boundingcenter OBJECT +u:isautohoveron OBJECT +u:enableenvironment BOOL +u:lbcolorright ARRAY +u:tvsetpictureright ARRAY +u:lnbdeletecolumn ARRAY +u:onplayerconnected STRING,CODE +u:fillweaponsfrompool OBJECT +u:weaponsitems OBJECT +u:enginesisonrtd OBJECT +u:getdlcs SCALAR +u:backpackcargo OBJECT +u:uniform OBJECT +u:showcompass BOOL +u:iskeyactive STRING +u:atltoasl ARRAY +u:showradio BOOL +u:flag OBJECT +u:getarray CONFIG +u:islighton OBJECT +u:getammocargo OBJECT +u:vectornormalized ARRAY +u:showwarrant BOOL +u:forcemap BOOL +u:showpad BOOL +u:hint STRING,TEXT +u:vectorup OBJECT +u:everycontainer OBJECT +u:getfatigue OBJECT +u:keyname SCALAR +u:setcamshakedefparams ARRAY +u:lnbcurselrow CONTROL +u:lnbcurselrow SCALAR +u:lnbsetcurselrow ARRAY +u:enablediaglegend BOOL +u:incapacitatedstate OBJECT +u:hcselected OBJECT +u:getbackpackcargo OBJECT +u:markercolor STRING +u:progressloadingscreen SCALAR +u:createmine ARRAY +u:showwatch BOOL +u:diag_log ANY +u:sendudpmessage ARRAY +u:unitbackpack OBJECT +u:isnumber CONFIG +u:ctrlidc CONTROL +u:closedialog SCALAR +u:tvsetcursel ARRAY +u:lnbsetcolumnspos ARRAY +u:lnbpicture ARRAY +u:magazinesammocargo OBJECT +u:deletestatus STRING +u:rotorsforcesrtd OBJECT +u:createvehiclecrew OBJECT +u:ctrlmodeldirandup CONTROL +u:landresult OBJECT +u:triggeractivation OBJECT +u:tolower STRING +u:waypointvisible ARRAY +u:enablesatnormalondetail BOOL +u:ctrlidd DISPLAY +u:buttonsetaction ARRAY +u:lnbdata ARRAY +u:getrotorbrakertd OBJECT +u:reloadenabled OBJECT +u:commandstop ARRAY,OBJECT +u:waypointtimeout ARRAY +u:removeheadgear OBJECT +u:backpack OBJECT +u:loaduniform OBJECT +u:showcommandingmenu STRING +u:cuttext ARRAY +u:deletemarkerlocal STRING +u:actionname STRING +u:captive OBJECT +u:compilefinal STRING +u:lnbsettext ARRAY +u:for STRING +u:for ARRAY +u:estimatedtimeleft SCALAR +u:getmarkertype STRING +u:screentoworld ARRAY +u:getdir OBJECT +u:inflamed OBJECT +u:playmusic STRING +u:playmusic ARRAY +u:ctrlautoscrollrewind CONTROL +u:ctrlchecked CONTROL +u:cbchecked CONTROL +u:lbsetpicturecolor ARRAY +u:getmass OBJECT +u:processdiarylink STRING +u:atg SCALAR,NaN +u:stance OBJECT +u:flagowner OBJECT +u:deg SCALAR,NaN +u:airportside SCALAR +u:buttonaction CONTROL +u:buttonaction SCALAR +u:lbadd ARRAY +u:queryweaponpool STRING +u:curatoreditingareatype OBJECT +u:getfieldmanualstartpage DISPLAY +u:fullcrew OBJECT +u:fullcrew ARRAY +u:binocular OBJECT +u:sqrt SCALAR,NaN +u:typename ANY +u:forcerespawn OBJECT +u:assignedgunner OBJECT +u:composetext ARRAY +u:unitrecoilcoefficient OBJECT +u:sethudmovementlevels ARRAY +u:isarray CONFIG +u:ctrlcommitted CONTROL +u:movetime OBJECT +u:lbpicture ARRAY +u:lnbaddcolumn ARRAY +u:lnbsetpicturecolorselectedright ARRAY +u:getrepaircargo OBJECT +u:getsuppression OBJECT +u:didjipowner OBJECT +u:simulcloudocclusion ARRAY +u:setsimulweatherlayers SCALAR +u:setdate ARRAY +u:assignedteam OBJECT +u:createagent ARRAY +u:itemswithmagazines OBJECT +u:removevest OBJECT +u:primaryweaponitems OBJECT +u:onhcgroupselectionchanged STRING,CODE +u:driver OBJECT +u:animationstate OBJECT +u:formationdirection OBJECT +u:titletext ARRAY +u:inputaction STRING +u:ismanualfire OBJECT +u:ctrlmapanimclear CONTROL +u:weaponstate ARRAY,OBJECT +u:islocalized STRING +u:lbcolor ARRAY +u:lbsetpicturecolorselected ARRAY +u:lnbaddarray ARRAY +u:magazinesdetail OBJECT +u:simpletasks OBJECT +u:createguardedpoint ARRAY +u:removeuniform OBJECT +u:uniformmagazines OBJECT +u:waypointspeed ARRAY +u:asltoagl ARRAY +u:failmission STRING +u:markertype STRING +u:currentzeroing OBJECT +u:ctrlscale CONTROL +u:ctrlmapanimcommit CONTROL +u:lbpictureright ARRAY +u:secondaryweapon OBJECT +u:assignedvehiclerole OBJECT +u:direction OBJECT +u:direction LOCATION +u:asin SCALAR,NaN +u:creategroup SIDE +u:vestitems OBJECT +u:mapanimadd ARRAY +u:removemissioneventhandler ARRAY +u:lnbclear CONTROL +u:lnbclear SCALAR +u:lnbsetpicturecolorselected ARRAY +u:magazinesdetailvest OBJECT +u:playsound3d ARRAY +u:getconnecteduav OBJECT +u:reload OBJECT +u:hcshowbar BOOL +u:rating OBJECT +u:dissolveteam STRING +u:nextmenuitemindex CONTROL +u:forceatpositionrtd ARRAY +u:unassigncurator OBJECT +u:leaderboardsrequestuploadscorekeepbest ARRAY +u:visiblepositionasl OBJECT +u:waypointposition ARRAY +u:localize STRING +u:scriptname STRING +u:importallgroups CONTROL +u:isobjecthidden OBJECT +u:deletegroup GROUP +u:lasertarget OBJECT +u:publicvariableserver STRING +u:ctrlshown CONTROL +u:tvsort ARRAY +u:setwinddir ARRAY +u:isdlcavailable SCALAR +u:currenttask OBJECT +u:saveoverlay CONTROL +u:showhud BOOL +u:showhud ARRAY +u:loadbackpack OBJECT +u:enablecamshake BOOL +u:radiochannelcreate ARRAY +u:putweaponpool OBJECT +u:createteam ARRAY +u:getdlcusagetime SCALAR +u:ctrldelete CONTROL +u:nearestlocation ARRAY +u:classname LOCATION +u:ppeffectcreate ARRAY +u:commandgetout ARRAY,OBJECT +u:roadsconnectedto OBJECT +u:hideobject OBJECT +u:triggertimeout OBJECT +u:fromeditor TEAM_MEMBER +u:curatorpoints OBJECT +u:getobjectdlc OBJECT +u:squadparams OBJECT +u:leaderboarddeinit STRING +u:vectordirvisual OBJECT +u:savevar STRING +u:parsetext STRING +u:ongroupiconoverenter STRING,CODE +u:getposatl OBJECT +u:sleep SCALAR +u:secondaryweaponitems OBJECT +u:cos SCALAR,NaN +u:someammo OBJECT +u:addmissioneventhandler ARRAY +u:tvclear SCALAR +u:tvclear CONTROL +u:tvcursel SCALAR +u:tvcursel CONTROL +u:groupfromnetid STRING +u:settrafficgap ARRAY +u:opendlcpage SCALAR +u:remoteexec ARRAY +u:verifysignature STRING +u:commitoverlay CONTROL +u:uniformcontainer OBJECT +u:text STRING +u:text LOCATION +u:clearoverlay CONTROL +u:unassignteam OBJECT +u:actionkeysnames ARRAY,STRING +u:actionkeysnamesarray ARRAY,STRING +u:movetofailed OBJECT +u:atan SCALAR,NaN +u:damage OBJECT +u:collapseobjecttree CONTROL +u:side OBJECT +u:side GROUP +u:side LOCATION +u:titlersc ARRAY +u:wfsidetext SIDE +u:wfsidetext OBJECT +u:wfsidetext GROUP +u:tvsetdata ARRAY +u:allvariables CONTROL +u:allvariables TEAM_MEMBER +u:allvariables NAMESPACE +u:allvariables OBJECT +u:allvariables GROUP +u:allvariables TASK +u:allvariables LOCATION +u:ongroupiconclick STRING,CODE +u:assigneditems OBJECT +u:unitready ARRAY,OBJECT +u:params ARRAY +u:setterraingrid SCALAR +u:isnull OBJECT +u:isnull GROUP +u:isnull SCRIPT +u:isnull CONTROL +u:isnull DISPLAY +u:isnull NetObject +u:isnull TASK +u:isnull LOCATION +u:triggertype OBJECT +u:onbriefingteamswitch STRING +u:onplayerdisconnected STRING,CODE +u:settrafficdensity ARRAY +u:setcurrentchannel SCALAR +u:default CODE +u:firstbackpack OBJECT +u:formleader OBJECT +u:loadfile STRING +u:checkaifeature STRING +u:isonroad ARRAY,OBJECT +u:titlecut ARRAY +u:oncommandmodechanged STRING,CODE +u:assignedtarget OBJECT +u:istouchingground OBJECT +u:magazinesdetailbackpack OBJECT +u:members TEAM_MEMBER +u:isautonomous OBJECT +u:removebackpackglobal OBJECT +u:triggerarea OBJECT +u:hintsilent STRING,TEXT +u:ln SCALAR,NaN +u:getmodelinfo OBJECT +u:setmouseposition ARRAY +u:isclass CONFIG +u:lbsetvalue ARRAY +u:lnbsetpicturecolorright ARRAY +u:agent TEAM_MEMBER +u:enginestorquertd OBJECT +u:configsourcemod CONFIG +u:taskcompleted TASK +u:locationposition LOCATION +u:taskhint ARRAY +u:getmarkersize STRING +u:velocitymodelspace OBJECT +u:handgunmagazine OBJECT +u:numbertodate ARRAY +u:faction OBJECT +u:group OBJECT +u:synchronizedobjects OBJECT +u:terminate SCRIPT +u:nearestobjects ARRAY +u:camusenvg BOOL +u:objectparent OBJECT +u:isforcedwalk OBJECT +u:currentvisionmode OBJECT +u:gearslotdata CONTROL +u:lbtext ARRAY +u:lnbsetpicturecolor ARRAY +u:drop ARRAY +u:getoxygenremaining OBJECT +u:enabledebriefingstats ARRAY +u:leaderboardstate STRING +u:exportjipmessages STRING +u:deletelocation LOCATION +u:soldiermagazines OBJECT +u:format ARRAY +u:finite SCALAR,NaN +u:waypointhouseposition ARRAY +u:geteditorcamera CONTROL +u:showmap BOOL +u:deletemarker STRING +u:worldtoscreen ARRAY +u:list OBJECT +u:leader OBJECT +u:leader GROUP +u:leader TEAM_MEMBER +u:currentweapon OBJECT +u:setdetailmapblendpars ARRAY +u:toarray STRING +u:currentmuzzle OBJECT +u:lbcursel CONTROL +u:lbcursel SCALAR +u:lnbsetvalue ARRAY +u:enginesrpmrtd OBJECT +u:wingsforcesrtd OBJECT +u:isobjectrtd OBJECT +u:setdefaultcamera ARRAY +u:isturnedout OBJECT +u:surfacenormal ARRAY +u:primaryweaponmagazine OBJECT +u:getmarkerpos STRING +u:cameraeffectenablehud BOOL +u:goto STRING +u:configname CONFIG +u:ctrlhtmlloaded CONTROL +u:lbselection CONTROL +u:lnbgetcolumnsposition CONTROL +u:lnbgetcolumnsposition SCALAR +u:lnbsetcolorright ARRAY +u:addmusiceventhandler ARRAY +u:isweapondeployed OBJECT +u:taskdescription TASK +u:waypointtype ARRAY +u:markersize STRING +u:handgunitems OBJECT +u:waypointname ARRAY +u:preloadtitlersc ARRAY +u:setacctime SCALAR +u:load OBJECT +u:hmd OBJECT +u:deletewaypoint ARRAY +u:tg SCALAR,NaN +u:morale OBJECT +u:lineintersectswith ARRAY +u:execvm STRING +u:ctrlshow ARRAY +u:lbsetselectcolor ARRAY +u:queryitemspool STRING +u:enablecaustics BOOL +u:isbleeding OBJECT +u:removefromremainscollector ARRAY +u:allturrets ARRAY +u:allturrets OBJECT +u:ctrlparentcontrolsgroup CONTROL +u:getposvisual OBJECT +u:with NAMESPACE +u:not BOOL +u:waypointattachedobject ARRAY +u:assert BOOL +u:namesound OBJECT +u:setwind ARRAY +u:createmarkerlocal ARRAY +u:settrafficdistance SCALAR +u:tvsettooltip ARRAY +u:ropecreate ARRAY +u:str ANY +u:execfsm STRING +u:enableradio BOOL +u:fleeing OBJECT +u:setobjectviewdistance SCALAR +u:setobjectviewdistance ARRAY +u:isnil STRING,CODE +u:visibleposition OBJECT +u:groupowner GROUP +u:call CODE +u:restarteditorcamera CONTROL +u:locked OBJECT +u:getweaponcargo OBJECT +u:setshadowdistance SCALAR +u:createsoundsource ARRAY +u:deactivatekey STRING +u:copytoclipboard STRING +u:isshowing3dicons CONTROL +u:ctrlautoscrollspeed CONTROL +u:ctrlmapanimdone CONTROL +u:teammember OBJECT +u:isagent TEAM_MEMBER +u:isburning OBJECT +u:setlocalwindparams ARRAY +u:tostring ARRAY +u:actionkeysimages ARRAY,STRING +u:assignedvehicle OBJECT +u:hcremoveallgroups OBJECT +u:backpackmagazines OBJECT +u:waituntil CODE +u:onpreloadstarted STRING,CODE +u:units GROUP +u:units OBJECT +u:movetocompleted OBJECT +u:actionkeys STRING +u:formationposition OBJECT +u:deletesite OBJECT +u:keyimage SCALAR +u:deletecollection OBJECT +u:scriptdone SCRIPT +u:createvehicle ARRAY +u:aisfinishheal ARRAY +u:lbsortbyvalue CONTROL +u:tvsetpicture ARRAY +u:lnbvalue ARRAY +u:stopenginertd OBJECT +u:configsourcemodlist CONFIG +u:completedfsm SCALAR +u:hidebody OBJECT +u:clearmagazinecargo OBJECT +u:moveout OBJECT +u:currentweaponmode OBJECT +u:playmission ARRAY +u:resetsubgroupdirection OBJECT +u:ctrlmapscale CONTROL +u:progressposition CONTROL +u:hostmission ARRAY +u:ctrlenable ARRAY +u:lnbtext ARRAY +u:enabletraffic BOOL +u:requiredversion STRING +u:triggerstatements OBJECT +u:expecteddestination OBJECT +u:currentthrowable OBJECT +u:clearweaponcargoglobal OBJECT +u:setgroupiconsvisible ARRAY +u:mineactive OBJECT +u:position OBJECT +u:position LOCATION +u:createdialog STRING +u:tvsortbyvalue ARRAY +u:getwingspositionrtd OBJECT +u:ropeunwind ARRAY +u:canunloadincombat OBJECT +u:eyedirection OBJECT +u:exp SCALAR,NaN +u:enablesentences BOOL +u:loadabs OBJECT +u:round SCALAR,NaN +u:items OBJECT +u:gearslotammocount CONTROL +u:tvsetpicturecolor ARRAY +u:onbriefingnotes STRING +u:waypointloitertype ARRAY +u:uavcontrol OBJECT +u:attachedto OBJECT +u:setstatvalue ARRAY +u:endmission STRING +u:markershape STRING +u:waypointbehaviour ARRAY +u:commander OBJECT +u:waypointscript ARRAY +u:vest OBJECT +u:preloadcamera ARRAY +u:canmove OBJECT +u:waypointstatements ARRAY +u:backpackitems OBJECT +u:lineintersectssurfaces ARRAY +u:lbtextright ARRAY +u:teamtype TEAM_MEMBER +u:teamname TEAM_MEMBER +u:getdlcassetsusagebyname STRING +u:setplayable OBJECT +u:addswitchableunit OBJECT +u:! BOOL +u:parsenumber STRING +u:parsenumber BOOL +u:uniformitems OBJECT +u:floor SCALAR,NaN +u:rankid OBJECT +u:cutrsc ARRAY +u:lbclear CONTROL +u:lbclear SCALAR +u:tvdata ARRAY +u:tvvalue ARRAY +u:lnbsetpicture ARRAY +u:pickweaponpool OBJECT +u:enginespowerrtd OBJECT +u:removeallcuratoreditingareas OBJECT +u:isinremainscollector OBJECT +u:getobjectmaterials OBJECT +u:preprocessfilelinenumbers STRING +u:preprocessfile STRING +u:removeallhandgunitems OBJECT +u:datetonumber ARRAY +u:camcommitted OBJECT +u:lnbaddrow ARRAY +u:lnbtextright ARRAY +u:lnbsettextright ARRAY +u:getenginetargetrpmrtd OBJECT +u:ropelength OBJECT +u:createlocation ARRAY +u:goggles OBJECT +u:backpackcontainer OBJECT +u:headgear OBJECT +u:name OBJECT +u:name LOCATION +u:alive OBJECT +u:comment STRING +u:showgps BOOL +u:dogetout ARRAY,OBJECT +u:getmarkercolor STRING +u:setsystemofunits SCALAR +u:getbleedingremaining OBJECT +u:showuavfeed BOOL +u:ropeattachedobjects OBJECT +u:type TASK +u:type LOCATION +u:nearestlocationwithdubbing ARRAY +u:simulationenabled OBJECT +u:unlockachievement STRING +u:waypoints OBJECT,GROUP +u:gunner OBJECT +u:closeoverlay CONTROL +u:waypointattachedvehicle ARRAY +u:openmap ARRAY +u:openmap BOOL +u:tvpictureright ARRAY +u:skill OBJECT +u:magazinesallturrets OBJECT +u:synchronizedtriggers ARRAY +u:weaponlowered OBJECT +u:registeredtasks TEAM_MEMBER +u:rectangular LOCATION +u:ppeffectdestroy SCALAR +u:ppeffectdestroy ARRAY +u:playscriptedmission ARRAY +u:playsound STRING +u:playsound ARRAY +u:markerpos STRING +u:removeallcontainers OBJECT +u:skiptime SCALAR +u:triggeractivated OBJECT +u:removeallweapons OBJECT +u:isrealtime CONTROL +u:addweaponpool ARRAY +u:isautostartupenabledrtd OBJECT +u:objectcurators OBJECT +u:ropes OBJECT +u:vehicle OBJECT +u:sin SCALAR,NaN +u:clearbackpackcargo OBJECT +u:unassignvehicle OBJECT +u:removebackpack OBJECT +u:formationmembers OBJECT +u:isformationleader OBJECT +u:removeswitchableunit OBJECT +u:count ARRAY +u:count STRING +u:count CONFIG +u:getdirvisual OBJECT +u:nearestbuilding OBJECT +u:nearestbuilding ARRAY +u:showchat BOOL +u:tvtooltip ARRAY +u:lbsetpictureright ARRAY +u:removeallcuratoraddons OBJECT +u:waypointsenableduav OBJECT +u:ropedestroy OBJECT +u:taskstate TASK +u:activatekey STRING +u:lockeddriver OBJECT +u:if BOOL +u:breakto STRING +u:isplayer OBJECT +u:getdammage OBJECT +u:reverse ARRAY +u:secondaryweaponmagazine OBJECT +u:hintc STRING +u:titleobj ARRAY +u:assignedcommander OBJECT +u:createtrigger ARRAY +u:iswalking OBJECT +u:inheritsfrom CONFIG +u:ctrltextsecondary CONTROL +u:numberofenginesrtd OBJECT +u:addforcegeneratorrtd ARRAY +u:scopename STRING +u:log SCALAR,NaN +u:dostop ARRAY,OBJECT +u:ctrltext CONTROL +u:ctrltext SCALAR +u:lbsort CONTROL +u:lbsort ARRAY +u:ctrlactivate CONTROL +u:lbsetcursel ARRAY +u:tvpicture ARRAY +u:getstatvalue STRING +u:ppeffectcommitted STRING +u:ppeffectcommitted SCALAR +u:deletecenter SIDE +u:waypointformation ARRAY +u:getposaslvisual OBJECT +u:boundingbox OBJECT +u:pitch OBJECT +u:velocity OBJECT +u:enableteamswitch BOOL +u:buldozer_loadnewroads STRING +u:buldozer_enableroaddiag BOOL +u:lnbpictureright ARRAY +u:enablestressdamage BOOL +u:underwater OBJECT +u:ropeattachedto OBJECT +u:attachedobject LOCATION +u:setcompassoscillation ARRAY +u:startloadingscreen ARRAY +u:canstand OBJECT +u:scudstate OBJECT +u:ongroupiconoverleave STRING,CODE +u:lbsetcolor ARRAY +u:deleteidentity STRING +u:curatorregisteredobjects OBJECT +u:attachedobjects OBJECT +u:isweaponrested OBJECT +u:eyepos OBJECT +u:vectorupvisual OBJECT +u:param ARRAY +u:markeralpha STRING +u:campreloaded OBJECT +u:+ SCALAR,NaN +u:+ ARRAY +u:currentwaypoint GROUP +u:hideobjectglobal OBJECT +u:getpos OBJECT +u:getpos LOCATION +u:removeallactions OBJECT +u:currentmagazinedetail OBJECT +u:ctrlmapmouseover CONTROL +u:getterrainheightasl ARRAY +u:ctrltextheight CONTROL +u:lbsetpicturecolordisabled ARRAY +u:tvcollapse ARRAY +u:lnbsetdata ARRAY +u:lnbcolorright ARRAY +u:additempool ARRAY +u:onbriefingplan STRING +u:onbriefinggroup STRING +u:onmapsingleclick STRING,CODE +u:magazines OBJECT +u:gettrimoffsetrtd OBJECT +u:iscollisionlighton OBJECT +u:vectormagnitudesqr ARRAY +u:disableremotesensors BOOL +u:creatediarylink ARRAY +u:nearestobject ARRAY +u:compile STRING +u:stopped OBJECT +u:currentcommand OBJECT +u:removegoggles OBJECT +u:ishidden OBJECT +u:attackenabled OBJECT,GROUP +u:createmarker ARRAY +u:typeof OBJECT +u:textlog ANY +u:setplayerrespawntime SCALAR +u:assigneddriver OBJECT +u:tan SCALAR,NaN +u:canfire OBJECT +u:getitemcargo OBJECT +u:markerbrush STRING +u:enableengineartillery BOOL +u:istext CONFIG +u:getnumber CONFIG +u:positioncameratoworld ARRAY +u:sliderposition CONTROL +u:sliderposition SCALAR +u:sliderspeed CONTROL +u:sliderspeed SCALAR +u:ctrlsettext ARRAY +u:tvexpand ARRAY +u:oneachframe STRING,CODE +u:curatorcameraarea OBJECT +u:settimemultiplier SCALAR +u:enableaudiofeature ARRAY +u:taskdestination TASK +u:- SCALAR,NaN +u:hcleader GROUP +u:lnbdeleterow ARRAY +u:lnbsetcolor ARRAY +u:primaryweapon OBJECT +u:magazinesdetailuniform OBJECT +u:getdescription OBJECT +u:taskresult TASK +u:getgroupiconparams GROUP +u:getposasl OBJECT +u:clearallitemsfrombackpack OBJECT +u:creategeardialog ARRAY +u:switch ANY +u:setcamshakeparams ARRAY +u:terrainintersectasl ARRAY +u:ctrlsetfocus CONTROL +u:slidersetspeed ARRAY +u:querymagazinepool STRING +u:netid OBJECT +u:netid GROUP +u:resources TEAM_MEMBER +u:airdensityrtd SCALAR +u:ropeendposition OBJECT +u:while CODE +u:deletevehicle OBJECT +u:preloadtitleobj ARRAY +u:formationleader OBJECT +u:throw ANY +u:getposworld OBJECT +u:showcinemaborder BOOL +u:onteamswitch STRING,CODE +u:everybackpack OBJECT +u:addcamshake ARRAY +u:confighierarchy CONFIG +u:ctrlenabled CONTROL +u:ctrlenabled SCALAR +u:getwingsorientationrtd OBJECT +u:getartilleryammo ARRAY +u:ctrlmodel CONTROL +u:addtoremainscollector ARRAY +u:getobjecttextures OBJECT +u:channelenabled SCALAR +u:remoteexeccall ARRAY +u:getallhitpointsdamage OBJECT +u:fuel OBJECT +u:waypointcombatmode ARRAY +u:groupselectedunits OBJECT +u:sliderrange CONTROL +u:sliderrange SCALAR +u:lbsetdata ARRAY +u:collectivertd OBJECT +u:setmusiceventhandler ARRAY +u:getfuelcargo OBJECT +u:taskparent TASK +u:speed OBJECT +u:scoreside SIDE +u:try CODE +u:publicvariable STRING +u:toupper STRING +u:removeallitems OBJECT +u:lightdetachobject OBJECT +u:speaker OBJECT +u:camdestroy OBJECT +u:mapgridposition ARRAY,OBJECT +u:ctrlfade CONTROL +u:curatorwaypointcost OBJECT +u:sethorizonparallaxcoef SCALAR +u:openyoutubevideo STRING +u:ctrlclassname CONTROL +u:configproperties ARRAY +u:leaderboardrequestrowsglobal ARRAY +u:simulinclouds ARRAY +u:taskchildren TASK +u:priority TASK +u:lightison OBJECT +u:assignedcargo OBJECT +u:mapcenteroncamera CONTROL +u:detach OBJECT +u:crew OBJECT +u:waypointtimeoutcurrent GROUP +u:allmissionobjects STRING +u:preloadsound STRING +u:systemchat STRING +u:lbvalue ARRAY +u:lnbcolor ARRAY +u:slidersetposition ARRAY +u:slidersetrange ARRAY +u:settrafficspeed ARRAY +u:removeallmusiceventhandlers STRING +u:detectedmines SIDE +u:currenttasks TEAM_MEMBER +u:cancelsimpletaskdestination TASK +u:size LOCATION +u:echo STRING +u:triggerattachedvehicle OBJECT +u:showsubtitles BOOL +u:random SCALAR,NaN +u:servercommandavailable STRING +u:local OBJECT +u:local GROUP +u:lineintersects ARRAY +u:ctrlautoscrolldelay CONTROL +u:magazinesammofull OBJECT +u:lbsettooltip ARRAY +u:isuavconnected OBJECT +u:unitaddons STRING +u:difficultyenabled STRING +u:disableuserinput BOOL +u:geteditormode CONTROL +u:selectplayer OBJECT +u:acos SCALAR,NaN +u:uisleep SCALAR +u:unitpos OBJECT +u:ctrlparent CONTROL +u:tvadd ARRAY +u:tvsetvalue ARRAY +u:isabletobreathe OBJECT +u:removemusiceventhandler ARRAY +u:weaponinertia OBJECT +u:getplayerchannel OBJECT +u:ropeattachenabled OBJECT +u:effectivecommander OBJECT +u:groupid GROUP +u:agltoasl ARRAY +u:handshit OBJECT +u:behaviour OBJECT +u:supportinfo STRING +u:lbsetpicture ARRAY +u:lbsetcolorright ARRAY +u:tvsetpicturecolorright ARRAY +u:handgunweapon OBJECT +u:rotorsrpmrtd OBJECT +u:curatoreditableobjects OBJECT +u:drawline3d ARRAY +u:drawicon3d ARRAY +u:leaderboardgetrows STRING +u:playableslotsnumber SIDE +u:selectbestplaces ARRAY +u:setviewdistance SCALAR +u:activateaddons ARRAY +u:ismarkedforcollection OBJECT +u:removeallmissioneventhandlers STRING +u:tvdelete ARRAY +u:lnbsetpictureright ARRAY +u:weaponsitemscargo OBJECT +u:forcegeneratorrtd SCALAR +u:getcenterofmass OBJECT +u:leaderboardinit STRING +u:leaderboardrequestrowsglobalarounduser ARRAY +u:ropeunwound OBJECT +u:currentmagazine OBJECT +u:waypointcompletionradius ARRAY +u:waypointshow ARRAY +u:getposatlvisual OBJECT +u:markertext STRING +u:abs SCALAR,NaN +u:cutobj ARRAY +u:surfaceiswater ARRAY +u:titlefadeout SCALAR +u:iscopilotenabled OBJECT +u:gettext CONFIG +u:ctrlposition CONTROL +u:finddisplay SCALAR +u:lbsize CONTROL +u:lbsize SCALAR +u:weapons OBJECT +u:isautotrimonrtd OBJECT +u:getburningvalue OBJECT +u:boundingboxreal OBJECT +u:simulclouddensity ARRAY +u:setarmorypoints SCALAR +u:face OBJECT +u:rank OBJECT +u:score OBJECT +u:roledescription OBJECT +u:weightrtd OBJECT +u:curatoreditingarea OBJECT +u:getpersonuseddlcs OBJECT +u:getslingload OBJECT +u:itemcargo OBJECT +u:needreload OBJECT +u:onpreloadfinished STRING,CODE +u:vestmagazines OBJECT +u:clearitemcargo OBJECT +u:getmagazinecargo OBJECT +u:breakout STRING +u:lineintersectsobjs ARRAY +u:deleteteam TEAM_MEMBER +u:showcuratorcompass BOOL +u:debriefingtext STRING +u:ropecut ARRAY +u:servercommandexecutable STRING +u:speedmode OBJECT,GROUP +u:formation OBJECT,GROUP +u:formation TEAM_MEMBER +u:private ARRAY,STRING +u:weaponcargo OBJECT +u:hintcadet STRING,TEXT +u:setaperture SCALAR +u:isengineon OBJECT +u:selectededitorobjects CONTROL +u:ingameuiseteventhandler ARRAY +u:loadvest OBJECT +u:textlogformat ARRAY +u:ctrltype CONTROL +u:gearidcammocount SCALAR +u:tvtext ARRAY +u:waypointloiterradius ARRAY +u:removeallprimaryweaponitems OBJECT +u:surfacetype ARRAY +u:magazinecargo OBJECT +u:waypointdescription ARRAY +u:getobjecttype OBJECT +u:camtarget OBJECT +u:removeallassigneditems OBJECT +u:vehiclevarname OBJECT +u:combatmode OBJECT,GROUP +u:servercommand STRING +u:removeallitemswithmagazines OBJECT +u:clearmagazinecargoglobal OBJECT +u:lbsetselectcolorright ARRAY +u:addmagazinepool ARRAY +u:magazinesammo OBJECT +u:synchronizedwaypoints OBJECT +u:synchronizedwaypoints ARRAY +u:ctrlmodelscale CONTROL +u:leaderboardsrequestuploadscore ARRAY +u:getgroupicons GROUP +u:triggertimeoutcurrent OBJECT +u:vectordir OBJECT +u:cleargroupicons GROUP +u:vestcontainer OBJECT +u:terrainintersect ARRAY +u:entities STRING +u:lbdata ARRAY +u:tvcount ARRAY +u:objectfromnetid STRING +u:getassignedcuratorunit OBJECT +u:curatoraddons OBJECT +u:curatorcameraareaceiling OBJECT +u:removeallcuratorcameraareas OBJECT +u:vectormagnitude ARRAY +u:leaderboardrequestrowsfriends STRING +u:nearestlocations ARRAY +u:rad SCALAR,NaN +u:precision OBJECT +u:getwppos ARRAY +u:asltoatl ARRAY +u:aimpos OBJECT +u:debuglog ANY +u:ctrlvisible SCALAR +u:lbdelete ARRAY +u:getassignedcuratorlogic OBJECT +u:linearconversion ARRAY +u:lifestate OBJECT +u:createcenter SIDE +u:case ANY +u:image STRING +u:sizeof STRING +u:formationtask OBJECT +u:enablesaving BOOL,ARRAY +u:clearbackpackcargoglobal OBJECT +u:getplayeruid OBJECT +u:lnbsize CONTROL +u:lnbsize SCALAR +u:sendaumessage ARRAY +u:getposaslw OBJECT +u:setaperturenew ARRAY +u:allcontrols DISPLAY +u:importance LOCATION +n:isstressdamageenabled +n:shownwatch +n:shownwarrant +n:opfor +n:worldsize +n:distributionregion +n:diag_frameno +n:safezonew +n:safezoneh +n:disableserialization +n:difficultyenabledrtd +n:allunitsuav +n:getclientstate +n:gettotaldlcusagetime +n:allmines +n:missiondifficulty +n:didjip +n:shownradio +n:sideenemy +n:cameraon +n:missionstart +n:nextweatherchange +n:allsites +n:allgroups +n:safezonex +n:cursortarget +n:getshadowdistance +n:controlnull +n:tasknull +n:curatormouseover +n:playerside +n:daytime +n:radiovolume +n:servername +n:lightnings +n:date +n:allplayers +n:safezoney +n:cameraview +n:moonintensity +n:freelook +n:clearmagazinepool +n:nil +n:clearforcesrtd +n:showncuratorcompass +n:simulweathersync +n:markasfinishedonsteam +n:alldisplays +n:getelevationoffset +n:sideunknown +n:clearradio +n:saveprofilenamespace +n:savingenabled +n:difficulty +n:windrtd +n:allcurators +n:agents +n:briefingname +n:grpnull +n:shownmap +n:shownpad +n:civilian +n:sidefriendly +n:savegame +n:mapanimdone +n:finishmissioninit +n:fog +n:fogparams +n:humidity +n:teamswitchenabled +n:allunits +n:hcshownbar +n:diag_ticktime +n:clearweaponpool +n:true +n:issteammission +n:teammembernull +n:hasinterface +n:objnull +n:time +n:benchmark +n:visiblewatch +n:visiblegps +n:selectnoplayer +n:estimatedendservertime +n:resetcamshake +n:pi +n:disabledebriefingstats +n:shownuavfeed +n:isautotest +n:getmissiondlcs +n:isserver +n:blufor +n:rainbow +n:fogforecast +n:logentities +n:reversedmousey +n:diag_activemissionfsms +n:endloadingscreen +n:ismultiplayer +n:particlesquality +n:savejoysticks +n:hudmovementlevels +n:buldozer_reloadopermap +n:istuthintsenabled +n:airdensitycurvertd +n:shownhud +n:productversion +n:copyfromclipboard +n:groupiconselectable +n:missionnamespace +n:uinamespace +n:activatedaddons +n:viewdistance +n:librarydisclaimers +n:clearitempool +n:dialog +n:profilenamesteam +n:player +n:shownartillerycomputer +n:showncompass +n:visiblecompass +n:west +n:exit +n:mapanimclear +n:mapanimcommit +n:vehicles +n:switchableunits +n:playerrespawntime +n:playableunits +n:currentnamespace +n:linebreak +n:language +n:cheatsenabled +n:opencuratorinterface +n:curatorselected +n:slingloadassistantshown +n:buldozer_isenabledroaddiag +n:sidelogic +n:runinitscript +n:winddir +n:worldname +n:diag_fps +n:getobjectviewdistance +n:sunormoon +n:allmapmarkers +n:getdlcassetsusage +n:independent +n:soundvolume +n:gusts +n:alldead +n:parsingnamespace +n:missionconfigfile +n:halt +n:getremotesensorsdisabled +n:scriptnull +n:getartillerycomputersettings +n:east +n:overcast +n:rain +n:teamswitch +n:diag_activesqsscripts +n:safezonexabs +n:getresolution +n:visiblemap +n:servertime +n:forceweatherchange +n:curatorcamera +n:netobjnull +n:timemultiplier +n:shownchat +n:windstr +n:armorypoints +n:groupiconsvisible +n:profilenamespace +n:isdedicated +n:isstreamfriendlyuienabled +n:configfile +n:teams +n:currentchannel +n:showngps +n:musicvolume +n:wind +n:waves +n:overcastforecast +n:alldeadmen +n:loadgame +n:systemofunits +n:ispipenabled +n:displaynull +n:locationnull +n:false +n:isinstructorfigureenabled +n:isfilepatchingenabled +n:cadetmode +n:acctime +n:resistance +n:enableenddialog +n:forceend +n:missionname +n:initambientlife +n:commandingmenu +n:diag_fpsmin +n:diag_activesqfscripts +n:safezonewabs +n:librarycredits +n:profilename +n:campaignconfigfile From 3f6b854a0977cd9dd0bf2a3fe387c9247f43efaa Mon Sep 17 00:00:00 2001 From: Marvin Blum Date: Thu, 17 Dec 2015 23:23:49 +0100 Subject: [PATCH 11/20] Now splits by windows and unix new lines, added parsing structure. --- src/tokenizer/tokenizer.go | 86 +++++++++++++++++++------------------ src/types/loader.go | 87 ++++++++++++++++++++++++++++++++++---- 2 files changed, 122 insertions(+), 51 deletions(-) diff --git a/src/tokenizer/tokenizer.go b/src/tokenizer/tokenizer.go index 003b89f..dba1423 100644 --- a/src/tokenizer/tokenizer.go +++ b/src/tokenizer/tokenizer.go @@ -11,50 +11,52 @@ type Token struct { Column int } -var delimiter = []byte{ - '=', - ';', - '{', - '}', - '(', - ')', - '[', - ']', - '<', - '>', - '!', - ',', - ':', - '&', - '|', - '+', - '-', - '*', - '/'} // TODO: modulo? +var ( + delimiter = []byte{ + '=', + ';', + '{', + '}', + '(', + ')', + '[', + ']', + '<', + '>', + '!', + ',', + ':', + '&', + '|', + '+', + '-', + '*', + '/'} // TODO: modulo? -var keywords = []string{ - "var", - "if", - "while", - "switch", - "for", - "foreach", - "func", - "true", - "false", - "case", - "default", - "return", - "try", - "catch", - "exitwith", - "waituntil", - "code"} + keywords = []string{ + "var", + "if", + "while", + "switch", + "for", + "foreach", + "func", + "true", + "false", + "case", + "default", + "return", + "try", + "catch", + "exitwith", + "waituntil", + "code"} -var whitespace = []byte{' ', '\n', '\t', '\r'} -var identifier = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_" -var preprocessor = byte('#') -var new_line = []byte{'\r', '\n'} + whitespace = []byte{' ', '\n', '\t', '\r'} + identifier = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_" + preprocessor = byte('#') + new_line = []byte{'\r', '\n'} +) // Tokenizes the given byte array into syntax tokens, // which can be parsed later. diff --git a/src/types/loader.go b/src/types/loader.go index 5120e83..f608d41 100644 --- a/src/types/loader.go +++ b/src/types/loader.go @@ -1,12 +1,45 @@ package types import ( - "fmt" "io/ioutil" "strings" ) +const ( + // type for object types + TYPE = 1 + + // types for functions + NULL = 2 + UNARY = 3 + BINARY = 4 + + win_new_line = "\r\n" + unix_new_line = "\n" +) + +type FunctionType struct { + Name string + Type int // one of the constants NULL, UNARY, BINARY + ArgsCount int +} + +var functions []FunctionType + +// Returns function type information by name. +// If not found, the first parameter will be false. +func GetFunction(name string) (bool, FunctionType) { + for _, function := range functions { + if function.Name == name { + return true, function + } + } + + return false, FunctionType{} +} + // Loads type information from file. +// The format is specified by 'supportInfo' command: https://community.bistudio.com/wiki/supportInfo func LoadTypes(path string) error { content, err := ioutil.ReadFile(path) @@ -14,19 +47,55 @@ func LoadTypes(path string) error { return err } - if err := parseTypes(string(content)); err != nil { - return err - } + data := strings.Replace(win_new_line, unix_new_line, string(content), -1) // make this work on windows and unix + parseTypes(data) return nil } -func parseTypes(content string) error { - lines := strings.Split(content, "\\n") +func parseTypes(content string) { + lines := strings.Split(content, unix_new_line) for _, line := range lines { - fmt.Println(line) - } + if len(line) < 3 { + continue + } - return nil + if line[0] == 'n' { + parseNullFunction(line) + } else if line[0] == 'u' { + parseUnaryFunction(line) + } else if line[0] == 'b' { + parseBinaryFunction(line) + } + } +} + +func parseNullFunction(line string) { + parts := getParts(line) + + for _, part := range parts { + + } +} + +func parseUnaryFunction(line string) { + parts := getParts(line) + + for _, part := range parts { + + } +} + +func parseBinaryFunction(line string) { + parts := getParts(line) + + for _, part := range parts { + + } +} + +func getParts(line string) []string { + line = line[2:] + return strings.Split(line, " ") } From 9d909a0b8ad55b00c720f01827abd3a622b3cbb4 Mon Sep 17 00:00:00 2001 From: Marvin Blum Date: Wed, 6 Jan 2016 21:43:17 +0100 Subject: [PATCH 12/20] 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, ",") +} From fbfbb8a55ccc0c3984a34c3adf0f767036df2d2c Mon Sep 17 00:00:00 2001 From: Marvin Blum Date: Wed, 6 Jan 2016 22:15:09 +0100 Subject: [PATCH 13/20] Fixed NaN type, updated changelog for future release, added support for null and unary build in functions. Need to add binary build in functions. --- CHANGELOG.md | 8 ++++++++ src/parser/parser.go | 46 ++++++++++++++++++++++++++++++++------------ src/types/loader.go | 24 ++++++++++++++++++++--- 3 files changed, 63 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e201263..0a3793f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +**1.2.0** + +* better error output +* concurrent compiling +* errors are handled per file and won't stop the whole compilation +* function name check for build in functions +* function parameter count check for build in functions + **1.1.1** * arrays can now be declared within expressions diff --git a/src/parser/parser.go b/src/parser/parser.go index e60706f..12f9b37 100644 --- a/src/parser/parser.go +++ b/src/parser/parser.go @@ -1,7 +1,11 @@ package parser import ( + "errors" + "fmt" + "strconv" "tokenizer" + "types" ) const new_line = "\r\n" @@ -215,6 +219,12 @@ func (c *Compiler) parseForeach() { func (c *Compiler) parseFunction() { c.expect("func") + + // check for build in function + if buildin, _ := types.GetFunction(c.get().Token); buildin == true { + panic(errors.New(c.get().Token + " is a build in function, choose a different name")) + } + c.appendOut(c.get().Token+" = {", true) c.next() c.expect("(") @@ -359,30 +369,42 @@ func (c *Compiler) parseFunctionCall(out bool, name string) string { output := "" c.expect("(") - leftParams, leftParamCount := c.parseParameter(false) + params, paramCount := c.parseParameter(false) c.expect(")") - if c.accept("(") { - // buildin function - c.next() - rightParams, rightParamCount := c.parseParameter(false) - c.expect(")") + // buildin function + exists, buildin := types.GetFunction(name) - if leftParamCount > 1 { - leftParams = "[" + leftParams + "]" + if exists { + // check parameter count + if exists && paramCount < buildin.ArgsCount { + panic(errors.New("Function expected " + strconv.Itoa(buildin.ArgsCount) + " parameter but found " + strconv.Itoa(paramCount))) } - if rightParamCount > 1 { - rightParams = "[" + rightParams + "]" + if buildin.Type == types.NULL { + output = name + } else if buildin.Type == types.UNARY { + if paramCount == 1 { + output = name + " " + params + } else { + output = "[" + params + "] call " + name + } + } else { + // TODO + } + + fmt.Println(name) + /*if leftParamCount > 1 { + leftParams = "[" + leftParams + "]" } if leftParamCount > 0 { output = leftParams + " " + name + " " + rightParams } else { output = name + " " + rightParams - } + }*/ } else { - output = "[" + leftParams + "] call " + name + output = "[" + params + "] call " + name } if out { diff --git a/src/types/loader.go b/src/types/loader.go index 09732f5..3f230d3 100644 --- a/src/types/loader.go +++ b/src/types/loader.go @@ -8,6 +8,7 @@ import ( const ( // type for object types TYPE = 1 + NAN = "NaN" // types for functions NULL = 2 @@ -22,6 +23,7 @@ type FunctionType struct { Name string Type int // one of the constants NULL, UNARY, BINARY ArgsCount int + ArgsLeft int // number of args on left side for binary functions } var functions []FunctionType @@ -29,6 +31,8 @@ var functions []FunctionType // Returns function type information by name. // If not found, the first parameter will be false. func GetFunction(name string) (bool, FunctionType) { + name = strings.ToLower(name) + for _, function := range functions { if function.Name == name { return true, function @@ -74,7 +78,7 @@ func parseTypes(content string) { func parseNullFunction(line string) { parts := getParts(line) - functions = append(functions, FunctionType{parts[0], NULL, 0}) + functions = append(functions, FunctionType{parts[0], NULL, 0, 0}) } func parseUnaryFunction(line string) { @@ -85,7 +89,7 @@ func parseUnaryFunction(line string) { } args := getArgs(parts[1]) - functions = append(functions, FunctionType{parts[0], UNARY, len(args)}) + functions = append(functions, FunctionType{parts[0], UNARY, len(args) - getNaNArgs(args), 0}) } func parseBinaryFunction(line string) { @@ -96,8 +100,10 @@ func parseBinaryFunction(line string) { } argsLeft := getArgs(parts[0]) + argsLeftCount := len(argsLeft) - getNaNArgs(argsLeft) argsRight := getArgs(parts[2]) - functions = append(functions, FunctionType{parts[1], BINARY, len(argsLeft) + len(argsRight)}) + argsRightCount := len(argsRight) - getNaNArgs(argsRight) + functions = append(functions, FunctionType{parts[1], BINARY, argsLeftCount + argsRightCount, argsLeftCount}) } func getParts(line string) []string { @@ -108,3 +114,15 @@ func getParts(line string) []string { func getArgs(part string) []string { return strings.Split(part, ",") } + +func getNaNArgs(args []string) int { + nan := 0 + + for _, arg := range args { + if arg == NAN { + nan++ + } + } + + return nan +} From e1bf92f4aac178009ea8664295d3b7f8c87946da Mon Sep 17 00:00:00 2001 From: Marvin Blum Date: Wed, 6 Jan 2016 22:37:59 +0100 Subject: [PATCH 14/20] Unary buildin functions, need to fix test! --- src/parser/parser.go | 93 +++++++++++++++++++++++---------- src/parser/parser_test.go | 48 ++++++++--------- src/tokenizer/tokenizer_test.go | 25 +++++---- src/types/loader.go | 8 +-- test/parser_buildin_func.asl | 2 +- 5 files changed, 107 insertions(+), 69 deletions(-) diff --git a/src/parser/parser.go b/src/parser/parser.go index 12f9b37..f4b0fca 100644 --- a/src/parser/parser.go +++ b/src/parser/parser.go @@ -2,7 +2,6 @@ package parser import ( "errors" - "fmt" "strconv" "tokenizer" "types" @@ -221,7 +220,7 @@ func (c *Compiler) parseFunction() { c.expect("func") // check for build in function - if buildin, _ := types.GetFunction(c.get().Token); buildin == true { + if buildin := types.GetFunction(c.get().Token); buildin != nil { panic(errors.New(c.get().Token + " is a build in function, choose a different name")) } @@ -369,42 +368,27 @@ func (c *Compiler) parseFunctionCall(out bool, name string) string { output := "" c.expect("(") - params, paramCount := c.parseParameter(false) + paramsStr, params, paramCount := c.parseParameter(false) c.expect(")") // buildin function - exists, buildin := types.GetFunction(name) + buildin := types.GetFunction(name) - if exists { + if buildin != nil { // check parameter count - if exists && paramCount < buildin.ArgsCount { + if paramCount < buildin.ArgsCount { panic(errors.New("Function expected " + strconv.Itoa(buildin.ArgsCount) + " parameter but found " + strconv.Itoa(paramCount))) } if buildin.Type == types.NULL { output = name } else if buildin.Type == types.UNARY { - if paramCount == 1 { - output = name + " " + params - } else { - output = "[" + params + "] call " + name - } + output = c.parseUnaryFunction(name, paramsStr, paramCount) } else { - // TODO + output = c.parseBinaryFunction(name, params, buildin) } - - fmt.Println(name) - /*if leftParamCount > 1 { - leftParams = "[" + leftParams + "]" - } - - if leftParamCount > 0 { - output = leftParams + " " + name + " " + rightParams - } else { - output = name + " " + rightParams - }*/ } else { - output = "[" + params + "] call " + name + output = "[" + paramsStr + "] call " + name } if out { @@ -414,12 +398,67 @@ func (c *Compiler) parseFunctionCall(out bool, name string) string { return output } -func (c *Compiler) parseParameter(out bool) (string, int) { +func (c *Compiler) parseUnaryFunction(name, paramsStr string, paramCount int) string { output := "" + + if paramCount == 1 { + output = name + " " + paramsStr + } else { + output = "[" + paramsStr + "] call " + name + } + + return output +} + +func (c *Compiler) parseBinaryFunction(name string, params []string, buildin *types.FunctionType) string { + output := "" + + if buildin.ArgsLeft == 1 { + output = params[0] + " " + } else { + output = "[" + + for i := 0; i < buildin.ArgsLeft; i++ { + output += params[i] + + if i != buildin.ArgsLeft-1 { + output += "," + } + } + + output += "] " + } + + output += name + + if buildin.ArgsCount-buildin.ArgsLeft == 1 { + output += " " + params[1] + } else { + output += " [" + + for i := buildin.ArgsLeft; i < buildin.ArgsCount; i++ { + output += params[i] + + if i != buildin.ArgsCount-1 { + output += "," + } + } + + output += "]" + } + + return output +} + +func (c *Compiler) parseParameter(out bool) (string, []string, int) { + output := "" + params := make([]string, 0) count := 0 for !c.accept(")") { - output += c.parseExpression(out) + expr := c.parseExpression(out) + output += expr + params = append(params, expr) count++ if !c.accept(")") { @@ -432,7 +471,7 @@ func (c *Compiler) parseParameter(out bool) (string, int) { c.appendOut(output, false) } - return output, count + return output, params, count } func (c *Compiler) parseExpression(out bool) string { diff --git a/src/parser/parser_test.go b/src/parser/parser_test.go index 43b6c87..4a3378d 100644 --- a/src/parser/parser_test.go +++ b/src/parser/parser_test.go @@ -8,161 +8,161 @@ import ( ) func TestParserDeclaration(t *testing.T) { - got := getCompiled(t, "test/tokenizer_var.asl") + got := getCompiled(t, "../../test/tokenizer_var.asl") want := "x = 1;\r\narray = [1,2,3];\r\n" equal(t, got, want) } func TestParserAssignment(t *testing.T) { - got := getCompiled(t, "test/parser_assignment.asl") + got := getCompiled(t, "../../test/parser_assignment.asl") want := "x = 1;\r\n" equal(t, got, want) } func TestParserIf(t *testing.T) { - got := getCompiled(t, "test/tokenizer_if.asl") + got := getCompiled(t, "../../test/tokenizer_if.asl") want := "if (ab;\r\n};\r\n[1+3/4, 2-(66*22)/3-((123))] call myFunc;\r\n" equal(t, got, want) } func TestParserBuildinFunctionCall(t *testing.T) { - got := getCompiled(t, "test/parser_buildin_func.asl") + got := getCompiled(t, "../../test/parser_buildin_func.asl") want := "_x = (([player, foo] getVar bar) setHit [\"head\", \"tail\"]);\r\n" equal(t, got, want) } func TestParserOperator(t *testing.T) { - got := getCompiled(t, "test/parser_operator.asl") + got := getCompiled(t, "../../test/parser_operator.asl") want := "if (x==y&&x!=y&&x<=y&&x>=y&&xy) then {\r\n};\r\n" equal(t, got, want) } func TestParserTryCatch(t *testing.T) { - got := getCompiled(t, "test/parser_try_catch.asl") + got := getCompiled(t, "../../test/parser_try_catch.asl") want := "try {\r\n} catch {\r\n};\r\n" equal(t, got, want) } func TestParserNegationFunctionCall(t *testing.T) { - got := getCompiled(t, "test/parser_negation.asl") + got := getCompiled(t, "../../test/parser_negation.asl") want := "x = !([] call foo);\r\n" equal(t, got, want) } func TestParserExitWith(t *testing.T) { - got := getCompiled(t, "test/parser_exitwith.asl") + got := getCompiled(t, "../../test/parser_exitwith.asl") want := "if (true) exitWith {\r\n};\r\n" equal(t, got, want) } func TestParserWaitUntil(t *testing.T) { - got := getCompiled(t, "test/parser_waituntil.asl") + got := getCompiled(t, "../../test/parser_waituntil.asl") want := "waitUntil {x=x+1;x<100};\r\n" equal(t, got, want) } func TestParserArray(t *testing.T) { - got := getCompiled(t, "test/parser_array.asl") + got := getCompiled(t, "../../test/parser_array.asl") want := "x = [1,2,3];\r\ny = (x select (1));\r\n" equal(t, got, want) } func TestParserFunctionParams(t *testing.T) { - got := getCompiled(t, "test/parser_func_params.asl") + got := getCompiled(t, "../../test/parser_func_params.asl") want := "myFunc = {\r\nparams [[\"a\",1],[\"b\",2]];\r\nreturn a+b;\r\n};\r\n" equal(t, got, want) } func TestParserInlineCode(t *testing.T) { - got := getCompiled(t, "test/parser_code.asl") + got := getCompiled(t, "../../test/parser_code.asl") want := "inline_code = {a = 1;b = 2;if (a", "allUnits", "{", "}"} compareLength(t, &got, &want) @@ -47,7 +47,7 @@ func TestTokenizerForach(t *testing.T) { } func TestTokenizerSwitch(t *testing.T) { - got := getTokens(t, "test/tokenizer_switch.asl") + got := getTokens(t, "../../test/tokenizer_switch.asl") want := []string{"switch", "x", "{", "case", "1", ":", "x", "=", "1", ";", "case", "2", ":", "x", "=", "2", ";", "default", ":", "x", "=", "3", ";", "}"} compareLength(t, &got, &want) @@ -55,7 +55,7 @@ func TestTokenizerSwitch(t *testing.T) { } func TestTokenizerFunction(t *testing.T) { - got := getTokens(t, "test/tokenizer_func.asl") + got := getTokens(t, "../../test/tokenizer_func.asl") want := []string{"func", "TestFunction", "(", "param0", ",", "param1", ")", "{", "return", "true", ";", "}"} compareLength(t, &got, &want) @@ -63,7 +63,7 @@ func TestTokenizerFunction(t *testing.T) { } func TestTokenizerExpression(t *testing.T) { - got := getTokens(t, "test/tokenizer_expr.asl") + got := getTokens(t, "../../test/tokenizer_expr.asl") want := []string{"x", "=", "(", "(", "1", "+", "2", "+", "3", ")", "*", "4", "/", "2", ")", "+", "foo", "(", "1", ",", "2", ",", "3", ")", ";"} compareLength(t, &got, &want) @@ -71,7 +71,7 @@ func TestTokenizerExpression(t *testing.T) { } func TestTokenizerIdentifier(t *testing.T) { - got := getTokens(t, "test/tokenizer_identifier.asl") + got := getTokens(t, "../../test/tokenizer_identifier.asl") want := []string{"var", "format", "=", "\"should not be for mat!\"", ";"} compareLength(t, &got, &want) @@ -79,7 +79,7 @@ func TestTokenizerIdentifier(t *testing.T) { } func TestTokenizerInlineCode(t *testing.T) { - got := getTokens(t, "test/tokenizer_code.asl") + got := getTokens(t, "../../test/tokenizer_code.asl") want := []string{"var", "x", "=", "code", "(", "\"var x = 5;\"", ")", ";"} compareLength(t, &got, &want) @@ -87,7 +87,7 @@ func TestTokenizerInlineCode(t *testing.T) { } func TestTokenizerPreprocessor(t *testing.T) { - got := getTokens(t, "test/tokenizer_preprocessor.asl") + got := getTokens(t, "../../test/tokenizer_preprocessor.asl") want := []string{"#define HELLO_WORLD \"Hello World!\"", "hint", "(", ")", "(", "HELLO_WORLD", ")", ";"} compareLength(t, &got, &want) @@ -95,8 +95,7 @@ func TestTokenizerPreprocessor(t *testing.T) { } func TestTokenizerMask(t *testing.T) { - got := getTokens(t, "test/tokenizer_mask.asl") - //var y = code("var z = \"Hello \\"World\\"\";"); + got := getTokens(t, "../../test/tokenizer_mask.asl") want := []string{"var", "x", "=", "\"Hello \\\"World\\\"\"", ";", "var", "y", "=", "code", "(", "\"var z = \\\"Hello \\\\\"World\\\\\"\\\";\"", ")", ";"} diff --git a/src/types/loader.go b/src/types/loader.go index 3f230d3..0c3d904 100644 --- a/src/types/loader.go +++ b/src/types/loader.go @@ -29,17 +29,17 @@ type FunctionType struct { var functions []FunctionType // Returns function type information by name. -// If not found, the first parameter will be false. -func GetFunction(name string) (bool, FunctionType) { +// If not found, the parameter will be nil. +func GetFunction(name string) *FunctionType { name = strings.ToLower(name) for _, function := range functions { if function.Name == name { - return true, function + return &function } } - return false, FunctionType{} + return nil } // Loads type information from file. diff --git a/test/parser_buildin_func.asl b/test/parser_buildin_func.asl index 0b36daa..d64aeba 100644 --- a/test/parser_buildin_func.asl +++ b/test/parser_buildin_func.asl @@ -1 +1 @@ -var _x = setHit(getVar(player, foo)(bar))("head", "tail"); +var _x = setHit(getVar(player, foo, bar), "head", "tail"); From e3a7c5d6ac8ac8f61deb147afaaa3940a92a5302 Mon Sep 17 00:00:00 2001 From: Marvin Blum Date: Wed, 6 Jan 2016 23:01:07 +0100 Subject: [PATCH 15/20] Missunderstood supportInfo parameter. --- src/parser/parser.go | 19 +++++++++++++----- src/parser/parser_test.go | 8 ++++---- src/types/loader.go | 34 +++++++++++++++++++++++++-------- test/tokenizer_preprocessor.asl | 2 +- 4 files changed, 45 insertions(+), 18 deletions(-) diff --git a/src/parser/parser.go b/src/parser/parser.go index f4b0fca..7f3f22e 100644 --- a/src/parser/parser.go +++ b/src/parser/parser.go @@ -2,6 +2,7 @@ package parser import ( "errors" + "fmt" "strconv" "tokenizer" "types" @@ -376,8 +377,8 @@ func (c *Compiler) parseFunctionCall(out bool, name string) string { if buildin != nil { // check parameter count - if paramCount < buildin.ArgsCount { - panic(errors.New("Function expected " + strconv.Itoa(buildin.ArgsCount) + " parameter but found " + strconv.Itoa(paramCount))) + if paramCount < buildin.ArgsLeft+buildin.ArgsRight { + panic(errors.New("Function expected " + strconv.Itoa(buildin.ArgsLeft+buildin.ArgsRight) + " parameter but found " + strconv.Itoa(paramCount))) } if buildin.Type == types.NULL { @@ -411,8 +412,16 @@ func (c *Compiler) parseUnaryFunction(name, paramsStr string, paramCount int) st } func (c *Compiler) parseBinaryFunction(name string, params []string, buildin *types.FunctionType) string { + // FIXME number of elements can't be determined if array is parameter output := "" + fmt.Println(len(params)) + fmt.Println(buildin.ArgsLeft) + fmt.Println(buildin.ArgsRight) + fmt.Println(params[0]) + fmt.Println(params[1]) + fmt.Println(params[2]) + if buildin.ArgsLeft == 1 { output = params[0] + " " } else { @@ -431,15 +440,15 @@ func (c *Compiler) parseBinaryFunction(name string, params []string, buildin *ty output += name - if buildin.ArgsCount-buildin.ArgsLeft == 1 { + if buildin.ArgsRight-buildin.ArgsLeft == 1 { output += " " + params[1] } else { output += " [" - for i := buildin.ArgsLeft; i < buildin.ArgsCount; i++ { + for i := buildin.ArgsLeft; i < buildin.ArgsRight; i++ { output += params[i] - if i != buildin.ArgsCount-1 { + if i != buildin.ArgsRight-buildin.ArgsLeft-1 { output += "," } } diff --git a/src/parser/parser_test.go b/src/parser/parser_test.go index 4a3378d..764cb1f 100644 --- a/src/parser/parser_test.go +++ b/src/parser/parser_test.go @@ -91,12 +91,12 @@ func TestParserFunctionCall(t *testing.T) { equal(t, got, want) } -func TestParserBuildinFunctionCall(t *testing.T) { +/*func TestParserBuildinFunctionCall(t *testing.T) { got := getCompiled(t, "../../test/parser_buildin_func.asl") want := "_x = (([player, foo] getVar bar) setHit [\"head\", \"tail\"]);\r\n" equal(t, got, want) -} +}*/ func TestParserOperator(t *testing.T) { got := getCompiled(t, "../../test/parser_operator.asl") @@ -154,12 +154,12 @@ func TestParserInlineCode(t *testing.T) { equal(t, got, want) } -func TestParserPreprocessor(t *testing.T) { +/*func TestParserPreprocessor(t *testing.T) { got := getCompiled(t, "../../test/tokenizer_preprocessor.asl") want := "\r\n#define HELLO_WORLD \"Hello World!\"\r\nhint HELLO_WORLD;\r\n" equal(t, got, want) -} +}*/ func TestParserExpressionArray(t *testing.T) { got := getCompiled(t, "../../test/parser_expression_array.asl") diff --git a/src/types/loader.go b/src/types/loader.go index 0c3d904..136f295 100644 --- a/src/types/loader.go +++ b/src/types/loader.go @@ -7,8 +7,9 @@ import ( const ( // type for object types - TYPE = 1 - NAN = "NaN" + TYPE = 1 + NAN = "NaN" + ARRAY = "ARRAY" // types for functions NULL = 2 @@ -22,8 +23,8 @@ const ( type FunctionType struct { Name string Type int // one of the constants NULL, UNARY, BINARY - ArgsCount int - ArgsLeft int // number of args on left side for binary functions + ArgsLeft int + ArgsRight int // number of args on left side for binary functions } var functions []FunctionType @@ -89,7 +90,14 @@ func parseUnaryFunction(line string) { } args := getArgs(parts[1]) - functions = append(functions, FunctionType{parts[0], UNARY, len(args) - getNaNArgs(args), 0}) + + var argsCount int + + if args[0] != ARRAY { + argsCount = len(args) - getNaNArgs(args) + } + + functions = append(functions, FunctionType{parts[0], UNARY, argsCount, 0}) } func parseBinaryFunction(line string) { @@ -100,10 +108,20 @@ func parseBinaryFunction(line string) { } argsLeft := getArgs(parts[0]) - argsLeftCount := len(argsLeft) - getNaNArgs(argsLeft) argsRight := getArgs(parts[2]) - argsRightCount := len(argsRight) - getNaNArgs(argsRight) - functions = append(functions, FunctionType{parts[1], BINARY, argsLeftCount + argsRightCount, argsLeftCount}) + + var argsLeftCount int + var argsRightCount int + + if argsLeft[0] != ARRAY { + argsLeftCount = len(argsLeft) - getNaNArgs(argsLeft) + } + + if argsRight[0] != ARRAY { + argsRightCount = len(argsRight) - getNaNArgs(argsRight) + } + + functions = append(functions, FunctionType{parts[1], BINARY, argsLeftCount, argsRightCount}) } func getParts(line string) []string { diff --git a/test/tokenizer_preprocessor.asl b/test/tokenizer_preprocessor.asl index d029d85..88950d4 100644 --- a/test/tokenizer_preprocessor.asl +++ b/test/tokenizer_preprocessor.asl @@ -1,2 +1,2 @@ #define HELLO_WORLD "Hello World!" -hint()(HELLO_WORLD); +hint(HELLO_WORLD); From 737b96d5acd7972e2ce257fbd2f0424ea2fbe017 Mon Sep 17 00:00:00 2001 From: Marvin Blum Date: Thu, 14 Jan 2016 11:44:02 +0100 Subject: [PATCH 16/20] Fixed binary buildin functions and tests. --- src/parser/parser.go | 65 +- src/parser/parser_test.go | 39 +- src/tokenizer/tokenizer_test.go | 2 +- src/types/loader_test.go | 18 + test/parser_binary_buildin_func.asl | 1 + test/parser_buildin_func.asl | 1 - test/parser_null_buildin_func.asl | 1 + test/parser_unary_buildin_func.asl | 1 + test/types | 2198 +++++++++++++++++++++++++++ 9 files changed, 2269 insertions(+), 57 deletions(-) create mode 100644 src/types/loader_test.go create mode 100644 test/parser_binary_buildin_func.asl delete mode 100644 test/parser_buildin_func.asl create mode 100644 test/parser_null_buildin_func.asl create mode 100644 test/parser_unary_buildin_func.asl create mode 100644 test/types diff --git a/src/parser/parser.go b/src/parser/parser.go index 7f3f22e..fa27a32 100644 --- a/src/parser/parser.go +++ b/src/parser/parser.go @@ -2,8 +2,6 @@ package parser import ( "errors" - "fmt" - "strconv" "tokenizer" "types" ) @@ -369,24 +367,19 @@ func (c *Compiler) parseFunctionCall(out bool, name string) string { output := "" c.expect("(") - paramsStr, params, paramCount := c.parseParameter(false) + paramsStr, paramCount := c.parseParameter(false) c.expect(")") // buildin function buildin := types.GetFunction(name) if buildin != nil { - // check parameter count - if paramCount < buildin.ArgsLeft+buildin.ArgsRight { - panic(errors.New("Function expected " + strconv.Itoa(buildin.ArgsLeft+buildin.ArgsRight) + " parameter but found " + strconv.Itoa(paramCount))) - } - if buildin.Type == types.NULL { output = name } else if buildin.Type == types.UNARY { output = c.parseUnaryFunction(name, paramsStr, paramCount) } else { - output = c.parseBinaryFunction(name, params, buildin) + output = c.parseBinaryFunction(name, paramsStr, buildin, paramCount) } } else { output = "[" + paramsStr + "] call " + name @@ -411,63 +404,37 @@ func (c *Compiler) parseUnaryFunction(name, paramsStr string, paramCount int) st return output } -func (c *Compiler) parseBinaryFunction(name string, params []string, buildin *types.FunctionType) string { - // FIXME number of elements can't be determined if array is parameter +func (c *Compiler) parseBinaryFunction(name string, leftParamsStr string, buildin *types.FunctionType, paramCount int) string { output := "" - fmt.Println(len(params)) - fmt.Println(buildin.ArgsLeft) - fmt.Println(buildin.ArgsRight) - fmt.Println(params[0]) - fmt.Println(params[1]) - fmt.Println(params[2]) + c.next() + rightParamsStr, rightParamCount := c.parseParameter(false) + c.expect(")") - if buildin.ArgsLeft == 1 { - output = params[0] + " " - } else { - output = "[" - - for i := 0; i < buildin.ArgsLeft; i++ { - output += params[i] - - if i != buildin.ArgsLeft-1 { - output += "," - } - } - - output += "] " + if paramCount > 1 { + leftParamsStr = "[" + leftParamsStr + "]" } - output += name + if rightParamCount > 1 { + rightParamsStr = "[" + rightParamsStr + "]" + } - if buildin.ArgsRight-buildin.ArgsLeft == 1 { - output += " " + params[1] + if paramCount > 0 { + output = leftParamsStr + " " + name + " " + rightParamsStr } else { - output += " [" - - for i := buildin.ArgsLeft; i < buildin.ArgsRight; i++ { - output += params[i] - - if i != buildin.ArgsRight-buildin.ArgsLeft-1 { - output += "," - } - } - - output += "]" + output = name + " " + rightParamsStr } return output } -func (c *Compiler) parseParameter(out bool) (string, []string, int) { +func (c *Compiler) parseParameter(out bool) (string, int) { output := "" - params := make([]string, 0) count := 0 for !c.accept(")") { expr := c.parseExpression(out) output += expr - params = append(params, expr) count++ if !c.accept(")") { @@ -480,7 +447,7 @@ func (c *Compiler) parseParameter(out bool) (string, []string, int) { c.appendOut(output, false) } - return output, params, count + return output, count } func (c *Compiler) parseExpression(out bool) string { diff --git a/src/parser/parser_test.go b/src/parser/parser_test.go index 764cb1f..9f0c815 100644 --- a/src/parser/parser_test.go +++ b/src/parser/parser_test.go @@ -5,6 +5,11 @@ import ( "parser" "testing" "tokenizer" + "types" +) + +const ( + types_file = "../../test/types" ) func TestParserDeclaration(t *testing.T) { @@ -91,12 +96,32 @@ func TestParserFunctionCall(t *testing.T) { equal(t, got, want) } -/*func TestParserBuildinFunctionCall(t *testing.T) { - got := getCompiled(t, "../../test/parser_buildin_func.asl") - want := "_x = (([player, foo] getVar bar) setHit [\"head\", \"tail\"]);\r\n" +func TestParserNullBuildinFunctionCall(t *testing.T) { + types.LoadTypes(types_file) + + got := getCompiled(t, "../../test/parser_null_buildin_func.asl") + want := "_volume = (radioVolume);\r\n" equal(t, got, want) -}*/ +} + +func TestParserUnaryBuildinFunctionCall(t *testing.T) { + types.LoadTypes(types_file) + + got := getCompiled(t, "../../test/parser_unary_buildin_func.asl") + want := "_isReady = (unitReady soldier);\r\n" + + equal(t, got, want) +} + +func TestParserBinaryBuildinFunctionCall(t *testing.T) { + types.LoadTypes(types_file) + + got := getCompiled(t, "../../test/parser_binary_buildin_func.asl") + want := "someCar setHit [\"motor\", 1];\r\n" + + equal(t, got, want) +} func TestParserOperator(t *testing.T) { got := getCompiled(t, "../../test/parser_operator.asl") @@ -154,12 +179,14 @@ func TestParserInlineCode(t *testing.T) { equal(t, got, want) } -/*func TestParserPreprocessor(t *testing.T) { +func TestParserPreprocessor(t *testing.T) { + types.LoadTypes(types_file) + got := getCompiled(t, "../../test/tokenizer_preprocessor.asl") want := "\r\n#define HELLO_WORLD \"Hello World!\"\r\nhint HELLO_WORLD;\r\n" equal(t, got, want) -}*/ +} func TestParserExpressionArray(t *testing.T) { got := getCompiled(t, "../../test/parser_expression_array.asl") diff --git a/src/tokenizer/tokenizer_test.go b/src/tokenizer/tokenizer_test.go index 5ff9ee7..8c1ffd2 100644 --- a/src/tokenizer/tokenizer_test.go +++ b/src/tokenizer/tokenizer_test.go @@ -88,7 +88,7 @@ func TestTokenizerInlineCode(t *testing.T) { func TestTokenizerPreprocessor(t *testing.T) { got := getTokens(t, "../../test/tokenizer_preprocessor.asl") - want := []string{"#define HELLO_WORLD \"Hello World!\"", "hint", "(", ")", "(", "HELLO_WORLD", ")", ";"} + want := []string{"#define HELLO_WORLD \"Hello World!\"", "hint", "(", "HELLO_WORLD", ")", ";"} compareLength(t, &got, &want) compareTokens(t, &got, &want) diff --git a/src/types/loader_test.go b/src/types/loader_test.go new file mode 100644 index 0000000..1ec1168 --- /dev/null +++ b/src/types/loader_test.go @@ -0,0 +1,18 @@ +package types_test + +import ( + "testing" + "types" +) + +func TestTypesGetFunction(t *testing.T) { + if err := types.LoadTypes("../../test/types"); err != nil { + t.Error(err) + } + + function := types.GetFunction("hint") + + if function == nil { + t.Error("Function 'hint' not found in type list") + } +} diff --git a/test/parser_binary_buildin_func.asl b/test/parser_binary_buildin_func.asl new file mode 100644 index 0000000..5848d6d --- /dev/null +++ b/test/parser_binary_buildin_func.asl @@ -0,0 +1 @@ +setHit(someCar)("motor", 1); diff --git a/test/parser_buildin_func.asl b/test/parser_buildin_func.asl deleted file mode 100644 index d64aeba..0000000 --- a/test/parser_buildin_func.asl +++ /dev/null @@ -1 +0,0 @@ -var _x = setHit(getVar(player, foo, bar), "head", "tail"); diff --git a/test/parser_null_buildin_func.asl b/test/parser_null_buildin_func.asl new file mode 100644 index 0000000..9d7be49 --- /dev/null +++ b/test/parser_null_buildin_func.asl @@ -0,0 +1 @@ +var _volume = radioVolume(); diff --git a/test/parser_unary_buildin_func.asl b/test/parser_unary_buildin_func.asl new file mode 100644 index 0000000..9ecd241 --- /dev/null +++ b/test/parser_unary_buildin_func.asl @@ -0,0 +1 @@ +var _isReady = unitReady(soldier); diff --git a/test/types b/test/types new file mode 100644 index 0000000..54ac633 --- /dev/null +++ b/test/types @@ -0,0 +1,2198 @@ +t:SCALAR +t:BOOL +t:ARRAY +t:STRING +t:NOTHING +t:ANY +t:NAMESPACE +t:NaN +t:IF +t:WHILE +t:FOR +t:SWITCH +t:EXCEPTION +t:WITH +t:CODE +t:OBJECT +t:VECTOR +t:TRANS +t:ORIENT +t:SIDE +t:GROUP +t:TEXT +t:SCRIPT +t:TARGET +t:JCLASS +t:CONFIG +t:DISPLAY +t:CONTROL +t:NetObject +t:SUBGROUP +t:TEAM_MEMBER +t:TASK +t:DIARY_RECORD +t:LOCATION +b:ARRAY waypointattachobject SCALAR,OBJECT +b:OBJECT,GROUP enableattack BOOL +b:ARRAY isflatempty ARRAY +b:OBJECT removeaction SCALAR +b:OBJECT neartargets SCALAR +b:STRING setmarkersizelocal ARRAY +b:OBJECT campreparefov SCALAR +b:CONTROL ctrlsetfontheightsecondary SCALAR +b:CONTROL ctrlsetfonth5b STRING +b:CONTROL ctrlsettextcolor ARRAY +b:CONTROL lbcolorright SCALAR +b:CONTROL lnbdeletecolumn SCALAR +b:CONTROL tvsetpictureright ARRAY +b:OBJECT setobjecttextureglobal ARRAY +b:SCALAR setforcegeneratorrtd ARRAY +b:OBJECT removecuratoreditableobjects ARRAY +b:OBJECT swimindepth SCALAR +b:LOCATION setsize ARRAY +b:OBJECT addgoggles STRING +b:OBJECT setmimic STRING +b:OBJECT additem STRING +b:OBJECT disableconversation BOOL +b:SCALAR setfsmvariable ARRAY +b:CONTROL ctrlsetstructuredtext TEXT +b:OBJECT setcuratorwaypointcost SCALAR +b:OBJECT setcuratoreditingareatype BOOL +b:OBJECT setlightintensity SCALAR +b:LOCATION attachobject OBJECT +b:SCALAR fademusic SCALAR +b:OBJECT removeweaponturret ARRAY +b:OBJECT action ARRAY +b:OBJECT fire STRING +b:OBJECT fire ARRAY +b:OBJECT setvehicleammodef SCALAR +b:CONTROL newoverlay CONFIG +b:OBJECT backpackspacefor STRING +b:OBJECT kbreact ARRAY +b:OBJECT setfatigue SCALAR +b:CONTROL lnbsetcurselrow SCALAR +b:SCALAR setgusts SCALAR +b:STRING configclasses CONFIG +b:TASK setsimpletasktarget ARRAY +b:ANY exec STRING +b:OBJECT,GROUP lockwp BOOL +b:OBJECT setparticlecircle ARRAY +b:OBJECT campreparerelpos ARRAY +b:ARRAY findemptyposition ARRAY +b:CONTROL ctrlsettextsecondary STRING +b:CONTROL lnbsetcolumnspos ARRAY +b:CONTROL lnbpicture ARRAY +b:CONTROL tvsetcursel ARRAY +b:OBJECT animationphase STRING +b:OBJECT setactualcollectivertd SCALAR +b:OBJECT setcuratorcoef ARRAY +b:CONTROL ctrlsetmodelscale SCALAR +b:GROUP addvehicle OBJECT +b:CONTROL removemenuitem SCALAR +b:CONTROL removemenuitem STRING +b:CONTROL setobjectarguments ARRAY +b:NAMESPACE getvariable STRING +b:NAMESPACE getvariable ARRAY +b:CONTROL getvariable STRING +b:OBJECT getvariable STRING +b:OBJECT getvariable ARRAY +b:GROUP getvariable STRING +b:GROUP getvariable ARRAY +b:TEAM_MEMBER getvariable STRING +b:TEAM_MEMBER getvariable ARRAY +b:TASK getvariable STRING +b:LOCATION getvariable STRING +b:OBJECT assignasdriver OBJECT +b:CONTROL lnbdata ARRAY +b:CONTROL buttonsetaction STRING +b:OBJECT hcgroupparams GROUP +b:OBJECT settargetage STRING +b:IF then CODE +b:IF then ARRAY +b:ARRAY ordergetin BOOL +b:STRING setmarkersize ARRAY +b:SCALAR cuttext ARRAY +b:SCALAR faderadio SCALAR +b:OBJECT campreparedive SCALAR +b:OBJECT forceweaponfire ARRAY +b:OBJECT kbhastopic STRING +b:CONTROL lnbsettext ARRAY +b:TEAM_MEMBER addteammember TEAM_MEMBER +b:CODE foreachmemberteam TEAM_MEMBER +b:SCALAR setlightnings SCALAR +b:OBJECT addlivestats SCALAR +b:CONTROL updatedrawicon ARRAY +b:STRING enableaifeature BOOL +b:OBJECT triggerattachobject SCALAR +b:OBJECT setface STRING +b:OBJECT setrank STRING +b:OBJECT forceadduniform STRING +b:CONTROL addmenuitem ARRAY +b:SIDE setfriend ARRAY +b:DISPLAY createdisplay STRING +b:CONTROL lbsetpicturecolor ARRAY +b:TEAM_MEMBER sendtask ARRAY +b:OBJECT engineon BOOL +b:OBJECT addweaponglobal STRING +b:OBJECT linkitem STRING +b:ARRAY synchronizewaypoint ARRAY +b:OBJECT synchronizewaypoint ARRAY +b:ARRAY inrangeofartillery ARRAY +b:FOR step SCALAR +b:OBJECT addheadgear STRING +b:GROUP setgroupowner SCALAR +b:CONTROL drawicon ARRAY +b:CONTROL lbadd STRING +b:CONTROL lbsettextright ARRAY +b:CONTROL cbsetchecked BOOL +b:SIDE revealmine OBJECT +b:ARRAY,OBJECT nearroads SCALAR +b:OBJECT moveincargo OBJECT +b:OBJECT moveincargo ARRAY +b:ARRAY,OBJECT domove ARRAY +b:OBJECT setnamesound STRING +b:CONTROL inserteditorobject ARRAY +b:OBJECT setvehicletipars ARRAY +b:CONTROL ctrlcommit SCALAR +b:CONTROL lbpicture SCALAR +b:CONTROL lnbaddcolumn SCALAR +b:CONTROL lnbsetpicturecolorselectedright ARRAY +b:OBJECT enableautostartuprtd BOOL +b:STRING ppeffectcommit SCALAR +b:SCALAR ppeffectcommit SCALAR +b:ARRAY ppeffectcommit SCALAR +b:WHILE do CODE +b:WITH do CODE +b:FOR do CODE +b:SWITCH do CODE +b:OBJECT settriggeractivation ARRAY +b:SCALAR setfog SCALAR,ARRAY +b:ARRAY setwaypointtimeout ARRAY +b:OBJECT lockturret ARRAY +b:OBJECT,GROUP setgroupidglobal ARRAY +b:CONTROL lbcolor SCALAR +b:CONTROL lbsetpicturecolorselected ARRAY +b:OBJECT enablepersonturret ARRAY +b:OBJECT addcuratoreditingarea ARRAY +b:OBJECT setmagazineturretammo ARRAY +b:OBJECT switchlight STRING +b:OBJECT camsetfocus ARRAY +b:IF exitwith CODE +b:SCALAR cutfadeout SCALAR +b:OBJECT setdamage SCALAR +b:SCALAR setovercast SCALAR +b:OBJECT camsetdive SCALAR +b:OBJECT worldtomodel ARRAY +b:OBJECT sethitindex ARRAY +b:OBJECT assignascargoindex ARRAY +b:OBJECT buildingpos SCALAR +b:FOR from SCALAR +b:CONTROL createmenu SCALAR +b:OBJECT canadditemtouniform STRING +b:OBJECT lockedturret ARRAY +b:SCALAR fadespeech SCALAR +b:DISPLAY displayctrl SCALAR +b:CONTROL lbpictureright SCALAR +b:OBJECT setbleedingremaining SCALAR +b:OBJECT enableuavwaypoints BOOL +b:STRING setmarkershapelocal STRING +b:ARRAY setwaypointdescription STRING +b:OBJECT switchcamera STRING +b:CONTROL listobjects STRING +b:OBJECT addrating SCALAR +b:OBJECT campreparefocus ARRAY +b:ARRAY,OBJECT nearobjectsready SCALAR +b:OBJECT removealleventhandlers STRING +b:OBJECT gethidefrom OBJECT +b:CONTROL allow3dmode BOOL +b:OBJECT enablefatigue BOOL +b:CONTROL lbisselected SCALAR +b:CONTROL lnbsetpicturecolorselected ARRAY +b:OBJECT customradio ARRAY +b:ARRAY vectordiff ARRAY +b:CONTROL drawlocation LOCATION +b:OBJECT addmagazineturret ARRAY +b:ARRAY setwaypointvisible BOOL +b:OBJECT setdropinterval SCALAR +b:SIDE getfriend SIDE +b:OBJECT setpos ARRAY +b:OBJECT magazineturretammo ARRAY +b:STRING setmarkershape STRING +b:CONTROL seteditorobjectscope ARRAY +b:OBJECT land STRING +b:ANY isequalto ANY +b:ARRAY,OBJECT nearentities SCALAR,ARRAY +b:STRING setmarkertextlocal STRING +b:OBJECT setlightambient ARRAY +b:CONTROL tvsort ARRAY +b:OBJECT addcuratoreditableobjects ARRAY +b:SCALAR setwinddir SCALAR +b:OBJECT removesimpletask TASK +b:ANY spawn CODE +b:OBJECT campreparefovrange ARRAY +b:OBJECT setvectorup ARRAY +b:SIDE countside ARRAY +b:OBJECT campreparedir SCALAR +b:OBJECT limitspeed SCALAR +b:OBJECT setposatl ARRAY +b:CONTROL getobjectargument ARRAY +b:OBJECT setdestination ARRAY +b:OBJECT setunitability SCALAR +b:OBJECT kbtell ARRAY +b:CONTROL ctrlsettooltipcolortext ARRAY +b:OBJECT removecuratoraddons ARRAY +b:OBJECT setoxygenremaining SCALAR +b:DISPLAY ctrlcreate ARRAY +b:CONTROL showneweditorobject ARRAY +b:CONTROL ondoubleclick STRING +b:ARRAY,OBJECT distancesqr ARRAY,OBJECT +b:LOCATION distancesqr LOCATION +b:LOCATION distancesqr ARRAY +b:ARRAY distancesqr LOCATION +b:OBJECT addbackpackglobal STRING +b:STRING iskindof STRING +b:STRING iskindof ARRAY +b:OBJECT iskindof STRING +b:CONTROL editobject STRING +b:ARRAY intersect ARRAY +b:OBJECT setvehiclearmor SCALAR +b:CONTROL nmenuitems SCALAR,STRING +b:OBJECT hideobject BOOL +b:OBJECT kbwassaid ARRAY +b:CONTROL ctrlmapscreentoworld ARRAY +b:TEAM_MEMBER unregistertask STRING +b:SCALAR,NaN != SCALAR,NaN +b:STRING != STRING +b:OBJECT != OBJECT +b:GROUP != GROUP +b:SIDE != SIDE +b:TEXT != TEXT +b:CONFIG != CONFIG +b:DISPLAY != DISPLAY +b:CONTROL != CONTROL +b:TEAM_MEMBER != TEAM_MEMBER +b:NetObject != NetObject +b:TASK != TASK +b:LOCATION != LOCATION +b:OBJECT joinassilent ARRAY +b:OBJECT setvectordirandup ARRAY +b:OBJECT removehandgunitem STRING +b:OBJECT setflagside SIDE +b:ARRAY setwaypointtype STRING +b:OBJECT emptypositions STRING +b:ARRAY setwaypointname STRING +b:ANY remoteexec ARRAY +b:CODE foreachmember TEAM_MEMBER +b:SCALAR setwindstr SCALAR +b:ARRAY vectoradd ARRAY +b:TASK settaskstate STRING +b:ARRAY deleteat SCALAR +b:OBJECT enablesimulation BOOL +b:STRING objstatus STRING +b:OBJECT weapondirection STRING +b:OBJECT removemagazineturret ARRAY +b:OBJECT forcespeed SCALAR +b:OBJECT moveindriver OBJECT +b:OBJECT additemtouniform STRING +b:OBJECT removeallmpeventhandlers STRING +b:OBJECT gethit STRING +b:CONTROL drawarrow ARRAY +b:CONTROL lbsetpicturerightcolordisabled ARRAY +b:CONTROL tvsetdata ARRAY +b:CONTROL ctrlremovealleventhandlers STRING +b:OBJECT setunloadincombat ARRAY +b:LOCATION setrectangular BOOL +b:OBJECT additemtovest STRING +b:ANY params ARRAY +b:CONTROL addmenu ARRAY +b:OBJECT setuseractiontext ARRAY +b:OBJECT setvehicleposition ARRAY +b:OBJECT assignascargo OBJECT +b:ARRAY,OBJECT sideradio STRING +b:OBJECT moveincommander OBJECT +b:ARRAY pushback ANY +b:OBJECT isflashlighton STRING +b:OBJECT setposworld ARRAY +b:STRING createvehiclelocal ARRAY +b:OBJECT triggerattachvehicle ARRAY +b:STRING setmarkerpos ARRAY +b:OBJECT assignitem STRING +b:CONTROL setdrawicon ARRAY +b:STRING setmarkeralphalocal SCALAR +b:OBJECT landat SCALAR +b:OBJECT disablecollisionwith OBJECT +b:CONTROL ctrlsetfontp STRING +b:CONTROL ctrlsetfontp SCALAR +b:CONTROL ctrlsetautoscrolldelay SCALAR +b:OBJECT setskill ARRAY +b:OBJECT setskill SCALAR +b:OBJECT savestatus STRING +b:OBJECT diarysubjectexists STRING +b:OBJECT removeweaponattachmentcargo ARRAY +b:ARRAY,OBJECT dofire OBJECT +b:OBJECT allowdamage BOOL +b:ARRAY setwaypointscript STRING +b:OBJECT setspeaker STRING +b:OBJECT setrepaircargo SCALAR +b:OBJECT setvehicleid SCALAR +b:CONTROL ctrlsetfont STRING +b:CONTROL lbsetvalue ARRAY +b:CONTROL lnbsetpicturecolorright ARRAY +b:DISPLAY displayaddeventhandler ARRAY +b:OBJECT setsuppression SCALAR +b:TEAM_MEMBER setleader TEAM_MEMBER +b:ARRAY vectormultiply SCALAR +b:OBJECT removeweaponcargo ARRAY +b:CONTROL getobjectchildren STRING +b:DISPLAY closedisplay SCALAR +b:OBJECT skillfinal STRING +b:ARRAY append ARRAY +b:OBJECT addbackpackcargoglobal ARRAY +b:OBJECT stop BOOL +b:ARRAY,OBJECT say2d STRING +b:ARRAY,OBJECT say2d ARRAY +b:OBJECT countunknown ARRAY +b:ARRAY select SCALAR +b:ARRAY select BOOL +b:ARRAY select ARRAY +b:STRING select ARRAY +b:CONFIG select SCALAR +b:OBJECT addmagazinecargo ARRAY +b:OBJECT,GROUP enablegunlights STRING +b:CONTROL ctrlsettooltip STRING +b:CONTROL lbtext SCALAR +b:CONTROL lbsetpicturerightcolor ARRAY +b:CONTROL lnbsetpicturecolor ARRAY +b:OBJECT curatorcoef STRING +b:OBJECT setparticleparams ARRAY +b:CONTROL deleteeditorobject STRING +b:OBJECT cameraeffect ARRAY +b:OBJECT addmagazinecargoglobal ARRAY +b:OBJECT getcargoindex OBJECT +b:ARRAY,OBJECT doartilleryfire ARRAY +b:CONTROL showlegend BOOL +b:EXCEPTION catch CODE +b:OBJECT setunitpos STRING +b:BOOL setcamuseti SCALAR +b:CONTROL htmlload STRING +b:CONTROL lnbsetvalue ARRAY +b:OBJECT setcustomweightrtd SCALAR +b:OBJECT selectdiarysubject STRING +b:STRING ppeffectadjust ARRAY +b:SCALAR ppeffectadjust ARRAY +b:OBJECT selectionposition ARRAY,STRING +b:STRING setmarkeralpha SCALAR +b:OBJECT additemcargoglobal ARRAY +b:SCALAR preloadobject STRING,OBJECT +b:OBJECT setpitch SCALAR +b:ARRAY,OBJECT setmusiceffect STRING +b:CONTROL drawrectangle ARRAY +b:CONTROL lnbsetcolorright ARRAY +b:ARRAY allowgetin BOOL +b:CODE foreach ARRAY +b:ARRAY,OBJECT commandartilleryfire ARRAY +b:STRING setmarkerbrush STRING +b:SCALAR,NaN <= SCALAR,NaN +b:OBJECT canadd STRING +b:OBJECT loadmagazine ARRAY +b:CONTROL ctrlshow BOOL +b:ANY execvm STRING +b:CONTROL lbsetselectcolor ARRAY +b:OBJECT addcuratorcameraarea ARRAY +b:OBJECT setautonomous BOOL +b:OBJECT canslingload OBJECT +b:TEAM_MEMBER registertask STRING +b:TASK settaskresult ARRAY +b:ARRAY,OBJECT distance2d ARRAY,OBJECT +b:OBJECT enablereload BOOL +b:OBJECT setunconscious BOOL +b:ARRAY,OBJECT nearobjects SCALAR,ARRAY +b:OBJECT turretunit ARRAY +b:OBJECT removeitem STRING +b:OBJECT countenemy ARRAY +b:OBJECT setlightflaresize SCALAR +b:CONTROL tvsettooltip ARRAY +b:OBJECT enablemimics BOOL +b:CONTROL ctrlsetmodeldirandup ARRAY +b:OBJECT creatediarysubject ARRAY +b:OBJECT unlinkitem STRING +b:ANY execfsm STRING +b:ANY call CODE +b:OBJECT selectweapon STRING +b:OBJECT setvehiclelock STRING +b:OBJECT setflagtexture STRING +b:OBJECT addprimaryweaponitem STRING +b:OBJECT switchmove STRING +b:ARRAY,OBJECT commandtarget OBJECT +b:CONTROL ctrlsetfonth2b STRING +b:OBJECT addcuratoraddons ARRAY +b:OBJECT currentmagazineturret ARRAY +b:OBJECT currentmagazinedetailturret ARRAY +b:OBJECT minedetectedby SIDE +b:CONTROL onshownewobject STRING +b:OBJECT removeweaponglobal STRING +b:OBJECT,GROUP setgroupid ARRAY +b:OBJECT setvehicleammo SCALAR +b:OBJECT camsetpos ARRAY +b:SCALAR,NaN >= SCALAR,NaN +b:STRING createvehicle ARRAY +b:SCALAR debugfsm BOOL +b:OBJECT attachto ARRAY +b:CONTROL drawline ARRAY +b:CONTROL lnbvalue ARRAY +b:CONTROL tvsetpicture ARRAY +b:CONTROL progresssetposition SCALAR +b:CONTROL ctrlremoveeventhandler ARRAY +b:OBJECT animatedoor ARRAY +b:ARRAY setwaypointloitertype STRING +b:ARRAY setwaypointstatements ARRAY +b:OBJECT respawnvehicle ARRAY +b:OBJECT flyinheight SCALAR +b:OBJECT setidentity STRING +b:ARRAY,OBJECT settitleeffect ARRAY +b:OBJECT isuniformallowed STRING +b:ARRAY joinsilent OBJECT,GROUP +b:OBJECT addmagazineammocargo ARRAY +b:OBJECT removesecondaryweaponitem STRING +b:OBJECT switchgesture STRING +b:OBJECT camcommit SCALAR +b:OBJECT setvelocitytransformation ARRAY +b:CONFIG >> STRING +b:OBJECT kbaddtopic ARRAY +b:CONTROL ctrlenable BOOL +b:DISPLAY displayseteventhandler ARRAY +b:CONTROL lnbtext ARRAY +b:OBJECT connectterminaltouav OBJECT +b:STRING ppeffectenable BOOL +b:ARRAY ppeffectenable BOOL +b:SCALAR ppeffectenable BOOL +b:OBJECT adduniform STRING +b:OBJECT allowdammage BOOL +b:CONTROL ctrlmapcursor ARRAY +b:OBJECT setcollisionlight BOOL +b:OBJECT,GROUP enableirlasers BOOL +b:OBJECT enablecopilot BOOL +b:CONTROL ctrlsetfonth4b STRING +b:CONTROL tvsortbyvalue ARRAY +b:OBJECT loadidentity STRING +b:TEAM_MEMBER createtask ARRAY +b:LOCATION settext STRING +b:LOCATION setside SIDE +b:OBJECT,GROUP setbehaviour STRING +b:SCALAR,NaN ^ SCALAR,NaN +b:OBJECT hcremovegroup GROUP +b:CONTROL loadoverlay CONFIG +b:OBJECT assignasgunner OBJECT +b:OBJECT removeitemfromvest STRING +b:OBJECT playmove STRING +b:OBJECT addbackpackcargo ARRAY +b:OBJECT setweaponreloadingtime ARRAY +b:CONTROL posscreentoworld ARRAY +b:CONTROL tvsetpicturecolor ARRAY +b:OBJECT isuavconnectable ARRAY +b:OBJECT setfaceanimation SCALAR +b:STRING counttype ARRAY +b:ARRAY setwaypointposition ARRAY +b:BOOL && BOOL +b:BOOL && CODE +b:OBJECT groupchat STRING +b:OBJECT globalchat STRING +b:CONTROL lbtextright SCALAR +b:FOR to SCALAR +b:OBJECT useaudiotimeformoves BOOL +b:SCALAR fadesound SCALAR +b:OBJECT groupselectunit ARRAY +b:OBJECT setrandomlip BOOL +b:OBJECT modeltoworldvisual ARRAY +b:SCALAR setrain SCALAR +b:CONTROL updatemenuitem ARRAY +b:OBJECT,GROUP setformdir SCALAR +b:STRING createunit ARRAY +b:GROUP createunit ARRAY +b:CONTROL removedrawlinks ARRAY +b:ARRAY,OBJECT commandchat STRING +b:SCALAR cutrsc ARRAY +b:OBJECT allowcrewinimmobile BOOL +b:CONTROL ctrlsetfonth6b STRING +b:CONTROL lnbsetpicture ARRAY +b:CONTROL tvdata ARRAY +b:CONTROL tvvalue ARRAY +b:OBJECT setwingforcescalertd ARRAY +b:OBJECT allowcuratorlogicignoreareas BOOL +b:OBJECT doorphase STRING +b:ARRAY vectorcrossproduct ARRAY +b:CONTROL ctrlsetmodel STRING +b:CONTROL geteditorobjectscope STRING +b:CONTROL drawlink ARRAY +b:OBJECT gethitindex SCALAR +b:OBJECT addmagazineglobal STRING +b:OBJECT lockdriver BOOL +b:STRING setmarkercolorlocal STRING +b:ARRAY joinstring STRING +b:OBJECT addsecondaryweaponitem STRING +b:OBJECT getartilleryeta ARRAY +b:CONTROL lnbaddrow ARRAY +b:CONTROL lnbtextright ARRAY +b:CONTROL lnbsettextright ARRAY +b:CONTROL controlsgroupctrl SCALAR +b:OBJECT lock BOOL +b:OBJECT lock SCALAR +b:ARRAY sort BOOL +b:OBJECT camsetfovrange ARRAY +b:OBJECT globalradio STRING +b:STRING setmarkertext STRING +b:OBJECT enableai STRING +b:OBJECT addscore SCALAR +b:OBJECT playaction STRING +b:GROUP addwaypoint ARRAY +b:ARRAY arrayintersect ARRAY +b:STRING camcreate ARRAY +b:GROUP unitsbelowheight SCALAR +b:ARRAY unitsbelowheight SCALAR +b:OBJECT weaponsturret ARRAY +b:CONTROL ctrlsetbackgroundcolor ARRAY +b:CONTROL lbsetselected ARRAY +b:SCALAR radiochannelremove ARRAY +b:OBJECT setlightdaylight BOOL +b:OBJECT synchronizeobjectsremove ARRAY +b:OBJECT addbackpack STRING +b:ARRAY,OBJECT commandmove ARRAY +b:STRING,TEXT setattributes ARRAY +b:ARRAY,OBJECT commandfollow OBJECT +b:CONTROL seteditormode STRING +b:OBJECT ammo STRING +b:OBJECT lightattachobject ARRAY +b:OBJECT skill STRING +b:CONTROL tvpictureright ARRAY +b:CONTROL ctrlmapanimadd ARRAY +b:CONTROL ctrlmapworldtoscreen ARRAY +b:OBJECT synchronizeobjectsadd ARRAY +b:ARRAY ropeattachto OBJECT +b:ARRAY,OBJECT say STRING +b:ARRAY,OBJECT say ARRAY +b:ARRAY resize SCALAR +b:SCALAR,NaN % SCALAR,NaN +b:ARRAY setwaypointcompletionradius SCALAR +b:OBJECT findnearestenemy ARRAY,OBJECT +b:OBJECT setunitposweak STRING +b:OBJECT removemagazines STRING +b:OBJECT playgesture STRING +b:STRING splitstring STRING +b:OBJECT setcenterofmass ARRAY +b:TASK setsimpletaskdescription ARRAY +b:OBJECT setdir SCALAR +b:OBJECT camsettarget OBJECT +b:OBJECT camsettarget ARRAY +b:ARRAY set ARRAY +b:OBJECT setvectordir ARRAY +b:OBJECT moveto ARRAY +b:CONTROL getobjectproxy STRING +b:CODE count ARRAY +b:GROUP setgroupicon ARRAY +b:GROUP setgroupiconparams ARRAY +b:CONTROL evalobjectargument ARRAY +b:STRING addpublicvariableeventhandler CODE +b:STRING addpublicvariableeventhandler ARRAY +b:OBJECT enablecollisionwith OBJECT +b:OBJECT setunitrecoilcoefficient SCALAR +b:CONTROL tvtooltip SCALAR +b:CONTROL lbsetpictureright ARRAY +b:DISPLAY createmissiondisplay STRING +b:DISPLAY createmissiondisplay ARRAY +b:LOCATION setposition ARRAY +b:STRING setmarkertypelocal STRING +b:OBJECT removemagazineglobal STRING +b:OBJECT groupradio STRING +b:OBJECT setfuelcargo SCALAR +b:OBJECT addmpeventhandler ARRAY +b:OBJECT hcsetgroup ARRAY +b:OBJECT setdammage SCALAR +b:STRING hintc STRING +b:STRING hintc TEXT +b:STRING hintc ARRAY +b:OBJECT setcaptive SCALAR,BOOL +b:OBJECT settriggerstatements ARRAY +b:OBJECT findcover ARRAY +b:OBJECT,GROUP setcombatmode STRING +b:TEAM_MEMBER setcombatmode STRING +b:OBJECT disabletiequipment BOOL +b:OBJECT loadstatus STRING +b:ARRAY vectordistance ARRAY +b:CONTROL removedrawicon ARRAY +b:OBJECT weaponaccessoriescargo ARRAY +b:OBJECT assignteam STRING +b:OBJECT camsetfov SCALAR +b:OBJECT,GROUP setspeedmode STRING +b:OBJECT settriggertext STRING +b:SCALAR setradiomsg STRING +b:OBJECT,GROUP setformation STRING +b:TEAM_MEMBER setformation STRING +b:OBJECT removempeventhandler ARRAY +b:OBJECT joinas ARRAY +b:CONTROL lbsetcursel SCALAR +b:CONTROL tvpicture ARRAY +b:DISPLAY displayremoveeventhandler ARRAY +b:OBJECT customchat ARRAY +b:OBJECT currentweaponturret ARRAY +b:OBJECT canadditemtobackpack STRING +b:ARRAY setwaypointbehaviour STRING +b:CONTROL allowfileoperations BOOL +b:ARRAY,OBJECT seteffectcondition STRING +b:OBJECT setpilotlight BOOL +b:CONTROL lnbpictureright ARRAY +b:OBJECT addcuratorpoints SCALAR +b:STRING setdebriefingtext ARRAY +b:TASK sendtaskresult ARRAY +b:OBJECT createsimpletask ARRAY +b:SCALAR,NaN * SCALAR,NaN +b:CONTROL setvisibleiftreecollapsed ARRAY +b:OBJECT assignasturret ARRAY +b:CONTROL editorseteventhandler ARRAY +b:CONTROL ctrlsetfontpb STRING +b:CONTROL lbsetcolor ARRAY +b:OBJECT setcuratorcameraareaceiling SCALAR +b:OBJECT setlightattenuation ARRAY +b:OBJECT creatediaryrecord ARRAY +b:LOCATION setimportance SCALAR +b:GROUP getgroupicon SCALAR +b:NAMESPACE setvariable ARRAY +b:CONTROL setvariable ARRAY +b:OBJECT setvariable ARRAY +b:GROUP setvariable ARRAY +b:TEAM_MEMBER setvariable ARRAY +b:TASK setvariable ARRAY +b:LOCATION setvariable ARRAY +b:ARRAY,OBJECT dowatch ARRAY +b:ARRAY,OBJECT dowatch OBJECT +b:OBJECT setvehiclevarname STRING +b:CONTROL moveobjecttoend STRING +b:OBJECT campreparetarget OBJECT +b:OBJECT campreparetarget ARRAY +b:ANY param ARRAY +b:OBJECT canadditemtovest STRING +b:SCALAR,NaN + SCALAR,NaN +b:STRING + STRING +b:ARRAY + ARRAY +b:ANY onmapsingleclick STRING,CODE +b:OBJECT setlightcolor ARRAY +b:OBJECT hideobjectglobal BOOL +b:CONTROL lbsetpicturecolordisabled ARRAY +b:CONTROL lnbsetdata ARRAY +b:CONTROL lnbcolorright ARRAY +b:CONTROL tvcollapse ARRAY +b:CODE foreachmemberagent TEAM_MEMBER +b:OBJECT setbrakesrtd ARRAY +b:ARRAY vectorfromto ARRAY +b:SCALAR enablechannel BOOL +b:LOCATION setspeech STRING +b:OBJECT lockcamerato ARRAY +b:SCALAR,NaN atan2 SCALAR,NaN +b:OBJECT setposasl ARRAY +b:ARRAY setwppos ARRAY +b:OBJECT sendsimplecommand STRING +b:OBJECT moveingunner OBJECT +b:ARRAY deleterange ARRAY +b:CONTROL ctrlsetfontsecondary STRING +b:CONTROL ctrlsettext STRING +b:CONTROL ctrlsetfonth1 STRING +b:CONTROL tvexpand ARRAY +b:ARRAY nearestobject STRING +b:ARRAY nearestobject SCALAR +b:OBJECT setlightflaremaxdistance SCALAR +b:OBJECT setmass SCALAR,ARRAY +b:OBJECT removemagazinesturret ARRAY +b:OBJECT addeventhandler ARRAY +b:OBJECT campreload SCALAR +b:SCALAR,NaN - SCALAR,NaN +b:ARRAY - ARRAY +b:STRING setmarkerdir SCALAR +b:OBJECT isirlaseron STRING +b:ARRAY setwaypointcombatmode STRING +b:OBJECT,GROUP knowsabout OBJECT +b:SIDE knowsabout OBJECT +b:CONTROL ctrlsetfonth2 STRING +b:CONTROL ctrlsetactivecolor ARRAY +b:CONTROL lnbdeleterow SCALAR +b:CONTROL lnbsetcolor ARRAY +b:ARRAY vectordistancesqr ARRAY +b:OBJECT worldtomodelvisual ARRAY +b:OBJECT removeitems STRING +b:OBJECT lockcargo ARRAY +b:OBJECT lockcargo BOOL +b:ARRAY setwaypointformation STRING +b:OBJECT forcewalk BOOL +b:ARRAY,OBJECT lookat ARRAY,OBJECT +b:OBJECT setowner SCALAR +b:OBJECT kbadddatabasetargets STRING +b:CONTROL ctrlsetfonth3 STRING +b:CONTROL ctrlsettooltipcolorshade ARRAY +b:ARRAY,OBJECT commandfsm ARRAY +b:CONTROL lbsetpicturerightcolorselected ARRAY +b:CONTROL slidersetspeed ARRAY +b:SCALAR ppeffectforceinnvg BOOL +b:OBJECT setcamerainterest SCALAR +b:OBJECT modeltoworld ARRAY +b:STRING setmarkerposlocal ARRAY +b:OBJECT addmagazines ARRAY +b:OBJECT playmovenow STRING +b:ANY in ARRAY +b:OBJECT in OBJECT +b:ARRAY in LOCATION +b:OBJECT assignascommander OBJECT +b:OBJECT countfriendly ARRAY +b:STRING setmarkercolor STRING +b:OBJECT addmagazine STRING +b:OBJECT addmagazine ARRAY +b:ARRAY,OBJECT dotarget OBJECT +b:SCALAR,NaN / SCALAR,NaN +b:CONFIG / STRING +b:ARRAY,OBJECT sidechat STRING +b:OBJECT addvest STRING +b:OBJECT,GROUP reveal OBJECT +b:OBJECT,GROUP reveal ARRAY +b:GROUP setcurrentwaypoint ARRAY +b:OBJECT addhandgunitem STRING +b:OBJECT aimedattarget ARRAY +b:CONTROL ctrlsetfonth4 STRING +b:CONTROL ctrladdeventhandler ARRAY +b:SCALAR radiochannelsetlabel STRING +b:ANY remoteexeccall ARRAY +b:TEAM_MEMBER deleteresources ARRAY +b:SCALAR setwaves SCALAR +b:OBJECT setslingload OBJECT +b:ARRAY,OBJECT commandfire OBJECT +b:OBJECT setname STRING +b:OBJECT setname ARRAY +b:LOCATION setname STRING +b:OBJECT addweaponturret ARRAY +b:STRING createsite ARRAY +b:OBJECT addweaponcargo ARRAY +b:SCALAR getfsmvariable STRING +b:OBJECT disableai STRING +b:SCALAR setwindforce SCALAR +b:CONTROL drawellipse ARRAY +b:CONTROL ctrlsetfonth5 STRING +b:CONTROL lbsetdata ARRAY +b:OBJECT saveidentity STRING +b:LOCATION settype STRING +b:OBJECT camcommand STRING +b:OBJECT additemtobackpack STRING +b:OBJECT weaponaccessories STRING +b:OBJECT sethit ARRAY +b:OBJECT setparticlefire ARRAY +b:OBJECT getspeed STRING +b:OBJECT setammo ARRAY +b:OBJECT removemagazine ARRAY,STRING +b:OBJECT lockedcargo SCALAR +b:CONTROL ctrlsetfonth6 STRING +b:CONTROL ctrlsettooltipcolorbox ARRAY +b:ARRAY setwaypointloiterradius SCALAR +b:OBJECT deletevehiclecrew OBJECT +b:OBJECT turretlocal ARRAY +b:OBJECT addweaponitem ARRAY +b:GROUP removegroupicon SCALAR +b:STRING setmarkerbrushlocal STRING +b:OBJECT removeweapon STRING +b:CONTROL mapcenteroncamera BOOL +b:CONTROL lbvalue SCALAR +b:CONTROL lnbcolor ARRAY +b:CONTROL slidersetposition SCALAR +b:CONTROL slidersetrange ARRAY +b:SCALAR radiochannelsetcallsign STRING +b:TEAM_MEMBER addresources ARRAY +b:OBJECT setlightuseflare BOOL +b:OBJECT addweapon STRING +b:OBJECT campreparepos ARRAY +b:OBJECT setformationtask STRING +b:STRING setpipeffect ARRAY +b:OBJECT inflame BOOL +b:OBJECT camconstuctionsetparams ARRAY +b:OBJECT switchaction STRING +b:SCALAR setairportside SIDE +b:SCALAR publicvariableclient STRING +b:CONTROL ctrlsetchecked BOOL +b:OBJECT assigncurator OBJECT +b:CONTROL lbsettooltip ARRAY +b:OBJECT,GROUP allowfleeing SCALAR +b:OBJECT suppressfor SCALAR +b:CONTROL addeditorobject ARRAY +b:ARRAY showwaypoint STRING +b:ARRAY,OBJECT commandradio STRING +b:OBJECT vehicleradio STRING +b:CONTROL findeditorobject ARRAY +b:CONTROL findeditorobject ANY +b:OBJECT setflagowner OBJECT +b:CONTROL posworldtoscreen ARRAY +b:CONTROL ctrlsetposition ARRAY +b:CONTROL tvadd ARRAY +b:CONTROL tvsetvalue ARRAY +b:STRING callextension STRING +b:ARRAY vectorcos ARRAY +b:LOCATION setdirection SCALAR +b:ARRAY setwaypointhouseposition SCALAR +b:OBJECT campreparebank SCALAR +b:STRING setmarkertype STRING +b:SIDE addscoreside SCALAR +b:OBJECT,GROUP move ARRAY +b:OBJECT camcommitprepared SCALAR +b:OBJECT setvelocity ARRAY +b:OBJECT disablenvgequipment BOOL +b:CONTROL ctrlsetfade SCALAR +b:CONTROL lbsetpicture ARRAY +b:CONTROL lbsetcolorright ARRAY +b:CONTROL tvsetpicturecolorright ARRAY +b:OBJECT moveinany OBJECT +b:OBJECT ropedetach OBJECT +b:OBJECT setcurrenttask TASK +b:ARRAY waypointattachvehicle OBJECT +b:OBJECT sethidebehind ARRAY +b:SCALAR,NaN max SCALAR,NaN +b:OBJECT targetknowledge OBJECT +b:ARRAY,OBJECT commandwatch ARRAY +b:ARRAY,OBJECT commandwatch OBJECT +b:CONTROL show3dicons BOOL +b:OBJECT camsetdir ARRAY +b:ARRAY,OBJECT setsoundeffect ARRAY +b:CONTROL setobjectproxy ARRAY +b:CONTROL lnbsetpictureright ARRAY +b:CONTROL tvdelete ARRAY +b:TEAM_MEMBER setfromeditor BOOL +b:OBJECT setrotorbrakertd SCALAR +b:ARRAY,OBJECT distance ARRAY,OBJECT +b:LOCATION distance LOCATION +b:LOCATION distance ARRAY +b:ARRAY distance LOCATION +b:SCALAR,NaN mod SCALAR,NaN +b:ARRAY,OBJECT say3d STRING +b:ARRAY,OBJECT say3d ARRAY +b:SCALAR cutobj ARRAY +b:OBJECT moveinturret ARRAY +b:OBJECT removeitemfromuniform STRING +b:OBJECT setlightbrightness SCALAR +b:OBJECT directsay STRING +b:OBJECT buildingexit SCALAR +b:OBJECT synchronizetrigger ARRAY +b:OBJECT hasweapon STRING +b:OBJECT fireattarget ARRAY +b:OBJECT kbremovetopic STRING +b:ARRAY join OBJECT,GROUP +b:ARRAY,OBJECT dofollow OBJECT +b:OBJECT setposasl2 ARRAY +b:SCALAR,NaN min SCALAR,NaN +b:OBJECT setparticlerandom ARRAY +b:OBJECT enablesimulationglobal BOOL +b:CONTROL execeditorscript ARRAY +b:OBJECT playactionnow STRING +b:OBJECT magazinesturret ARRAY +b:CONTROL ctrlsetfontheight SCALAR +b:CONTROL ctrlsetfontheighth1 SCALAR +b:CONTROL ctrlsetautoscrollrewind BOOL +b:CONTROL ctrlseteventhandler ARRAY +b:OBJECT animate ARRAY +b:OBJECT setobjecttexture ARRAY +b:ARRAY targetsaggregate ARRAY +b:OBJECT removeitemfrombackpack STRING +b:ANY breakout STRING +b:OBJECT gethitpointdamage STRING +b:OBJECT assigntoairport SCALAR +b:CONTROL ctrlsetfonth1b STRING +b:CONTROL ctrlsetfontheighth2 SCALAR +b:OBJECT setwantedrpmrtd ARRAY +b:OBJECT removecuratorcameraarea SCALAR +b:TASK setsimpletaskdestination ARRAY +b:BOOL || BOOL +b:BOOL || CODE +b:ARRAY findemptypositionready ARRAY +b:ARRAY find ANY +b:STRING find STRING +b:OBJECT settriggertype STRING +b:OBJECT camsetbank SCALAR +b:OBJECT setunitrank STRING +b:BOOL and BOOL +b:BOOL and CODE +b:SWITCH : CODE +b:SCALAR,NaN == SCALAR,NaN +b:STRING == STRING +b:OBJECT == OBJECT +b:GROUP == GROUP +b:SIDE == SIDE +b:TEXT == TEXT +b:CONFIG == CONFIG +b:DISPLAY == DISPLAY +b:CONTROL == CONTROL +b:TEAM_MEMBER == TEAM_MEMBER +b:NetObject == NetObject +b:TASK == TASK +b:LOCATION == LOCATION +b:OBJECT hcselectgroup ARRAY +b:CONTROL ctrlsetfontheighth3 SCALAR +b:CONTROL ctrlsetautoscrollspeed SCALAR +b:CONTROL tvtext ARRAY +b:OBJECT enableautotrimrtd BOOL +b:SCALAR setrainbow SCALAR +b:OBJECT selectweaponturret ARRAY +b:OBJECT disableuavconnectability ARRAY +b:OBJECT enableropeattach BOOL +b:OBJECT targetsquery ARRAY +b:OBJECT leavevehicle OBJECT +b:GROUP leavevehicle OBJECT +b:CONTROL lookatpos ARRAY +b:STRING setmarkerdirlocal SCALAR +b:OBJECT removeprimaryweaponitem STRING +b:STRING servercommand STRING +b:OBJECT unassignitem STRING +b:OBJECT setammocargo SCALAR +b:OBJECT kbadddatabase STRING +b:CONTROL ctrlsetfontheighth4 SCALAR +b:CONTROL ctrlsetscale SCALAR +b:CONTROL ctrlsettextcolorsecondary ARRAY +b:CONTROL lbsetselectcolorright ARRAY +b:OBJECT setenginerpmrtd ARRAY +b:OBJECT enableuavconnectability ARRAY +b:OBJECT addaction ARRAY +b:GROUP addgroupicon ARRAY +b:OBJECT addweaponcargoglobal ARRAY +b:OBJECT settriggerarea ARRAY +b:BOOL or BOOL +b:BOOL or CODE +b:SCALAR,NaN < SCALAR,NaN +b:ARRAY,OBJECT glanceat ARRAY,OBJECT +b:CONTROL ctrlsetfonth3b STRING +b:CONTROL ctrlsetfontheighth5 SCALAR +b:CONTROL lbdata SCALAR +b:CONTROL tvcount ARRAY +b:OBJECT removecuratoreditingarea SCALAR +b:GROUP selectleader OBJECT +b:OBJECT additemcargo ARRAY +b:OBJECT camsetrelpos ARRAY +b:ARRAY,OBJECT nearsupplies SCALAR,ARRAY +b:OBJECT remotecontrol OBJECT +b:OBJECT setfuel SCALAR +b:OBJECT vehiclechat STRING +b:CONTROL ctrlsetfontheighth6 SCALAR +b:ARRAY,OBJECT dofsm ARRAY +b:CONTROL lbdelete SCALAR +b:TEAM_MEMBER removeteammember TEAM_MEMBER +b:SCALAR,NaN > SCALAR,NaN +b:OBJECT removeeventhandler ARRAY +b:ARRAY setwaypointspeed STRING +b:OBJECT setparticleclass STRING +b:CONTROL selecteditorobject STRING +b:GROUP copywaypoints GROUP +b:OBJECT settriggertimeout ARRAY +b:CODE else CODE +b:OBJECT sethitpointdamage ARRAY +b:CONTROL ctrlsetforegroundcolor ARRAY +b:DISPLAY displayremovealleventhandlers STRING +b:SCALAR radiochanneladd ARRAY +b:OBJECT setobjectmaterial ARRAY +b:OBJECT setposaslw ARRAY +b:ARRAY vectordotproduct ARRAY +b:OBJECT turretowner ARRAY +u:clearitemcargoglobal OBJECT +u:updateobjecttree CONTROL +u:formattext ARRAY +u:hcallgroups OBJECT +u:markerdir STRING +u:captivenum OBJECT +u:triggertext OBJECT +u:setgroupiconsselectable BOOL +u:playersnumber SIDE +u:camerainterest OBJECT +u:clearweaponcargo OBJECT +u:owner OBJECT +u:ceil SCALAR,NaN +u:boundingcenter OBJECT +u:isautohoveron OBJECT +u:enableenvironment BOOL +u:lbcolorright ARRAY +u:tvsetpictureright ARRAY +u:lnbdeletecolumn ARRAY +u:onplayerconnected STRING,CODE +u:fillweaponsfrompool OBJECT +u:weaponsitems OBJECT +u:enginesisonrtd OBJECT +u:getdlcs SCALAR +u:backpackcargo OBJECT +u:uniform OBJECT +u:showcompass BOOL +u:iskeyactive STRING +u:atltoasl ARRAY +u:showradio BOOL +u:flag OBJECT +u:getarray CONFIG +u:islighton OBJECT +u:getammocargo OBJECT +u:vectornormalized ARRAY +u:showwarrant BOOL +u:forcemap BOOL +u:showpad BOOL +u:hint STRING,TEXT +u:vectorup OBJECT +u:everycontainer OBJECT +u:getfatigue OBJECT +u:keyname SCALAR +u:setcamshakedefparams ARRAY +u:lnbcurselrow CONTROL +u:lnbcurselrow SCALAR +u:lnbsetcurselrow ARRAY +u:enablediaglegend BOOL +u:incapacitatedstate OBJECT +u:hcselected OBJECT +u:getbackpackcargo OBJECT +u:markercolor STRING +u:progressloadingscreen SCALAR +u:createmine ARRAY +u:showwatch BOOL +u:diag_log ANY +u:sendudpmessage ARRAY +u:unitbackpack OBJECT +u:isnumber CONFIG +u:ctrlidc CONTROL +u:closedialog SCALAR +u:tvsetcursel ARRAY +u:lnbsetcolumnspos ARRAY +u:lnbpicture ARRAY +u:magazinesammocargo OBJECT +u:deletestatus STRING +u:rotorsforcesrtd OBJECT +u:createvehiclecrew OBJECT +u:ctrlmodeldirandup CONTROL +u:landresult OBJECT +u:triggeractivation OBJECT +u:tolower STRING +u:waypointvisible ARRAY +u:enablesatnormalondetail BOOL +u:ctrlidd DISPLAY +u:buttonsetaction ARRAY +u:lnbdata ARRAY +u:getrotorbrakertd OBJECT +u:reloadenabled OBJECT +u:commandstop ARRAY,OBJECT +u:waypointtimeout ARRAY +u:removeheadgear OBJECT +u:backpack OBJECT +u:loaduniform OBJECT +u:showcommandingmenu STRING +u:cuttext ARRAY +u:deletemarkerlocal STRING +u:actionname STRING +u:captive OBJECT +u:compilefinal STRING +u:lnbsettext ARRAY +u:for STRING +u:for ARRAY +u:estimatedtimeleft SCALAR +u:getmarkertype STRING +u:screentoworld ARRAY +u:getdir OBJECT +u:inflamed OBJECT +u:playmusic STRING +u:playmusic ARRAY +u:ctrlautoscrollrewind CONTROL +u:ctrlchecked CONTROL +u:cbchecked CONTROL +u:lbsetpicturecolor ARRAY +u:getmass OBJECT +u:processdiarylink STRING +u:atg SCALAR,NaN +u:stance OBJECT +u:flagowner OBJECT +u:deg SCALAR,NaN +u:airportside SCALAR +u:buttonaction CONTROL +u:buttonaction SCALAR +u:lbadd ARRAY +u:queryweaponpool STRING +u:curatoreditingareatype OBJECT +u:getfieldmanualstartpage DISPLAY +u:fullcrew OBJECT +u:fullcrew ARRAY +u:binocular OBJECT +u:sqrt SCALAR,NaN +u:typename ANY +u:forcerespawn OBJECT +u:assignedgunner OBJECT +u:composetext ARRAY +u:unitrecoilcoefficient OBJECT +u:sethudmovementlevels ARRAY +u:isarray CONFIG +u:ctrlcommitted CONTROL +u:movetime OBJECT +u:lbpicture ARRAY +u:lnbaddcolumn ARRAY +u:lnbsetpicturecolorselectedright ARRAY +u:getrepaircargo OBJECT +u:getsuppression OBJECT +u:didjipowner OBJECT +u:simulcloudocclusion ARRAY +u:setsimulweatherlayers SCALAR +u:setdate ARRAY +u:assignedteam OBJECT +u:createagent ARRAY +u:itemswithmagazines OBJECT +u:removevest OBJECT +u:primaryweaponitems OBJECT +u:onhcgroupselectionchanged STRING,CODE +u:driver OBJECT +u:animationstate OBJECT +u:formationdirection OBJECT +u:titletext ARRAY +u:inputaction STRING +u:ismanualfire OBJECT +u:ctrlmapanimclear CONTROL +u:weaponstate ARRAY,OBJECT +u:islocalized STRING +u:lbcolor ARRAY +u:lbsetpicturecolorselected ARRAY +u:lnbaddarray ARRAY +u:magazinesdetail OBJECT +u:simpletasks OBJECT +u:createguardedpoint ARRAY +u:removeuniform OBJECT +u:uniformmagazines OBJECT +u:waypointspeed ARRAY +u:asltoagl ARRAY +u:failmission STRING +u:markertype STRING +u:currentzeroing OBJECT +u:ctrlscale CONTROL +u:ctrlmapanimcommit CONTROL +u:lbpictureright ARRAY +u:secondaryweapon OBJECT +u:assignedvehiclerole OBJECT +u:direction OBJECT +u:direction LOCATION +u:asin SCALAR,NaN +u:creategroup SIDE +u:vestitems OBJECT +u:mapanimadd ARRAY +u:removemissioneventhandler ARRAY +u:lnbclear CONTROL +u:lnbclear SCALAR +u:lnbsetpicturecolorselected ARRAY +u:magazinesdetailvest OBJECT +u:playsound3d ARRAY +u:getconnecteduav OBJECT +u:reload OBJECT +u:hcshowbar BOOL +u:rating OBJECT +u:dissolveteam STRING +u:nextmenuitemindex CONTROL +u:forceatpositionrtd ARRAY +u:unassigncurator OBJECT +u:leaderboardsrequestuploadscorekeepbest ARRAY +u:visiblepositionasl OBJECT +u:waypointposition ARRAY +u:localize STRING +u:scriptname STRING +u:importallgroups CONTROL +u:isobjecthidden OBJECT +u:deletegroup GROUP +u:lasertarget OBJECT +u:publicvariableserver STRING +u:ctrlshown CONTROL +u:tvsort ARRAY +u:setwinddir ARRAY +u:isdlcavailable SCALAR +u:currenttask OBJECT +u:saveoverlay CONTROL +u:showhud BOOL +u:showhud ARRAY +u:loadbackpack OBJECT +u:enablecamshake BOOL +u:radiochannelcreate ARRAY +u:putweaponpool OBJECT +u:createteam ARRAY +u:getdlcusagetime SCALAR +u:ctrldelete CONTROL +u:nearestlocation ARRAY +u:classname LOCATION +u:ppeffectcreate ARRAY +u:commandgetout ARRAY,OBJECT +u:roadsconnectedto OBJECT +u:hideobject OBJECT +u:triggertimeout OBJECT +u:fromeditor TEAM_MEMBER +u:curatorpoints OBJECT +u:getobjectdlc OBJECT +u:squadparams OBJECT +u:leaderboarddeinit STRING +u:vectordirvisual OBJECT +u:savevar STRING +u:parsetext STRING +u:ongroupiconoverenter STRING,CODE +u:getposatl OBJECT +u:sleep SCALAR +u:secondaryweaponitems OBJECT +u:cos SCALAR,NaN +u:someammo OBJECT +u:addmissioneventhandler ARRAY +u:tvclear SCALAR +u:tvclear CONTROL +u:tvcursel SCALAR +u:tvcursel CONTROL +u:groupfromnetid STRING +u:settrafficgap ARRAY +u:opendlcpage SCALAR +u:remoteexec ARRAY +u:verifysignature STRING +u:commitoverlay CONTROL +u:uniformcontainer OBJECT +u:text STRING +u:text LOCATION +u:clearoverlay CONTROL +u:unassignteam OBJECT +u:actionkeysnames ARRAY,STRING +u:actionkeysnamesarray ARRAY,STRING +u:movetofailed OBJECT +u:atan SCALAR,NaN +u:damage OBJECT +u:collapseobjecttree CONTROL +u:side OBJECT +u:side GROUP +u:side LOCATION +u:titlersc ARRAY +u:wfsidetext SIDE +u:wfsidetext OBJECT +u:wfsidetext GROUP +u:tvsetdata ARRAY +u:allvariables CONTROL +u:allvariables TEAM_MEMBER +u:allvariables NAMESPACE +u:allvariables OBJECT +u:allvariables GROUP +u:allvariables TASK +u:allvariables LOCATION +u:ongroupiconclick STRING,CODE +u:assigneditems OBJECT +u:unitready ARRAY,OBJECT +u:params ARRAY +u:setterraingrid SCALAR +u:isnull OBJECT +u:isnull GROUP +u:isnull SCRIPT +u:isnull CONTROL +u:isnull DISPLAY +u:isnull NetObject +u:isnull TASK +u:isnull LOCATION +u:triggertype OBJECT +u:onbriefingteamswitch STRING +u:onplayerdisconnected STRING,CODE +u:settrafficdensity ARRAY +u:setcurrentchannel SCALAR +u:default CODE +u:firstbackpack OBJECT +u:formleader OBJECT +u:loadfile STRING +u:checkaifeature STRING +u:isonroad ARRAY,OBJECT +u:titlecut ARRAY +u:oncommandmodechanged STRING,CODE +u:assignedtarget OBJECT +u:istouchingground OBJECT +u:magazinesdetailbackpack OBJECT +u:members TEAM_MEMBER +u:isautonomous OBJECT +u:removebackpackglobal OBJECT +u:triggerarea OBJECT +u:hintsilent STRING,TEXT +u:ln SCALAR,NaN +u:getmodelinfo OBJECT +u:setmouseposition ARRAY +u:isclass CONFIG +u:lbsetvalue ARRAY +u:lnbsetpicturecolorright ARRAY +u:agent TEAM_MEMBER +u:enginestorquertd OBJECT +u:configsourcemod CONFIG +u:taskcompleted TASK +u:locationposition LOCATION +u:taskhint ARRAY +u:getmarkersize STRING +u:velocitymodelspace OBJECT +u:handgunmagazine OBJECT +u:numbertodate ARRAY +u:faction OBJECT +u:group OBJECT +u:synchronizedobjects OBJECT +u:terminate SCRIPT +u:nearestobjects ARRAY +u:camusenvg BOOL +u:objectparent OBJECT +u:isforcedwalk OBJECT +u:currentvisionmode OBJECT +u:gearslotdata CONTROL +u:lbtext ARRAY +u:lnbsetpicturecolor ARRAY +u:drop ARRAY +u:getoxygenremaining OBJECT +u:enabledebriefingstats ARRAY +u:leaderboardstate STRING +u:exportjipmessages STRING +u:deletelocation LOCATION +u:soldiermagazines OBJECT +u:format ARRAY +u:finite SCALAR,NaN +u:waypointhouseposition ARRAY +u:geteditorcamera CONTROL +u:showmap BOOL +u:deletemarker STRING +u:worldtoscreen ARRAY +u:list OBJECT +u:leader OBJECT +u:leader GROUP +u:leader TEAM_MEMBER +u:currentweapon OBJECT +u:setdetailmapblendpars ARRAY +u:toarray STRING +u:currentmuzzle OBJECT +u:lbcursel CONTROL +u:lbcursel SCALAR +u:lnbsetvalue ARRAY +u:enginesrpmrtd OBJECT +u:wingsforcesrtd OBJECT +u:isobjectrtd OBJECT +u:setdefaultcamera ARRAY +u:isturnedout OBJECT +u:surfacenormal ARRAY +u:primaryweaponmagazine OBJECT +u:getmarkerpos STRING +u:cameraeffectenablehud BOOL +u:goto STRING +u:configname CONFIG +u:ctrlhtmlloaded CONTROL +u:lbselection CONTROL +u:lnbgetcolumnsposition CONTROL +u:lnbgetcolumnsposition SCALAR +u:lnbsetcolorright ARRAY +u:addmusiceventhandler ARRAY +u:isweapondeployed OBJECT +u:taskdescription TASK +u:waypointtype ARRAY +u:markersize STRING +u:handgunitems OBJECT +u:waypointname ARRAY +u:preloadtitlersc ARRAY +u:setacctime SCALAR +u:load OBJECT +u:hmd OBJECT +u:deletewaypoint ARRAY +u:tg SCALAR,NaN +u:morale OBJECT +u:lineintersectswith ARRAY +u:execvm STRING +u:ctrlshow ARRAY +u:lbsetselectcolor ARRAY +u:queryitemspool STRING +u:enablecaustics BOOL +u:isbleeding OBJECT +u:removefromremainscollector ARRAY +u:allturrets ARRAY +u:allturrets OBJECT +u:ctrlparentcontrolsgroup CONTROL +u:getposvisual OBJECT +u:with NAMESPACE +u:not BOOL +u:waypointattachedobject ARRAY +u:assert BOOL +u:namesound OBJECT +u:setwind ARRAY +u:createmarkerlocal ARRAY +u:settrafficdistance SCALAR +u:tvsettooltip ARRAY +u:ropecreate ARRAY +u:str ANY +u:execfsm STRING +u:enableradio BOOL +u:fleeing OBJECT +u:setobjectviewdistance SCALAR +u:setobjectviewdistance ARRAY +u:isnil STRING,CODE +u:visibleposition OBJECT +u:groupowner GROUP +u:call CODE +u:restarteditorcamera CONTROL +u:locked OBJECT +u:getweaponcargo OBJECT +u:setshadowdistance SCALAR +u:createsoundsource ARRAY +u:deactivatekey STRING +u:copytoclipboard STRING +u:isshowing3dicons CONTROL +u:ctrlautoscrollspeed CONTROL +u:ctrlmapanimdone CONTROL +u:teammember OBJECT +u:isagent TEAM_MEMBER +u:isburning OBJECT +u:setlocalwindparams ARRAY +u:tostring ARRAY +u:actionkeysimages ARRAY,STRING +u:assignedvehicle OBJECT +u:hcremoveallgroups OBJECT +u:backpackmagazines OBJECT +u:waituntil CODE +u:onpreloadstarted STRING,CODE +u:units GROUP +u:units OBJECT +u:movetocompleted OBJECT +u:actionkeys STRING +u:formationposition OBJECT +u:deletesite OBJECT +u:keyimage SCALAR +u:deletecollection OBJECT +u:scriptdone SCRIPT +u:createvehicle ARRAY +u:aisfinishheal ARRAY +u:lbsortbyvalue CONTROL +u:tvsetpicture ARRAY +u:lnbvalue ARRAY +u:stopenginertd OBJECT +u:configsourcemodlist CONFIG +u:completedfsm SCALAR +u:hidebody OBJECT +u:clearmagazinecargo OBJECT +u:moveout OBJECT +u:currentweaponmode OBJECT +u:playmission ARRAY +u:resetsubgroupdirection OBJECT +u:ctrlmapscale CONTROL +u:progressposition CONTROL +u:hostmission ARRAY +u:ctrlenable ARRAY +u:lnbtext ARRAY +u:enabletraffic BOOL +u:requiredversion STRING +u:triggerstatements OBJECT +u:expecteddestination OBJECT +u:currentthrowable OBJECT +u:clearweaponcargoglobal OBJECT +u:setgroupiconsvisible ARRAY +u:mineactive OBJECT +u:position OBJECT +u:position LOCATION +u:createdialog STRING +u:tvsortbyvalue ARRAY +u:getwingspositionrtd OBJECT +u:ropeunwind ARRAY +u:canunloadincombat OBJECT +u:eyedirection OBJECT +u:exp SCALAR,NaN +u:enablesentences BOOL +u:loadabs OBJECT +u:round SCALAR,NaN +u:items OBJECT +u:gearslotammocount CONTROL +u:tvsetpicturecolor ARRAY +u:onbriefingnotes STRING +u:waypointloitertype ARRAY +u:uavcontrol OBJECT +u:attachedto OBJECT +u:setstatvalue ARRAY +u:endmission STRING +u:markershape STRING +u:waypointbehaviour ARRAY +u:commander OBJECT +u:waypointscript ARRAY +u:vest OBJECT +u:preloadcamera ARRAY +u:canmove OBJECT +u:waypointstatements ARRAY +u:backpackitems OBJECT +u:lineintersectssurfaces ARRAY +u:lbtextright ARRAY +u:teamtype TEAM_MEMBER +u:teamname TEAM_MEMBER +u:getdlcassetsusagebyname STRING +u:setplayable OBJECT +u:addswitchableunit OBJECT +u:! BOOL +u:parsenumber STRING +u:parsenumber BOOL +u:uniformitems OBJECT +u:floor SCALAR,NaN +u:rankid OBJECT +u:cutrsc ARRAY +u:lbclear CONTROL +u:lbclear SCALAR +u:tvdata ARRAY +u:tvvalue ARRAY +u:lnbsetpicture ARRAY +u:pickweaponpool OBJECT +u:enginespowerrtd OBJECT +u:removeallcuratoreditingareas OBJECT +u:isinremainscollector OBJECT +u:getobjectmaterials OBJECT +u:preprocessfilelinenumbers STRING +u:preprocessfile STRING +u:removeallhandgunitems OBJECT +u:datetonumber ARRAY +u:camcommitted OBJECT +u:lnbaddrow ARRAY +u:lnbtextright ARRAY +u:lnbsettextright ARRAY +u:getenginetargetrpmrtd OBJECT +u:ropelength OBJECT +u:createlocation ARRAY +u:goggles OBJECT +u:backpackcontainer OBJECT +u:headgear OBJECT +u:name OBJECT +u:name LOCATION +u:alive OBJECT +u:comment STRING +u:showgps BOOL +u:dogetout ARRAY,OBJECT +u:getmarkercolor STRING +u:setsystemofunits SCALAR +u:getbleedingremaining OBJECT +u:showuavfeed BOOL +u:ropeattachedobjects OBJECT +u:type TASK +u:type LOCATION +u:nearestlocationwithdubbing ARRAY +u:simulationenabled OBJECT +u:unlockachievement STRING +u:waypoints OBJECT,GROUP +u:gunner OBJECT +u:closeoverlay CONTROL +u:waypointattachedvehicle ARRAY +u:openmap ARRAY +u:openmap BOOL +u:tvpictureright ARRAY +u:skill OBJECT +u:magazinesallturrets OBJECT +u:synchronizedtriggers ARRAY +u:weaponlowered OBJECT +u:registeredtasks TEAM_MEMBER +u:rectangular LOCATION +u:ppeffectdestroy SCALAR +u:ppeffectdestroy ARRAY +u:playscriptedmission ARRAY +u:playsound STRING +u:playsound ARRAY +u:markerpos STRING +u:removeallcontainers OBJECT +u:skiptime SCALAR +u:triggeractivated OBJECT +u:removeallweapons OBJECT +u:isrealtime CONTROL +u:addweaponpool ARRAY +u:isautostartupenabledrtd OBJECT +u:objectcurators OBJECT +u:ropes OBJECT +u:vehicle OBJECT +u:sin SCALAR,NaN +u:clearbackpackcargo OBJECT +u:unassignvehicle OBJECT +u:removebackpack OBJECT +u:formationmembers OBJECT +u:isformationleader OBJECT +u:removeswitchableunit OBJECT +u:count ARRAY +u:count STRING +u:count CONFIG +u:getdirvisual OBJECT +u:nearestbuilding OBJECT +u:nearestbuilding ARRAY +u:showchat BOOL +u:tvtooltip ARRAY +u:lbsetpictureright ARRAY +u:removeallcuratoraddons OBJECT +u:waypointsenableduav OBJECT +u:ropedestroy OBJECT +u:taskstate TASK +u:activatekey STRING +u:lockeddriver OBJECT +u:if BOOL +u:breakto STRING +u:isplayer OBJECT +u:getdammage OBJECT +u:reverse ARRAY +u:secondaryweaponmagazine OBJECT +u:hintc STRING +u:titleobj ARRAY +u:assignedcommander OBJECT +u:createtrigger ARRAY +u:iswalking OBJECT +u:inheritsfrom CONFIG +u:ctrltextsecondary CONTROL +u:numberofenginesrtd OBJECT +u:addforcegeneratorrtd ARRAY +u:scopename STRING +u:log SCALAR,NaN +u:dostop ARRAY,OBJECT +u:ctrltext CONTROL +u:ctrltext SCALAR +u:lbsort CONTROL +u:lbsort ARRAY +u:ctrlactivate CONTROL +u:lbsetcursel ARRAY +u:tvpicture ARRAY +u:getstatvalue STRING +u:ppeffectcommitted STRING +u:ppeffectcommitted SCALAR +u:deletecenter SIDE +u:waypointformation ARRAY +u:getposaslvisual OBJECT +u:boundingbox OBJECT +u:pitch OBJECT +u:velocity OBJECT +u:enableteamswitch BOOL +u:buldozer_loadnewroads STRING +u:buldozer_enableroaddiag BOOL +u:lnbpictureright ARRAY +u:enablestressdamage BOOL +u:underwater OBJECT +u:ropeattachedto OBJECT +u:attachedobject LOCATION +u:setcompassoscillation ARRAY +u:startloadingscreen ARRAY +u:canstand OBJECT +u:scudstate OBJECT +u:ongroupiconoverleave STRING,CODE +u:lbsetcolor ARRAY +u:deleteidentity STRING +u:curatorregisteredobjects OBJECT +u:attachedobjects OBJECT +u:isweaponrested OBJECT +u:eyepos OBJECT +u:vectorupvisual OBJECT +u:param ARRAY +u:markeralpha STRING +u:campreloaded OBJECT +u:+ SCALAR,NaN +u:+ ARRAY +u:currentwaypoint GROUP +u:hideobjectglobal OBJECT +u:getpos OBJECT +u:getpos LOCATION +u:removeallactions OBJECT +u:currentmagazinedetail OBJECT +u:ctrlmapmouseover CONTROL +u:getterrainheightasl ARRAY +u:ctrltextheight CONTROL +u:lbsetpicturecolordisabled ARRAY +u:tvcollapse ARRAY +u:lnbsetdata ARRAY +u:lnbcolorright ARRAY +u:additempool ARRAY +u:onbriefingplan STRING +u:onbriefinggroup STRING +u:onmapsingleclick STRING,CODE +u:magazines OBJECT +u:gettrimoffsetrtd OBJECT +u:iscollisionlighton OBJECT +u:vectormagnitudesqr ARRAY +u:disableremotesensors BOOL +u:creatediarylink ARRAY +u:nearestobject ARRAY +u:compile STRING +u:stopped OBJECT +u:currentcommand OBJECT +u:removegoggles OBJECT +u:ishidden OBJECT +u:attackenabled OBJECT,GROUP +u:createmarker ARRAY +u:typeof OBJECT +u:textlog ANY +u:setplayerrespawntime SCALAR +u:assigneddriver OBJECT +u:tan SCALAR,NaN +u:canfire OBJECT +u:getitemcargo OBJECT +u:markerbrush STRING +u:enableengineartillery BOOL +u:istext CONFIG +u:getnumber CONFIG +u:positioncameratoworld ARRAY +u:sliderposition CONTROL +u:sliderposition SCALAR +u:sliderspeed CONTROL +u:sliderspeed SCALAR +u:ctrlsettext ARRAY +u:tvexpand ARRAY +u:oneachframe STRING,CODE +u:curatorcameraarea OBJECT +u:settimemultiplier SCALAR +u:enableaudiofeature ARRAY +u:taskdestination TASK +u:- SCALAR,NaN +u:hcleader GROUP +u:lnbdeleterow ARRAY +u:lnbsetcolor ARRAY +u:primaryweapon OBJECT +u:magazinesdetailuniform OBJECT +u:getdescription OBJECT +u:taskresult TASK +u:getgroupiconparams GROUP +u:getposasl OBJECT +u:clearallitemsfrombackpack OBJECT +u:creategeardialog ARRAY +u:switch ANY +u:setcamshakeparams ARRAY +u:terrainintersectasl ARRAY +u:ctrlsetfocus CONTROL +u:slidersetspeed ARRAY +u:querymagazinepool STRING +u:netid OBJECT +u:netid GROUP +u:resources TEAM_MEMBER +u:airdensityrtd SCALAR +u:ropeendposition OBJECT +u:while CODE +u:deletevehicle OBJECT +u:preloadtitleobj ARRAY +u:formationleader OBJECT +u:throw ANY +u:getposworld OBJECT +u:showcinemaborder BOOL +u:onteamswitch STRING,CODE +u:everybackpack OBJECT +u:addcamshake ARRAY +u:confighierarchy CONFIG +u:ctrlenabled CONTROL +u:ctrlenabled SCALAR +u:getwingsorientationrtd OBJECT +u:getartilleryammo ARRAY +u:ctrlmodel CONTROL +u:addtoremainscollector ARRAY +u:getobjecttextures OBJECT +u:channelenabled SCALAR +u:remoteexeccall ARRAY +u:getallhitpointsdamage OBJECT +u:fuel OBJECT +u:waypointcombatmode ARRAY +u:groupselectedunits OBJECT +u:sliderrange CONTROL +u:sliderrange SCALAR +u:lbsetdata ARRAY +u:collectivertd OBJECT +u:setmusiceventhandler ARRAY +u:getfuelcargo OBJECT +u:taskparent TASK +u:speed OBJECT +u:scoreside SIDE +u:try CODE +u:publicvariable STRING +u:toupper STRING +u:removeallitems OBJECT +u:lightdetachobject OBJECT +u:speaker OBJECT +u:camdestroy OBJECT +u:mapgridposition ARRAY,OBJECT +u:ctrlfade CONTROL +u:curatorwaypointcost OBJECT +u:sethorizonparallaxcoef SCALAR +u:openyoutubevideo STRING +u:ctrlclassname CONTROL +u:configproperties ARRAY +u:leaderboardrequestrowsglobal ARRAY +u:simulinclouds ARRAY +u:taskchildren TASK +u:priority TASK +u:lightison OBJECT +u:assignedcargo OBJECT +u:mapcenteroncamera CONTROL +u:detach OBJECT +u:crew OBJECT +u:waypointtimeoutcurrent GROUP +u:allmissionobjects STRING +u:preloadsound STRING +u:systemchat STRING +u:lbvalue ARRAY +u:lnbcolor ARRAY +u:slidersetposition ARRAY +u:slidersetrange ARRAY +u:settrafficspeed ARRAY +u:removeallmusiceventhandlers STRING +u:detectedmines SIDE +u:currenttasks TEAM_MEMBER +u:cancelsimpletaskdestination TASK +u:size LOCATION +u:echo STRING +u:triggerattachedvehicle OBJECT +u:showsubtitles BOOL +u:random SCALAR,NaN +u:servercommandavailable STRING +u:local OBJECT +u:local GROUP +u:lineintersects ARRAY +u:ctrlautoscrolldelay CONTROL +u:magazinesammofull OBJECT +u:lbsettooltip ARRAY +u:isuavconnected OBJECT +u:unitaddons STRING +u:difficultyenabled STRING +u:disableuserinput BOOL +u:geteditormode CONTROL +u:selectplayer OBJECT +u:acos SCALAR,NaN +u:uisleep SCALAR +u:unitpos OBJECT +u:ctrlparent CONTROL +u:tvadd ARRAY +u:tvsetvalue ARRAY +u:isabletobreathe OBJECT +u:removemusiceventhandler ARRAY +u:weaponinertia OBJECT +u:getplayerchannel OBJECT +u:ropeattachenabled OBJECT +u:effectivecommander OBJECT +u:groupid GROUP +u:agltoasl ARRAY +u:handshit OBJECT +u:behaviour OBJECT +u:supportinfo STRING +u:lbsetpicture ARRAY +u:lbsetcolorright ARRAY +u:tvsetpicturecolorright ARRAY +u:handgunweapon OBJECT +u:rotorsrpmrtd OBJECT +u:curatoreditableobjects OBJECT +u:drawline3d ARRAY +u:drawicon3d ARRAY +u:leaderboardgetrows STRING +u:playableslotsnumber SIDE +u:selectbestplaces ARRAY +u:setviewdistance SCALAR +u:activateaddons ARRAY +u:ismarkedforcollection OBJECT +u:removeallmissioneventhandlers STRING +u:tvdelete ARRAY +u:lnbsetpictureright ARRAY +u:weaponsitemscargo OBJECT +u:forcegeneratorrtd SCALAR +u:getcenterofmass OBJECT +u:leaderboardinit STRING +u:leaderboardrequestrowsglobalarounduser ARRAY +u:ropeunwound OBJECT +u:currentmagazine OBJECT +u:waypointcompletionradius ARRAY +u:waypointshow ARRAY +u:getposatlvisual OBJECT +u:markertext STRING +u:abs SCALAR,NaN +u:cutobj ARRAY +u:surfaceiswater ARRAY +u:titlefadeout SCALAR +u:iscopilotenabled OBJECT +u:gettext CONFIG +u:ctrlposition CONTROL +u:finddisplay SCALAR +u:lbsize CONTROL +u:lbsize SCALAR +u:weapons OBJECT +u:isautotrimonrtd OBJECT +u:getburningvalue OBJECT +u:boundingboxreal OBJECT +u:simulclouddensity ARRAY +u:setarmorypoints SCALAR +u:face OBJECT +u:rank OBJECT +u:score OBJECT +u:roledescription OBJECT +u:weightrtd OBJECT +u:curatoreditingarea OBJECT +u:getpersonuseddlcs OBJECT +u:getslingload OBJECT +u:itemcargo OBJECT +u:needreload OBJECT +u:onpreloadfinished STRING,CODE +u:vestmagazines OBJECT +u:clearitemcargo OBJECT +u:getmagazinecargo OBJECT +u:breakout STRING +u:lineintersectsobjs ARRAY +u:deleteteam TEAM_MEMBER +u:showcuratorcompass BOOL +u:debriefingtext STRING +u:ropecut ARRAY +u:servercommandexecutable STRING +u:speedmode OBJECT,GROUP +u:formation OBJECT,GROUP +u:formation TEAM_MEMBER +u:private ARRAY,STRING +u:weaponcargo OBJECT +u:hintcadet STRING,TEXT +u:setaperture SCALAR +u:isengineon OBJECT +u:selectededitorobjects CONTROL +u:ingameuiseteventhandler ARRAY +u:loadvest OBJECT +u:textlogformat ARRAY +u:ctrltype CONTROL +u:gearidcammocount SCALAR +u:tvtext ARRAY +u:waypointloiterradius ARRAY +u:removeallprimaryweaponitems OBJECT +u:surfacetype ARRAY +u:magazinecargo OBJECT +u:waypointdescription ARRAY +u:getobjecttype OBJECT +u:camtarget OBJECT +u:removeallassigneditems OBJECT +u:vehiclevarname OBJECT +u:combatmode OBJECT,GROUP +u:servercommand STRING +u:removeallitemswithmagazines OBJECT +u:clearmagazinecargoglobal OBJECT +u:lbsetselectcolorright ARRAY +u:addmagazinepool ARRAY +u:magazinesammo OBJECT +u:synchronizedwaypoints OBJECT +u:synchronizedwaypoints ARRAY +u:ctrlmodelscale CONTROL +u:leaderboardsrequestuploadscore ARRAY +u:getgroupicons GROUP +u:triggertimeoutcurrent OBJECT +u:vectordir OBJECT +u:cleargroupicons GROUP +u:vestcontainer OBJECT +u:terrainintersect ARRAY +u:entities STRING +u:lbdata ARRAY +u:tvcount ARRAY +u:objectfromnetid STRING +u:getassignedcuratorunit OBJECT +u:curatoraddons OBJECT +u:curatorcameraareaceiling OBJECT +u:removeallcuratorcameraareas OBJECT +u:vectormagnitude ARRAY +u:leaderboardrequestrowsfriends STRING +u:nearestlocations ARRAY +u:rad SCALAR,NaN +u:precision OBJECT +u:getwppos ARRAY +u:asltoatl ARRAY +u:aimpos OBJECT +u:debuglog ANY +u:ctrlvisible SCALAR +u:lbdelete ARRAY +u:getassignedcuratorlogic OBJECT +u:linearconversion ARRAY +u:lifestate OBJECT +u:createcenter SIDE +u:case ANY +u:image STRING +u:sizeof STRING +u:formationtask OBJECT +u:enablesaving BOOL,ARRAY +u:clearbackpackcargoglobal OBJECT +u:getplayeruid OBJECT +u:lnbsize CONTROL +u:lnbsize SCALAR +u:sendaumessage ARRAY +u:getposaslw OBJECT +u:setaperturenew ARRAY +u:allcontrols DISPLAY +u:importance LOCATION +n:isstressdamageenabled +n:shownwatch +n:shownwarrant +n:opfor +n:worldsize +n:distributionregion +n:diag_frameno +n:safezonew +n:safezoneh +n:disableserialization +n:difficultyenabledrtd +n:allunitsuav +n:getclientstate +n:gettotaldlcusagetime +n:allmines +n:missiondifficulty +n:didjip +n:shownradio +n:sideenemy +n:cameraon +n:missionstart +n:nextweatherchange +n:allsites +n:allgroups +n:safezonex +n:cursortarget +n:getshadowdistance +n:controlnull +n:tasknull +n:curatormouseover +n:playerside +n:daytime +n:radiovolume +n:servername +n:lightnings +n:date +n:allplayers +n:safezoney +n:cameraview +n:moonintensity +n:freelook +n:clearmagazinepool +n:nil +n:clearforcesrtd +n:showncuratorcompass +n:simulweathersync +n:markasfinishedonsteam +n:alldisplays +n:getelevationoffset +n:sideunknown +n:clearradio +n:saveprofilenamespace +n:savingenabled +n:difficulty +n:windrtd +n:allcurators +n:agents +n:briefingname +n:grpnull +n:shownmap +n:shownpad +n:civilian +n:sidefriendly +n:savegame +n:mapanimdone +n:finishmissioninit +n:fog +n:fogparams +n:humidity +n:teamswitchenabled +n:allunits +n:hcshownbar +n:diag_ticktime +n:clearweaponpool +n:true +n:issteammission +n:teammembernull +n:hasinterface +n:objnull +n:time +n:benchmark +n:visiblewatch +n:visiblegps +n:selectnoplayer +n:estimatedendservertime +n:resetcamshake +n:pi +n:disabledebriefingstats +n:shownuavfeed +n:isautotest +n:getmissiondlcs +n:isserver +n:blufor +n:rainbow +n:fogforecast +n:logentities +n:reversedmousey +n:diag_activemissionfsms +n:endloadingscreen +n:ismultiplayer +n:particlesquality +n:savejoysticks +n:hudmovementlevels +n:buldozer_reloadopermap +n:istuthintsenabled +n:airdensitycurvertd +n:shownhud +n:productversion +n:copyfromclipboard +n:groupiconselectable +n:missionnamespace +n:uinamespace +n:activatedaddons +n:viewdistance +n:librarydisclaimers +n:clearitempool +n:dialog +n:profilenamesteam +n:player +n:shownartillerycomputer +n:showncompass +n:visiblecompass +n:west +n:exit +n:mapanimclear +n:mapanimcommit +n:vehicles +n:switchableunits +n:playerrespawntime +n:playableunits +n:currentnamespace +n:linebreak +n:language +n:cheatsenabled +n:opencuratorinterface +n:curatorselected +n:slingloadassistantshown +n:buldozer_isenabledroaddiag +n:sidelogic +n:runinitscript +n:winddir +n:worldname +n:diag_fps +n:getobjectviewdistance +n:sunormoon +n:allmapmarkers +n:getdlcassetsusage +n:independent +n:soundvolume +n:gusts +n:alldead +n:parsingnamespace +n:missionconfigfile +n:halt +n:getremotesensorsdisabled +n:scriptnull +n:getartillerycomputersettings +n:east +n:overcast +n:rain +n:teamswitch +n:diag_activesqsscripts +n:safezonexabs +n:getresolution +n:visiblemap +n:servertime +n:forceweatherchange +n:curatorcamera +n:netobjnull +n:timemultiplier +n:shownchat +n:windstr +n:armorypoints +n:groupiconsvisible +n:profilenamespace +n:isdedicated +n:isstreamfriendlyuienabled +n:configfile +n:teams +n:currentchannel +n:showngps +n:musicvolume +n:wind +n:waves +n:overcastforecast +n:alldeadmen +n:loadgame +n:systemofunits +n:ispipenabled +n:displaynull +n:locationnull +n:false +n:isinstructorfigureenabled +n:isfilepatchingenabled +n:cadetmode +n:acctime +n:resistance +n:enableenddialog +n:forceend +n:missionname +n:initambientlife +n:commandingmenu +n:diag_fpsmin +n:diag_activesqfscripts +n:safezonewabs +n:librarycredits +n:profilename +n:campaignconfigfile From a156f2b76d070537419a47d63e9085870091acca Mon Sep 17 00:00:00 2001 From: Marvin Blum Date: Thu, 14 Jan 2016 11:54:36 +0100 Subject: [PATCH 17/20] Updated changelog and readyme. --- CHANGELOG.md | 2 +- README.md | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a3793f..4fd411a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ * concurrent compiling * errors are handled per file and won't stop the whole compilation * function name check for build in functions -* function parameter count check for build in functions +* simpler syntax for "null" and unary buildin functions **1.1.1** diff --git a/README.md b/README.md index bfa5c46..76af82b 100644 --- a/README.md +++ b/README.md @@ -141,6 +141,8 @@ var _x = add(); // result in _x is 0 ``` +When trying to define a function with a name that exists in the build in function set, you'll get an compile error. + ### Call build in commands To call SQF build in commands (like hint, getDir, addItem, ...) we have to use a different syntax. @@ -161,6 +163,13 @@ foo(x, y, z)(1, 2, 3); [x, y, z] foo [1, 2, 3]; ``` +If the build in function does not accept parameters or only on one side (unary function), it can be called with a single pair of brackets: + +``` +hint("your text"); +shownWatch(); +``` + ### Special functions There are some special functions in SQF, which also require special syntax in ASL. The examples presented here show how they are written in ASL and what the output will look like. Remember that ASL is case sensitive! @@ -251,7 +260,7 @@ Keywords should not be used as identifiers. Here is a full list of all keywords ## What's missing? -The following features are not implemented yet, but will be in 1.1.0 or a future version: +The following features are not implemented yet, but will be in 1.3.0 or a future version: * scopes * else if @@ -262,7 +271,7 @@ scopes won't be supported, since they are a stupid concept and can be replaced b Selectors in expressions do not work (yet): ``` -var x = ([1, 2, 3]-[1, 2])[0]; // should result in 3 +var x = ([1, 2, 3]-[1, 2])[0]; // should result in 3, but does not work ``` ## Contribute @@ -277,6 +286,11 @@ For further information you can read the SQF tutorial and documentation of scrip * [Scripting commands](https://community.bistudio.com/wiki/Category:Scripting_Commands_Arma_3) * [Scripting preprocessor](https://community.bistudio.com/wiki/PreProcessor_Commands) +Interesting pages to visit: + +* [Bohemia forum topic](https://forums.bistudio.com/topic/185649-asl-arma-scripting-language-compiler/) +* [Armaholic page](http://www.armaholic.com/page.php?id=29720) + ## License MIT From 005a3bf101727e97e1fd8e84d5962ef6c95fa0ad Mon Sep 17 00:00:00 2001 From: Marvin Blum Date: Thu, 14 Jan 2016 12:01:12 +0100 Subject: [PATCH 18/20] Added type info to readme. --- README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README.md b/README.md index 76af82b..9b28af0 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,19 @@ asl [-v|-r|-pretty|--help] asl ./missions/myMission/myScripts ./missions/myMission/compiledScripts ``` +Since 1.2.0 ASL requires a [supportInfo](https://community.bistudio.com/wiki/supportInfo) file, which must be generated, named "types" and placed right next to the binary. So if you have the asl.exe there must also be a file called types right next to it. The content looks like: + +``` +... +t:DIARY_RECORD +t:LOCATION +b:ARRAY waypointattachobject SCALAR,OBJECT +b:OBJECT,GROUP enableattack BOOL +... +``` + +A current types file will be delivered with the current release, but not updated when Arma is. + ## Syntax ### Comments From 3b40b3427db238e4ef1c1e878c1fe6c549b24ed9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ozan=20E=C4=9Fitmen?= Date: Wed, 20 Jan 2016 18:31:01 +0200 Subject: [PATCH 19/20] Update README.md --- tools/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/README.md b/tools/README.md index 149a394..bd06211 100644 --- a/tools/README.md +++ b/tools/README.md @@ -3,6 +3,7 @@ A visual tool set to ease the work of asl developers. Maintained by yours truly: [654wak654](https://github.com/654wak654/) **Notepad++ Syntax Higligthing**: https://github.com/DeKugelschieber/asl/blob/master/tools/asl.xml + Feel free to contribute with another text editor's syntax higligthing plugin. ##ASL GUI version @@ -16,4 +17,4 @@ An optional Java interface to make the compile procces of ASL faster and more us - More style changes and bug fixes, marked ready for release. **Version 0.3.0.0:** -- Fixed some possible bugs, did some style fixes and other code adjustments. It's now is readable without getting cataracts. Mostly anyway... \ No newline at end of file +- Fixed some possible bugs, did some style fixes and other code adjustments. It's now is readable without getting cataracts. Mostly anyway... From 51cc0f5700e5fc6527405e395c614a036ef22dec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ozan=20E=C4=9Fitmen?= Date: Wed, 20 Jan 2016 18:34:38 +0200 Subject: [PATCH 20/20] Update README.md Again --- tools/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/README.md b/tools/README.md index bd06211..bdb52cc 100644 --- a/tools/README.md +++ b/tools/README.md @@ -9,7 +9,7 @@ Feel free to contribute with another text editor's syntax higligthing plugin. ##ASL GUI version An optional Java interface to make the compile procces of ASL faster and more user-friendly. It's released under the MIT licence just like the core project. It also helps with error reporting of asl. -**Version 1.1.00** +**Version 1.1.0.0** - New Arma 3-themed look, and error reporting straight from asl. - Program now depends on asl.exe, they need to be in the same directory.