WONKY



LOG | FILES | OVERVIEW


F diff --git a/src/frontend/lex/lexer.c b/src/frontend/lex/lexer.c --- a/src/frontend/lex/lexer.c +++ b/src/frontend/lex/lexer.c
return 0;
}
}
+ /*
+ Counting lines is hard =(
+ */
enum Source_Chars lexer_get_ch_accounting_for_linesplices(struct Program *program,const char *src,size_t src_size,size_t *where_in_src,size_t *which_line,size_t *which_column)
{
enum {
ch=get_ch(src+*where_in_src,src_size-*where_in_src);
switch(state)
{
+
case UNKNOWN_CHAR:
if(ch==CHAR_BACKWARD_SLASH)
{
++*which_line;
}else
{
+ wonky_assert(*which_column!=0);
+ wonky_assert(*where_in_src!=0);
+
+ /*rollback progression of cursor*/
+ --*where_in_src;
+ --*which_column;
+ /*there was no progression of line cursor because
+ previous ch was a backward slash*/
+
+ ch=CHAR_BACKWARD_SLASH;
state=KNOWN_CHAR;
}
break;
F diff --git a/src/semantics/value/constant.h b/src/semantics/value/constant.h --- a/src/semantics/value/constant.h +++ b/src/semantics/value/constant.h
struct Constant
{
struct Type *type;
+ /*bytes of the thingy. size can derived from .type*/
void *value;
};
F diff --git a/src/syntax/automatas/generator/generator.c b/src/syntax/automatas/generator/generator.c --- a/src/syntax/automatas/generator/generator.c +++ b/src/syntax/automatas/generator/generator.c
{
struct Generator_Node *inner_string_node;
struct Generator_Node *ending_string_node;
+ struct Generator_Node *escape_string_node;
struct Generator_Node *inner_char_node;
struct Generator_Node *ending_char_node;
+ struct Generator_Node *escape_char_node;
+
inner_string_node=get_generator_node(null_str,no_type_str,no_type_str,automata_no_action_str);
+ escape_string_node=get_generator_node(null_str,no_type_str,no_type_str,automata_no_action_str);
ending_string_node=get_generator_node(null_str,str_kw,str_kw,automata_dispense_token_str);
inner_char_node=get_generator_node(null_str,no_type_str,no_type_str,automata_no_action_str);
+ escape_char_node=get_generator_node(null_str,no_type_str,no_type_str,automata_no_action_str);
ending_char_node=get_generator_node(null_str,char_kw,char_kw,automata_dispense_token_str);
connect_node(node,inner_char_node,NULL,CHAR_SINGLE_QUOTE,CHAR_SINGLE_QUOTE,0);
connect_node(inner_char_node,ending_char_node,NULL,CHAR_SINGLE_QUOTE,CHAR_SINGLE_QUOTE,0);
- connect_node(inner_char_node,inner_char_node,NULL,0,CHAR_FORM_FEED_TAB-1,0);
+ connect_node(inner_char_node,inner_char_node,NULL,0,CHAR_BACKWARD_SLASH-2,0);
+ connect_node(inner_char_node,inner_char_node,NULL,CHAR_BACKWARD_SLASH+1,CHAR_FORM_FEED_TAB-1,0);
connect_node(inner_char_node,inner_char_node,NULL,CHAR_FORM_FEED_TAB+1,CHAR_ENUM_END,0);
+ connect_node(inner_char_node,escape_char_node,NULL,CHAR_BACKWARD_SLASH,CHAR_BACKWARD_SLASH,0);
+ connect_node(escape_char_node,inner_char_node,NULL,0,CHAR_SPACE-1,0);
+
connect_node(node,inner_string_node,NULL,CHAR_DOUBLE_QUOTE,CHAR_DOUBLE_QUOTE,0);
connect_node(inner_string_node,ending_string_node,NULL,CHAR_DOUBLE_QUOTE,CHAR_DOUBLE_QUOTE,0);
- connect_node(inner_string_node,inner_string_node,NULL,0,CHAR_FORM_FEED_TAB-1,0);
+ connect_node(inner_string_node,inner_string_node,NULL,0,CHAR_BACKWARD_SLASH-1,0);
+ connect_node(inner_string_node,inner_string_node,NULL,CHAR_BACKWARD_SLASH+1,CHAR_FORM_FEED_TAB-1,0);
connect_node(inner_string_node,inner_string_node,NULL,CHAR_FORM_FEED_TAB+1,CHAR_ENUM_END,0);
+ connect_node(inner_string_node,escape_string_node,NULL,CHAR_BACKWARD_SLASH,CHAR_BACKWARD_SLASH,0);
+ connect_node(escape_string_node,inner_string_node,NULL,0,CHAR_SPACE-1,0);
}
void add_finishing_float_nodes(struct Generator_Node *node,_Bool has_read_digits)
{