start replacing direct gs.source access

master
Daniel Kolesa 2015-08-11 22:47:25 +01:00
parent 30b1d98298
commit 6244c5db75
2 changed files with 17 additions and 13 deletions

View File

@ -367,7 +367,7 @@ inline int TaggedValue::force_int() {
return ri; return ri;
} }
inline const char *TaggedValue::force_str() { inline ostd::ConstCharRange TaggedValue::force_str() {
const char *rs = ""; const char *rs = "";
switch (type) { switch (type) {
case VAL_FLOAT: case VAL_FLOAT:
@ -385,7 +385,7 @@ inline const char *TaggedValue::force_str() {
} }
cleanup(); cleanup();
set_str(cs_dup_ostr(rs)); set_str(cs_dup_ostr(rs));
return rs; return s;
} }
inline void TaggedValue::force(int type) { inline void TaggedValue::force(int type) {
@ -1331,6 +1331,10 @@ struct GenState {
} }
void gen_main(ostd::ConstCharRange s, int ret_type = VAL_ANY); void gen_main(ostd::ConstCharRange s, int ret_type = VAL_ANY);
char next_char() {
return *source++;
}
}; };
static inline void compileblock(GenState &gs) { static inline void compileblock(GenState &gs) {
@ -1359,7 +1363,7 @@ static inline const char *compileblock(GenState &gs, const char *p, int rettype,
} }
static inline void compileunescapestr(GenState &gs, bool macro = false) { static inline void compileunescapestr(GenState &gs, bool macro = false) {
gs.source++; gs.next_char();
const char *end = parsestring(gs.source); const char *end = parsestring(gs.source);
gs.code.push(macro ? CODE_MACRO : CODE_VAL | RET_STR); gs.code.push(macro ? CODE_MACRO : CODE_VAL | RET_STR);
gs.code.reserve(gs.code.size() + (end - gs.source) / sizeof(ostd::Uint32) + 1); gs.code.reserve(gs.code.size() + (end - gs.source) / sizeof(ostd::Uint32) + 1);
@ -1371,7 +1375,7 @@ static inline void compileunescapestr(GenState &gs, bool macro = false) {
gs.code.back() |= len << 8; gs.code.back() |= len << 8;
gs.code.advance(len / sizeof(ostd::Uint32) + 1); gs.code.advance(len / sizeof(ostd::Uint32) + 1);
gs.source = end; gs.source = end;
if (*gs.source == '\"') gs.source++; if (*gs.source == '\"') gs.next_char();
} }
static ostd::Uint32 emptyblock[VAL_ANY][2] = { static ostd::Uint32 emptyblock[VAL_ANY][2] = {
@ -1735,7 +1739,7 @@ static void compileblockmain(GenState &gs, int wordtype, int prevargs) {
int concs = 0; int concs = 0;
for (int brak = 1; brak;) { for (int brak = 1; brak;) {
gs.source += strcspn(gs.source, "@\"/[]\0"); gs.source += strcspn(gs.source, "@\"/[]\0");
int c = *gs.source++; char c = gs.next_char();
switch (c) { switch (c) {
case '\0': case '\0':
gs.cs.debug_code_line(line, "missing \"]\""); gs.cs.debug_code_line(line, "missing \"]\"");
@ -1743,7 +1747,7 @@ static void compileblockmain(GenState &gs, int wordtype, int prevargs) {
goto done; goto done;
case '\"': case '\"':
gs.source = parsestring(gs.source); gs.source = parsestring(gs.source);
if (*gs.source == '\"') gs.source++; if (*gs.source == '\"') gs.next_char();
break; break;
case '/': case '/':
if (*gs.source == '/') gs.source += strcspn(gs.source, "\n\0"); if (*gs.source == '/') gs.source += strcspn(gs.source, "\n\0");
@ -1756,7 +1760,7 @@ static void compileblockmain(GenState &gs, int wordtype, int prevargs) {
break; break;
case '@': { case '@': {
const char *esc = gs.source; const char *esc = gs.source;
while (*gs.source == '@') gs.source++; while (*gs.source == '@') gs.next_char();
int level = gs.source - (esc - 1); int level = gs.source - (esc - 1);
if (brak > level) continue; if (brak > level) continue;
else if (brak < level) gs.cs.debug_code_line(line, "too many @s"); else if (brak < level) gs.cs.debug_code_line(line, "too many @s");
@ -1849,7 +1853,7 @@ static bool compilearg(GenState &gs, int wordtype, int prevargs, ostd::ConstChar
switch (wordtype) { switch (wordtype) {
case VAL_POP: case VAL_POP:
gs.source = parsestring(gs.source + 1); gs.source = parsestring(gs.source + 1);
if (*gs.source == '\"') gs.source++; if (*gs.source == '\"') gs.next_char();
break; break;
case VAL_COND: { case VAL_COND: {
char *s = cutstring(gs.source); char *s = cutstring(gs.source);
@ -1887,7 +1891,7 @@ static bool compilearg(GenState &gs, int wordtype, int prevargs, ostd::ConstChar
compilelookup(gs, wordtype, prevargs); compilelookup(gs, wordtype, prevargs);
return true; return true;
case '(': case '(':
gs.source++; gs.next_char();
if (prevargs >= MAX_RESULTS) { if (prevargs >= MAX_RESULTS) {
gs.code.push(CODE_ENTER); gs.code.push(CODE_ENTER);
compilestatements(gs, wordtype > VAL_ANY ? VAL_CANY : VAL_ANY, ')'); compilestatements(gs, wordtype > VAL_ANY ? VAL_CANY : VAL_ANY, ')');
@ -1917,7 +1921,7 @@ static bool compilearg(GenState &gs, int wordtype, int prevargs, ostd::ConstChar
} }
return true; return true;
case '[': case '[':
gs.source++; gs.next_char();
compileblockmain(gs, wordtype, prevargs); compileblockmain(gs, wordtype, prevargs);
return true; return true;
default: default:
@ -1974,7 +1978,7 @@ static void compilestatements(GenState &gs, int rettype, int brak, int prevargs)
case '\r': case '\r':
case '\n': case '\n':
case '\0': case '\0':
gs.source++; gs.next_char();
if (idname.data()) { if (idname.data()) {
Ident *id = gs.cs.new_ident(idname, IDF_UNKNOWN); Ident *id = gs.cs.new_ident(idname, IDF_UNKNOWN);
if (id) switch (id->type) { if (id) switch (id->type) {
@ -2278,7 +2282,7 @@ compilecomv:
endstatement: endstatement:
if (more) while (compilearg(gs, VAL_POP)); if (more) while (compilearg(gs, VAL_POP));
gs.source += strcspn(gs.source, ")];/\n\0"); gs.source += strcspn(gs.source, ")];/\n\0");
int c = *gs.source++; char c = gs.next_char();
switch (c) { switch (c) {
case '\0': case '\0':
if (c != brak) gs.cs.debug_code_line(line, "missing \"%c\"", brak); if (c != brak) gs.cs.debug_code_line(line, "missing \"%c\"", brak);

View File

@ -143,7 +143,7 @@ struct TaggedValue: IdentValue {
void force_null(); void force_null();
float force_float(); float force_float();
int force_int(); int force_int();
const char *force_str(); ostd::ConstCharRange force_str();
void force(int type); void force(int type);
void cleanup(); void cleanup();