view core/src/luan/cmd_line.luan @ 326:db37d6aee4db

remove try-catch statement; add Luan.try() and Luan.pcall(); git-svn-id: https://luan-java.googlecode.com/svn/trunk@327 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Thu, 19 Mar 2015 00:01:57 +0000
parents cd2924a1052c
children dc21bd260690
line wrap: on
line source

local Luan = require "luan:Luan"
local ipairs = Luan.ipairs
local load = Luan.load
local load_file = Luan.load_file
local try = Luan.try
require "luan:String"  -- for String methods
local Table = require "luan:Table"
local Io = require "luan:Io"
local print = Io.print
local Debug = require "luan:Debug"


local standalone_usage = [=[
usage: java luan.Luan [options] [script [args]]
Available options are:
  -e stat  execute string 'stat'
  -i       enter interactive mode after executing 'script'
  -v       show version information
  --       stop handling options
  -        stop handling options and execute stdin
]=]

local function standalone_error(msg)
	Io.stderr.write( msg, "\n", standalone_usage )
end


local args = {...}
local interactive = false
local showVersion = false
local i = 1
if #args == 0 then
	interactive = true
	showVersion = true
else
	while i <= #args do
		local arg = args[i]
		if arg.sub(1,1) ~= "-" or arg == "--" then
			break
		end
		if arg == "-i" then
			interactive = true
		elseif arg == "-v" then
			showVersion = true
		elseif arg == "-e" then
			i = i + 1
			if i > #args then
				standalone_error "'-e' needs argument"
				return
			end
			local cmd = args[i]
			local stat = load(cmd,"(command line)",{},true)
			local result = Table.pack( stat() )
			if result.n > 0 then
				print( Table.unpack(result,1,result.n) )
			end
		elseif arg == "-" then
			local src = Io.stdin.read_text()
			local stdin = load(src,"stdin")
			stdin()
			return
		else
			standalone_error( "unrecognized option '"..arg.."'" )
			return
		end
		i = i + 1
	end
end
if showVersion then print(Luan.VERSION) end
if i <= #args then
	local file = args[i]
	Luan.arg = {}
	for j,v in ipairs(args) do
		Luan.arg[j-i] = v
	end
	try {
		function()
			local main_file = load_file("file:"..file)
			main_file( Table.unpack(Luan.arg) )
		end;
		catch = function(e)
			Io.print_to(Io.stderr, e )
		end;
	}
end
if interactive then
	Debug.debug("> ")
end