luacompilationzerobrane

LUA - ZeroBrane IDE: Compile feature


in ZeroBrane Studio if I use "Project - complile (F7)" - what exactly does happen?
Will there be a standalone .exe created from my Lua code ?
And if so - in which directory ? I use Windows 10. (Couldn't find any information in the documention)


Solution

  • From what I see by a quick look into the source code it simply checks whether the code has any errors by loading it using loadstring which compiles the file. There is no output file, just some text output about any errors.

    But that's just an assumption. Feel free to check if this is actually the function called when you click that button.

    https://github.com/pkulchenko/ZeroBraneStudio/blob/5daf55d79449431ca9794f6b8a65476dc203b780/src/editor

    function CompileProgram(editor, params)
      local params = {
        jumponerror = (params or {}).jumponerror ~= false,
        reportstats = (params or {}).reportstats ~= false,
        keepoutput = (params or {}).keepoutput,
      }
      local doc = ide:GetDocument(editor)
      local filePath = doc:GetFilePath() or doc:GetFileName()
      local loadstring = loadstring or load
      local func, err = loadstring(StripShebang(editor:GetTextDyn()), '@'..filePath)
      local line = not func and tonumber(err:match(":(%d+)%s*:")) or nil
    
      if not params.keepoutput then ClearOutput() end
    
      compileTotal = compileTotal + 1
      if func then
        compileOk = compileOk + 1
        if params.reportstats then
          ide:Print(TR("Compilation successful; %.0f%% success rate (%d/%d).")
            :format(compileOk/compileTotal*100, compileOk, compileTotal))
        end
      else
        ide:GetOutput():Activate()
        ide:Print(TR("Compilation error").." "..TR("on line %d"):format(line)..":")
        ide:Print((err:gsub("\n$", "")))
        -- check for escapes invalid in LuaJIT/Lua 5.2 that are allowed in Lua 5.1
        if err:find('invalid escape sequence') then
          local s = editor:GetLineDyn(line-1)
          local cleaned = s
            :gsub('\\[abfnrtv\\"\']', '  ')
            :gsub('(\\x[0-9a-fA-F][0-9a-fA-F])', function(s) return string.rep(' ', #s) end)
            :gsub('(\\%d%d?%d?)', function(s) return string.rep(' ', #s) end)
            :gsub('(\\z%s*)', function(s) return string.rep(' ', #s) end)
          local invalid = cleaned:find("\\")
          if invalid then
            ide:Print(TR("Consider removing backslash from escape sequence '%s'.")
              :format(s:sub(invalid,invalid+1)))
          end
        end
        if line and params.jumponerror and line-1 ~= editor:GetCurrentLine() then
          editor:GotoLine(line-1)
        end
      end
    
      return func ~= nil -- return true if it compiled ok
    end