diff options
author | Peter Mikkelsen <petermikkelsen10@gmail.com> | 2022-01-17 21:45:28 +0000 |
---|---|---|
committer | Peter Mikkelsen <petermikkelsen10@gmail.com> | 2022-01-17 21:45:28 +0000 |
commit | a36a6bcd305806536230995599d69e1f30ccbab0 (patch) | |
tree | 8ce4916e876e49937afbb2ea7c39d14f6f61e7ca /lexer.c | |
parent | 0f9d219bf2f9c24f24014499c3ef6ee50909e054 (diff) |
Implement text data
Diffstat (limited to 'lexer.c')
-rw-r--r-- | lexer.c | 27 |
1 files changed, 26 insertions, 1 deletions
@@ -113,7 +113,7 @@ get_digits: }else if(isalpharune(line[offset])){ Rune buf[64]; Rune *p = buf; - while(isalpharune(line[offset])){ + while(isalpharune(line[offset]) || isdigitrune(line[offset])){ *p = line[offset]; p++; offset++; @@ -140,6 +140,31 @@ get_digits: offset -= runestrlen(buf); goto syntax_error; } + }else if(line[offset] == '\''){ + Rune buf[1024]; /* stupid limit on literal string lengths */ + Rune *b = buf; + int done = 0; + offset++; + while(!done && offset < len){ + if(line[offset] == '\'' && line[offset+1] != '\''){ + *b = 0; + done = 1; + }else if(line[offset] == '\'' && line[offset+1] == '\''){ + *b++ = '\''; + offset++; + }else + *b++ = line[offset]; + offset++; + } + if(!done){ + offset = offset - (b-buf); + goto syntax_error; + } + stmt->toks[stmt->ntoks].tag = ArrayTag; + if(runestrlen(buf) == 1) + stmt->toks[stmt->ntoks].array = mkscalarrune(buf[0]); + else + stmt->toks[stmt->ntoks].array = mkrunearray(buf); }else{ syntax_error: print("Can't lex: %S\n", &line[offset]); |