mod_motd, mod_register, mod_private, mod_http_errors, mod_admin_adhoc: Remove unused...
[prosody.git] / tools / erlparse.lua
index fdef7e8c6de8afe8c991e54e689f2b287b6f56f4..174585d338433d3c9db14a4f722ed4c029e41c68 100644 (file)
@@ -12,12 +12,16 @@ local type, tonumber, tostring = type, tonumber, tostring;
 
 local file = nil;
 local last = nil;
+local line = 1;
 local function read(expected)
        local ch;
        if last then
                ch = last; last = nil;
-       else ch = file:read(1); end
-       if expected and ch ~= expected then error("expected: "..expected.."; got: "..(ch or "nil")); end
+       else
+               ch = file:read(1);
+               if ch == "\n" then line = line + 1; end
+       end
+       if expected and ch ~= expected then error("expected: "..expected.."; got: "..(ch or "nil").." on line "..line); end
        return ch;
 end
 local function pushback(ch)
@@ -47,7 +51,7 @@ local function isSpace(ch)
        return ch <= _space;
 end
 
-local escapes = {["\\b"]="\b", ["\\d"]="\d", ["\\e"]="\e", ["\\f"]="\f", ["\\n"]="\n", ["\\r"]="\r", ["\\s"]="\s", ["\\t"]="\t", ["\\v"]="\v", ["\\\""]="\"", ["\\'"]="'", ["\\\\"]="\\"};
+local escapes = {["\\b"]="\b", ["\\d"]="\127", ["\\e"]="\27", ["\\f"]="\f", ["\\n"]="\n", ["\\r"]="\r", ["\\s"]=" ", ["\\t"]="\t", ["\\v"]="\v", ["\\\""]="\"", ["\\'"]="'", ["\\\\"]="\\"};
 local function readString()
        read("\""); -- skip quote
        local slash = nil;
@@ -91,6 +95,12 @@ local function readNumber()
        while isNumeric(peek()) do
                num[#num+1] = read();
        end
+       if peek() == "." then
+               num[#num+1] = read();
+               while isNumeric(peek()) do
+                       num[#num+1] = read();
+               end
+       end
        return tonumber(t_concat(num));
 end
 local readItem = nil;
@@ -117,6 +127,12 @@ local function readTuple()
 end
 local function readBinary()
        read("<"); -- read <
+       -- Discard PIDs
+       if isNumeric(peek()) then
+               while peek() ~= ">" do read(); end
+               read(">");
+               return {};
+       end
        local t = readTuple();
        read(">") -- read >
        local ch = peek();