@@ -390,6 +390,22 @@ local function str_filter(s)
390390 return s
391391end
392392
393+ local function to_lua_code (var )
394+ if type (var ) == " string" then
395+ return sformat (" %q" , var )
396+ end
397+
398+ if type (var ) ~= " table" then
399+ return var
400+ end
401+
402+ local code = " {"
403+ for k , v in pairs (var ) do
404+ code = code .. string.format (" [%s] = %s," , to_lua_code (k ), to_lua_code (v ))
405+ end
406+ return code .. " }"
407+ end
408+
393409generate_validator = function (ctx , schema )
394410 -- get type informations as they will be necessary anyway
395411 local datatype = ctx :localvar (sformat (' %s(%s)' ,
@@ -495,11 +511,9 @@ generate_validator = function(ctx, schema)
495511 if type (subschema ) == " table" and subschema .default and
496512 (type (subschema .default ) == " number" or
497513 type (subschema .default ) == " string" or
498- type (subschema .default ) == " boolean" ) then
499- local default = subschema .default
500- if type (subschema .default ) == " string" then
501- default = sformat (" %q" , default )
502- end
514+ type (subschema .default ) == " boolean" or
515+ type (subschema .default ) == " table" ) then
516+ local default = to_lua_code (subschema .default )
503517 ctx :stmt ( ' if propvalue == nil then' )
504518 ctx :stmt (sformat (' %s[%s] = %s' , ctx :param (1 ), str_filter (prop ), default ))
505519 ctx :stmt ( ' end' )
0 commit comments