blob: c9323a9fef83403d589ab039e9f422595721764d [file] [log] [blame]
-------------------------------------------------------------------------------
-- Copyright (c) 2006-2013 Fabien Fleutot and others.
--
-- All rights reserved.
--
-- This program and the accompanying materials are made available
-- under the terms of the Eclipse Public License v1.0 which
-- accompanies this distribution, and is available at
-- http://www.eclipse.org/legal/epl-v10.html
--
-- This program and the accompanying materials are also made available
-- under the terms of the MIT public license which accompanies this
-- distribution, and is available at http://www.lua.org/license.html
--
-- Contributors:
-- Fabien Fleutot - API and implementation
--
-------------------------------------------------------------------------------
require 'metalua.dollar'
-{ extension ('match', ...) }
function dollar.log(...)
local args = {...}
local ti = table.insert
local code = { }
local nohash = false
local width = 80
local i=1
if args[i].tag=='String' then
ti(code, +{print(" [LOG] "..-{args[1]})})
i += 1
end
local xtra_args, names, vals = { }, { }, { }
for i=i, #args do
match args[i] with
| +{ 'nohash' } -> nohash = true
| `Number{ w } -> width = w
--| `String{...} | `Number{...} -> ti (xtra_args, args[i])
| `Id{n} -> ti (names, n); ti (vals, args[i])
| x -> ti (names, table.tostring(x, 'nohash')); ti (vals, x)
end
end
for i=1, #names do
local msg = string.format(" [LOG] %s = ", names[i])
local printer = `Call{ +{table.tostring},
vals[i],
`Number{ width },
`Number{ #msg } }
if nohash then ti(printer, +{'nohash'}) end
ti (code, `Call{ +{printf}, +{"%s%s"}, `String{ msg }, printer })
end
return code
end
return function() end