inline stmt_def_field(const statement&parent,const token&tk,tokenizer&t): statement{parent,tk}, ident_{t.next_token()} { if(ident_.is_name("")) throw compiler_error(ident_,"expected field name"); if(!t.is_next_char('{')) throw compiler_error(ident_,"expected '{' initial value then '}' ",ident_.name()); while(true){ if(t.is_next_char('}'))break; tokens_.push_back(t.next_token()); } }
inline stmt_def_func_param(const statement&parent,tokenizer&t): statement{parent,t.next_token()} { assert(!tok().is_name("")); if(!t.is_next_char(':')) return; while(true){ if(t.is_eos())throw compiler_error(*this,"unexpected end of stream",tok().name_copy()); keywords_.push_back(t.next_token()); if(t.is_next_char(':')) continue; break; } }
inline unique_ptr<statement>create_statement_from_tokenizer(const statement&parent,tokenizer&t){ auto tk=t.next_token(); if(tk.is_name("#"))return make_unique<stmt_comment>(parent,move(tk),t);// ie print("hello") // comment if(t.is_peek_char('('))return create_call_statement_from_tokenizer(parent,move(tk),t); // ie f(...) return make_unique<statement>(parent,move(tk));// ie 0x80 }