summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEmil Renner Berthing <esmil@mailme.dk>2013-01-16 11:40:55 +0100
committerEmil Renner Berthing <esmil@mailme.dk>2013-01-16 16:07:18 +0100
commitf86416d607d5a60d944167267e8348a0d4597b0b (patch)
tree760e01ad33fb4ec5a9c49ac89fc54250e59dc640
parent33f8b5586ac93c0f8082d894a612d54bae6b63b4 (diff)
downloadlem-f86416d607d5a60d944167267e8348a0d4597b0b.tar.gz
lem-f86416d607d5a60d944167267e8348a0d4597b0b.tar.xz
lem-f86416d607d5a60d944167267e8348a0d4597b0b.zip
lem: if no file is specified run the repl
-rw-r--r--Makefile.in3
-rwxr-xr-xbin/lem-repl30
-rw-r--r--bin/lem.c15
-rw-r--r--lem/repl.lua110
4 files changed, 69 insertions, 89 deletions
diff --git a/Makefile.in b/Makefile.in
index 149b2f1..7eaea11 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -116,9 +116,8 @@ $(DESTDIR)$(lmoddir)/% $(DESTDIR)$(cmoddir)/% $(DESTDIR)$(pkgconfigdir)/%: %
$Q$(INSTALL) -m 644 $< $@
install: \
- $(DESTDIR)$(pkgconfigdir)/lem.pc \
$(DESTDIR)$(bindir)/lem \
- $(DESTDIR)$(bindir)/lem-repl \
+ $(DESTDIR)$(pkgconfigdir)/lem.pc \
$(headers:%=$(DESTDIR)$(includedir)/lem/%) \
$(llibs:%=$(DESTDIR)$(lmoddir)/%) \
$(clibs:%=$(DESTDIR)$(cmoddir)/%)
diff --git a/bin/lem-repl b/bin/lem-repl
deleted file mode 100755
index 13e15b4..0000000
--- a/bin/lem-repl
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/usr/bin/env lem
---
--- This file is part of LEM, a Lua Event Machine.
--- Copyright 2011-2012 Emil Renner Berthing
---
--- LEM is free software: you can redistribute it and/or modify it
--- under the terms of the GNU Lesser General Public License as
--- published by the Free Software Foundation, either version 3 of
--- the License, or (at your option) any later version.
---
--- LEM is distributed in the hope that it will be useful, but
--- WITHOUT ANY WARRANTY; without even the implied warranty of
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--- GNU Lesser General Public License for more details.
---
--- You should have received a copy of the GNU Lesser General Public
--- License along with LEM. If not, see <http://www.gnu.org/licenses/>.
---
-
-local io = require 'lem.io'
-local repl = require 'lem.repl'
-
-io.stdout:write([[
-A Lua Event Machine 0.3 Copyright 2011-2012 Emil Renner Berthing
-]])
-
-local _, err = repl.repl('stdin', io.stdin, io.stdout)
-print(err or '')
-
--- vim: syntax=lua ts=2 sw=2 noet:
diff --git a/bin/lem.c b/bin/lem.c
index 72dd34e..0137a5b 100644
--- a/bin/lem.c
+++ b/bin/lem.c
@@ -1,6 +1,6 @@
/*
* This file is part of LEM, a Lua Event Machine.
- * Copyright 2011-2012 Emil Renner Berthing
+ * Copyright 2011-2013 Emil Renner Berthing
*
* LEM is free software: you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
@@ -268,9 +268,15 @@ static int
queue_file(int argc, char *argv[], int fidx)
{
lua_State *T = lem_newthread();
+ const char *filename;
int i;
- switch (luaL_loadfile(T, argv[fidx])) {
+ if (fidx < argc)
+ filename = argv[fidx];
+ else
+ filename = LUA_LDIR "lem/repl.lua";
+
+ switch (luaL_loadfile(T, filename)) {
case LUA_OK: /* success */
break;
@@ -296,11 +302,6 @@ queue_file(int argc, char *argv[], int fidx)
int
main(int argc, char *argv[])
{
- if (argc < 2) {
- lem_log_error("I need a file..");
- return EXIT_FAILURE;
- }
-
#if EV_MULTIPLICITY
lem_loop = ev_default_loop(LEM_LOOPFLAGS);
if (lem_loop == NULL) {
diff --git a/lem/repl.lua b/lem/repl.lua
index ecc2573..84b0b08 100644
--- a/lem/repl.lua
+++ b/lem/repl.lua
@@ -1,6 +1,6 @@
--
-- This file is part of LEM, a Lua Event Machine.
--- Copyright 2011-2012 Emil Renner Berthing
+-- Copyright 2011-2013 Emil Renner Berthing
--
-- LEM is free software: you can redistribute it and/or modify it
-- under the terms of the GNU Lesser General Public License as
@@ -16,8 +16,6 @@
-- License along with LEM. If not, see <http://www.gnu.org/licenses/>.
--
-local utils = require 'lem.utils'
-
local load = load
if _VERSION == 'Lua 5.1' then
load = loadstring
@@ -28,70 +26,82 @@ local concat = table.concat
local tostring = tostring
local select = select
-return {
- repl = function(name, ins, outs)
- name = '=' .. name
-
- local function onreturn(ok, ...)
- if not ok then
- local ok, err = outs:write(format("%s\n", select(1, ...)))
- if not ok then return nil, err end
- return true
- end
+local function repl(name, ins, outs)
+ name = '=' .. name
- local args = select('#', ...)
- if args == 0 then return true end
+ local function onreturn(ok, ...)
+ if not ok then
+ local ok, err = outs:write(format("%s\n", select(1, ...)))
+ if not ok then return nil, err end
+ return true
+ end
- local rstr
- do
- local t = { ... }
- for i = 1, args - 1 do
- t[i] = tostring(t[i])
- end
- t[args] = tostring(t[args])..'\n'
+ local args = select('#', ...)
+ if args == 0 then return true end
- rstr = concat(t, '\t')
+ local rstr
+ do
+ local t = { ... }
+ for i = 1, args - 1 do
+ t[i] = tostring(t[i])
end
+ t[args] = tostring(t[args])..'\n'
- local ok, err = outs:write(rstr)
- if not ok then return nil, err end
-
- return true
+ rstr = concat(t, '\t')
end
- while true do
- local res, err = outs:write('> ')
- if not res then return nil, err end
+ local ok, err = outs:write(rstr)
+ if not ok then return nil, err end
- res, err = ins:read('*l')
- if not res then return nil, err end
+ return true
+ end
- local line = res:gsub('^=', 'return ')
+ while true do
+ local res, err = outs:write('> ')
+ if not res then return nil, err end
- while true do
- res, err = load(line, name)
- if res then
- res, err = onreturn(pcall(res))
- if not res then return nil, err end
- break
- end
+ res, err = ins:read('*l')
+ if not res then return nil, err end
- if not err:match("<eof>") then
- res, err = outs:write(format("%s\n", err))
- if not res then return nil, err end
- break
- end
+ local line = res:gsub('^=', 'return ')
- res, err = outs:write('>> ')
+ while true do
+ res, err = load(line, name)
+ if res then
+ res, err = onreturn(pcall(res))
if not res then return nil, err end
+ break
+ end
- res, err = ins:read('*l')
+ if not err:match("<eof>") then
+ res, err = outs:write(format("%s\n", err))
if not res then return nil, err end
-
- line = line .. res
+ break
end
+
+ res, err = outs:write('>> ')
+ if not res then return nil, err end
+
+ res, err = ins:read('*l')
+ if not res then return nil, err end
+
+ line = line .. res
end
end
-}
+end
+
+-- if not run directly just return the module table
+if not arg or arg[0] then
+ return { repl = repl }
+end
+
+local io = require 'lem.io'
+
+io.stdout:write([[
+A Lua Event Machine 0.3 Copyright 2011-2013 Emil Renner Berthing
+]])
+
+local _, err = repl('stdin', io.stdin, io.stdout)
+print(err or '')
-- vim: ts=2 sw=2 noet: