parsav  Diff

Differences From Artifact [bfedd61eec]:

To Artifact [49c267b075]:


    61     61   		end
    62     62   		terra options:free() self.arglist:free() end
    63     63   		options.methods.parse = terra([self], [argc], [argv])
    64     64   			[init]
    65     65   			var parseopts = true
    66     66   			var [optstack] = 0
    67     67   			var [subcmd] = [ opts.subcmd or 0 ]
    68         -			self.arglist = lib.mem.heapa(rawstring, argc)
           68  +			self.arglist = lib.mem.heapa(rawstring, argc + 1)
    69     69   			var finalargc = 0
    70     70   			for [idx]=1,argc do
    71     71   				var [arg] = argv[idx]
    72     72   				if optstack > 0 then optstack = optstack - 1 goto [skip] end
    73     73   				if arg[0] == @'-' and parseopts then
    74     74   					if arg[1] == @'-' then -- long option
    75     75   						if arg[2] == 0 then -- last option
................................................................................
    88     88   						subcmd = subcmd - 1
    89     89   						if subcmd == 0 then parseopts = false end
    90     90   					end
    91     91   				end
    92     92   				::[skip]::
    93     93   			end
    94     94   			[verifiers]
           95  +			self.arglist.ptr[finalargc] = nil -- for lazy-ass argv compat
    95     96   			if finalargc == 0 then self.arglist:free()
    96     97   							  else self.arglist:resize(finalargc) end
    97     98   		end
    98     99   		options.helptxt = { opts = helpstr, flags = flagstr }
    99    100   	end
   100    101   	return options
   101    102   end