more source changes
parent
6244c5db75
commit
aaf4d1581d
|
@ -1335,6 +1335,10 @@ struct GenState {
|
||||||
char next_char() {
|
char next_char() {
|
||||||
return *source++;
|
return *source++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char current() {
|
||||||
|
return *source;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline void compileblock(GenState &gs) {
|
static inline void compileblock(GenState &gs) {
|
||||||
|
@ -1439,7 +1443,8 @@ static bool compilearg(GenState &gs, int wordtype, int prevargs = MAX_RESULTS, o
|
||||||
|
|
||||||
static void compilelookup(GenState &gs, int ltype, int prevargs = MAX_RESULTS) {
|
static void compilelookup(GenState &gs, int ltype, int prevargs = MAX_RESULTS) {
|
||||||
ostd::ConstCharRange lookup;
|
ostd::ConstCharRange lookup;
|
||||||
switch (*++gs.source) {
|
gs.next_char();
|
||||||
|
switch (gs.current()) {
|
||||||
case '(':
|
case '(':
|
||||||
case '[':
|
case '[':
|
||||||
if (!compilearg(gs, VAL_CSTR, prevargs)) goto invalid;
|
if (!compilearg(gs, VAL_CSTR, prevargs)) goto invalid;
|
||||||
|
@ -1693,7 +1698,7 @@ done:
|
||||||
static bool compileblocksub(GenState &gs, int prevargs) {
|
static bool compileblocksub(GenState &gs, int prevargs) {
|
||||||
ostd::ConstCharRange lookup;
|
ostd::ConstCharRange lookup;
|
||||||
const char *op;
|
const char *op;
|
||||||
switch (*gs.source) {
|
switch (gs.current()) {
|
||||||
case '(':
|
case '(':
|
||||||
if (!compilearg(gs, VAL_CANY, prevargs)) return false;
|
if (!compilearg(gs, VAL_CANY, prevargs)) return false;
|
||||||
break;
|
break;
|
||||||
|
@ -1706,7 +1711,7 @@ static bool compileblocksub(GenState &gs, int prevargs) {
|
||||||
goto lookupid;
|
goto lookupid;
|
||||||
default: {
|
default: {
|
||||||
op = gs.source;
|
op = gs.source;
|
||||||
while (isalnum(*gs.source) || *gs.source == '_') gs.source++;
|
while (isalnum(gs.current()) || gs.current() == '_') gs.next_char();
|
||||||
lookup = ostd::ConstCharRange(op, gs.source - op);
|
lookup = ostd::ConstCharRange(op, gs.source - op);
|
||||||
if (lookup.empty()) return false;
|
if (lookup.empty()) return false;
|
||||||
lookupid:
|
lookupid:
|
||||||
|
@ -1747,10 +1752,10 @@ 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.next_char();
|
if (gs.current() == '\"') gs.next_char();
|
||||||
break;
|
break;
|
||||||
case '/':
|
case '/':
|
||||||
if (*gs.source == '/') gs.source += strcspn(gs.source, "\n\0");
|
if (gs.current() == '/') gs.source += strcspn(gs.source, "\n\0");
|
||||||
break;
|
break;
|
||||||
case '[':
|
case '[':
|
||||||
brak++;
|
brak++;
|
||||||
|
@ -1760,7 +1765,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.next_char();
|
while (gs.current() == '@') 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");
|
||||||
|
@ -1848,12 +1853,12 @@ done:
|
||||||
|
|
||||||
static bool compilearg(GenState &gs, int wordtype, int prevargs, ostd::ConstCharRange &word) {
|
static bool compilearg(GenState &gs, int wordtype, int prevargs, ostd::ConstCharRange &word) {
|
||||||
skipcomments(gs.source);
|
skipcomments(gs.source);
|
||||||
switch (*gs.source) {
|
switch (gs.current()) {
|
||||||
case '\"':
|
case '\"':
|
||||||
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.next_char();
|
if (gs.current() == '\"') gs.next_char();
|
||||||
break;
|
break;
|
||||||
case VAL_COND: {
|
case VAL_COND: {
|
||||||
char *s = cutstring(gs.source);
|
char *s = cutstring(gs.source);
|
||||||
|
@ -1969,7 +1974,7 @@ static void compilestatements(GenState &gs, int rettype, int brak, int prevargs)
|
||||||
bool more = compilearg(gs, VAL_WORD, prevargs, idname);
|
bool more = compilearg(gs, VAL_WORD, prevargs, idname);
|
||||||
if (!more) goto endstatement;
|
if (!more) goto endstatement;
|
||||||
skipcomments(gs.source);
|
skipcomments(gs.source);
|
||||||
if (gs.source[0] == '=') switch (gs.source[1]) {
|
if (gs.current() == '=') switch (gs.source[1]) {
|
||||||
case '/':
|
case '/':
|
||||||
if (gs.source[2] != '/') break;
|
if (gs.source[2] != '/') break;
|
||||||
case ';':
|
case ';':
|
||||||
|
@ -2296,7 +2301,7 @@ endstatement:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '/':
|
case '/':
|
||||||
if (*gs.source == '/') gs.source += strcspn(gs.source, "\n\0");
|
if (gs.current() == '/') gs.source += strcspn(gs.source, "\n\0");
|
||||||
goto endstatement;
|
goto endstatement;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue