From a18cb8c21f9cbb8f73442247a2c6fc0401e07364 Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Sun, 20 Mar 2016 22:13:57 -0400 Subject: [PATCH] Adds marked, [0x] refs, and hex numbers to SDQL --- code/modules/admin/verbs/SDQL2/SDQL_2.dm | 16 +++++++++++++++- code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm | 15 +++++++++++++-- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm index adbee2238af..b4015ed5b8d 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm @@ -367,6 +367,20 @@ v = object else if(expression[start] == "usr") v = usr + else if(expression[start] == "marked") + if(usr.client && usr.client.holder && usr.client.holder.marked_datum) + v = usr.client.holder.marked_datum + else + return null + else if(expression[start] == "\[" && start < expression.len) + if(lowertext(copytext(expression[start + 1], 1, 3)) != "0x") + usr << "Invalid ref syntax: [expression[start + 1]]" + return null + v = locate("\[[expression[start + 1]]\]") + if(!v) + usr << "Invalid ref: [expression[start + 1]]" + return null + start++ else return null @@ -378,7 +392,7 @@ /proc/SDQL2_tokenize(query_text) var/list/whitespace = list(" ", "\n", "\t") - var/list/single = list("(", ")", ",", "+", "-", ".", ";") + var/list/single = list("(", ")", ",", "+", "-", ".", ";", "\[", "\]") var/list/multi = list( "=" = list("", "="), "<" = list("", "=", ">"), diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm b/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm index 78833453a7f..e5d983b7649 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm @@ -25,7 +25,7 @@ // // assignments : assignment, [',' assignments] // assignment : '=' expression -// variable : | '.' variable +// variable : | '.' variable | '[' ']' | '[' ']' '.' variable // // bool_expression : expression comparitor expression [bool_operator bool_expression] // expression : ( unary_expression | '(' expression ')' | value ) [binary_operator expression] @@ -336,6 +336,13 @@ variable(i, list/node) var/list/L = list(token(i)) node[++node.len] = L + + if(token(i) == "\[") + L += token(i + 1) + i += 2 + + if(token(i) != "\]") + parse_error("Missing \] at end of reference.") if(token(i + 1) == ".") L += "." @@ -519,7 +526,11 @@ if(token(i) == "null") node += "null" i++ - + + else if(lowertext(copytext(token(i), 1, 3)) == "0x" && isnum(hex2num(copytext(token(i), 3)))) + node += hex2num(copytext(token(i), 3)) + i++ + else if(isnum(text2num(token(i)))) node += text2num(token(i)) i++