|
|
@ -1,5 +1,5 @@ |
|
|
|
/*
|
|
|
|
** $Id: lstrlib.c,v 1.79 2002/03/20 12:54:08 roberto Exp roberto $ |
|
|
|
** $Id: lstrlib.c,v 1.80 2002/04/02 20:41:59 roberto Exp roberto $ |
|
|
|
** Standard library for string operations and pattern-matching |
|
|
|
** See Copyright Notice in lua.h |
|
|
|
*/ |
|
|
@ -170,7 +170,7 @@ typedef struct MatchState { |
|
|
|
static int check_capture (MatchState *ms, int l) { |
|
|
|
l -= '1'; |
|
|
|
if (l < 0 || l >= ms->level || ms->capture[l].len == CAP_UNFINISHED) |
|
|
|
lua_error(ms->L, "invalid capture index"); |
|
|
|
luaL_verror(ms->L, "invalid capture index"); |
|
|
|
return l; |
|
|
|
} |
|
|
|
|
|
|
@ -179,7 +179,7 @@ static int capture_to_close (MatchState *ms) { |
|
|
|
int level = ms->level; |
|
|
|
for (level--; level>=0; level--) |
|
|
|
if (ms->capture[level].len == CAP_UNFINISHED) return level; |
|
|
|
lua_error(ms->L, "invalid pattern capture"); |
|
|
|
luaL_verror(ms->L, "invalid pattern capture"); |
|
|
|
return 0; /* to avoid warnings */ |
|
|
|
} |
|
|
|
|
|
|
@ -188,13 +188,13 @@ static const char *luaI_classend (MatchState *ms, const char *p) { |
|
|
|
switch (*p++) { |
|
|
|
case ESC: |
|
|
|
if (*p == '\0') |
|
|
|
lua_error(ms->L, "malformed pattern (ends with `%')"); |
|
|
|
luaL_verror(ms->L, "malformed pattern (ends with `%')"); |
|
|
|
return p+1; |
|
|
|
case '[': |
|
|
|
if (*p == '^') p++; |
|
|
|
do { /* look for a `]' */ |
|
|
|
if (*p == '\0') |
|
|
|
lua_error(ms->L, "malformed pattern (missing `]')"); |
|
|
|
luaL_verror(ms->L, "malformed pattern (missing `]')"); |
|
|
|
if (*(p++) == ESC && *p != '\0') |
|
|
|
p++; /* skip escapes (e.g. `%]') */ |
|
|
|
} while (*p != ']'); |
|
|
@ -267,7 +267,7 @@ static const char *match (MatchState *ms, const char *s, const char *p); |
|
|
|
static const char *matchbalance (MatchState *ms, const char *s, |
|
|
|
const char *p) { |
|
|
|
if (*p == 0 || *(p+1) == 0) |
|
|
|
lua_error(ms->L, "unbalanced pattern"); |
|
|
|
luaL_verror(ms->L, "unbalanced pattern"); |
|
|
|
if (*s != *p) return NULL; |
|
|
|
else { |
|
|
|
int b = *p; |
|
|
@ -316,7 +316,7 @@ static const char *start_capture (MatchState *ms, const char *s, |
|
|
|
const char *p, int what) { |
|
|
|
const char *res; |
|
|
|
int level = ms->level; |
|
|
|
if (level >= MAX_CAPTURES) lua_error(ms->L, "too many captures"); |
|
|
|
if (level >= MAX_CAPTURES) luaL_verror(ms->L, "too many captures"); |
|
|
|
ms->capture[level].init = s; |
|
|
|
ms->capture[level].len = what; |
|
|
|
ms->level = level+1; |
|
|
@ -426,7 +426,7 @@ static const char *lmemfind (const char *s1, size_t l1, |
|
|
|
|
|
|
|
static void push_onecapture (MatchState *ms, int i) { |
|
|
|
int l = ms->capture[i].len; |
|
|
|
if (l == CAP_UNFINISHED) lua_error(ms->L, "unfinished capture"); |
|
|
|
if (l == CAP_UNFINISHED) luaL_verror(ms->L, "unfinished capture"); |
|
|
|
if (l == CAP_POSITION) |
|
|
|
lua_pushnumber(ms->L, ms->capture[i].init - ms->src_init + 1); |
|
|
|
else |
|
|
@ -636,9 +636,9 @@ static const char *scanformat (lua_State *L, const char *strfrmt, |
|
|
|
if (isdigit(uchar(*p))) p++; /* (2 digits at most) */ |
|
|
|
} |
|
|
|
if (isdigit(uchar(*p))) |
|
|
|
lua_error(L, "invalid format (width or precision too long)"); |
|
|
|
luaL_verror(L, "invalid format (width or precision too long)"); |
|
|
|
if (p-strfrmt+2 > MAX_FORMAT) /* +2 to include `%' and the specifier */ |
|
|
|
lua_error(L, "invalid format (too long)"); |
|
|
|
luaL_verror(L, "invalid format (too long)"); |
|
|
|
form[0] = '%'; |
|
|
|
strncpy(form+1, strfrmt, p-strfrmt+1); |
|
|
|
form[p-strfrmt+2] = 0; |
|
|
@ -663,7 +663,7 @@ static int str_format (lua_State *L) { |
|
|
|
char buff[MAX_ITEM]; /* to store the formatted item */ |
|
|
|
int hasprecision = 0; |
|
|
|
if (isdigit(uchar(*strfrmt)) && *(strfrmt+1) == '$') |
|
|
|
lua_error(L, "obsolete `format' option (d$)"); |
|
|
|
luaL_verror(L, "obsolete `format' option (d$)"); |
|
|
|
arg++; |
|
|
|
strfrmt = scanformat(L, strfrmt, form, &hasprecision); |
|
|
|
switch (*strfrmt++) { |
|
|
@ -696,7 +696,7 @@ static int str_format (lua_State *L) { |
|
|
|
} |
|
|
|
} |
|
|
|
default: /* also treat cases `pnLlh' */ |
|
|
|
lua_error(L, "invalid option in `format'"); |
|
|
|
luaL_verror(L, "invalid option in `format'"); |
|
|
|
} |
|
|
|
luaL_addlstring(&b, buff, strlen(buff)); |
|
|
|
} |
|
|
|