summaryrefslogtreecommitdiff
path: root/lexer.c
diff options
context:
space:
mode:
authorPeter Mikkelsen <petermikkelsen10@gmail.com>2022-01-17 21:45:28 +0000
committerPeter Mikkelsen <petermikkelsen10@gmail.com>2022-01-17 21:45:28 +0000
commita36a6bcd305806536230995599d69e1f30ccbab0 (patch)
tree8ce4916e876e49937afbb2ea7c39d14f6f61e7ca /lexer.c
parent0f9d219bf2f9c24f24014499c3ef6ee50909e054 (diff)
Implement text data
Diffstat (limited to 'lexer.c')
-rw-r--r--lexer.c27
1 files changed, 26 insertions, 1 deletions
diff --git a/lexer.c b/lexer.c
index 76cffc8..25b5d75 100644
--- a/lexer.c
+++ b/lexer.c
@@ -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]);