Add check for undefined variables. Find undefined variables. Fix undefined
authorDavid Given <dg@cowlark.com>
Thu, 4 Aug 2016 22:01:55 +0000 (00:01 +0200)
committerDavid Given <dg@cowlark.com>
Thu, 4 Aug 2016 22:01:55 +0000 (00:01 +0200)
variables.

first/ackbuilder.lua
lang/cem/cpp.ansi/build.lua
mach/proto/ncg/build.lua

index 1a150cb..0f83c49 100644 (file)
@@ -361,7 +361,8 @@ local function loadbuildfile(filename)
                        data, e = fp:read("*a")
                        fp:close()
                        if not e then
-                               local thisglobals = {_G = thisglobals}
+                               local thisglobals = {}
+                               thisglobals._G = thisglobals
                                setmetatable(thisglobals, {__index = globals})
                                chunk, e = load(data, "@"..filename, "text", thisglobals)
                        end
@@ -787,6 +788,18 @@ setmetatable(globals,
 vars.cflags = {}
 parente.vars = vars
 
+setmetatable(_G,
+       {
+               __index = function(self, k)
+                       local value = rawget(_G, k)
+                       if not value then
+                               error(string.format("access of undefined variable '%s'", k))
+                       end
+                       return value
+               end
+       }
+)
+               
 do
        local emitter_type = install_make_emitter
        parse_arguments(
index 0cc57fe..1f22fe8 100644 (file)
@@ -1,6 +1,6 @@
 include("util/cmisc/build.lua")
 
-local allocd_header = definerule(null,
+local allocd_header = definerule(nil,
        {
                srcs = { type="targets" }
        },
index e093f89..5245fd2 100644 (file)
@@ -26,8 +26,7 @@ definerule("build_ncg",
                        srcs = {
                                "mach/proto/ncg/*.c",
                                "mach/"..e.arch.."/ncg/mach.h",
-                               archlib, -- for .c file
-                               tables, -- for .c file
+                               matching(filenamesof(tables), "%.c$")
                        },
                        deps = {
                                "h+emheaders",