Fixed ! operator and negative value prefix (e.g. -100).

This commit is contained in:
Marvin Blum
2015-10-24 14:24:00 +02:00
parent 5a00e256da
commit 75729ebb8e
5 changed files with 15 additions and 17 deletions

View File

@@ -9,4 +9,4 @@
* recursive compiling
* concurrent compiling
* inline buildin function call -> foo(a)(bar(x)(y));
* negative values e.g. -1, operator !
* ~~negative values e.g. -1, operator !~~

View File

@@ -1,13 +1 @@
diag_log()("easyHC: started");
publicVariable()("easyHCpresent");
if isNil()("easyHCpresent") {
easyHCpresent = 1; // HC client ID
}
if isServer()() && hasInterface()() {
easyHCpresent = owner()(player);
//diag_log()(format()("easyHC: found headless client with ID %1.", easyHCpresent));
}
// ...
foo(player)("head");

View File

@@ -379,10 +379,20 @@ func parseExpression(out bool) string {
func parseIdentifier() string {
output := ""
if seek("(") {
if seek("(") && !accept("!") && !accept("-") {
name := get().token
next()
output = "("+parseFunctionCall(false, name)+")"
} else if accept("!") || accept("-") {
output = get().token
next()
if !accept("(") {
output += get().token
next()
} else {
output += parseTerm()
}
} else {
output = get().token
next()

View File

@@ -68,7 +68,7 @@ func TestParserAssignResult(t *testing.T) {
func TestParserExpression(t *testing.T) {
got := getCompiled(t, "test/parser_expression.asl")
want := "x = (1+(2+3))/(6*(someVariable+99-100))-(20)+anotherVariable+([] call foo);\n"
want := "x = -(1+(2+3))/(6*(someVariable+99-100))-(20)+!anotherVariable+([] call foo);\n"
equal(t, got, want)
}

View File

@@ -1 +1 @@
var x = (1+(2+3))/(6*(someVariable+99-100))-(20)+anotherVariable+foo();
var x = -(1+(2+3))/(6*(someVariable+99-100))-(20)+!anotherVariable+foo();