Differences From
Artifact [bfedd61eec]:
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