+static int __lex_math(scf_lex_t* lex, scf_lex_word_t* w)
+{
+ scf_lex_word_t* w1 = NULL;
+ scf_lex_word_t* w2 = NULL;
+
+ int ret = __lex_pop_word(lex, &w1);
+ if (ret < 0)
+ return ret;
+
+ if (SCF_LEX_WORD_DOT != w1->type) {
+ scf_loge("needs '.' after 'Math', file: %s, line: %d\n", w1->file->data, w1->line);
+
+ scf_lex_word_free(w1);
+ return -1;
+ }
+ scf_lex_word_free(w1);
+ w1 = NULL;
+
+ ret = scf_string_cat_cstr_len(w->text, "_", 1);
+ if (ret < 0)
+ return ret;
+
+ ret = __lex_pop_word(lex, &w2);
+ if (ret < 0)
+ return ret;
+
+ if (SCF_LEX_WORD_ID != w2->type) {
+ scf_loge("needs an identity (but '%s') after 'Math.', file: %s, line: %d\n", w2->text->data, w2->file->data, w2->line);
+
+ scf_lex_word_free(w2);
+ return -1;
+ }
+
+ ret = scf_string_cat(w->text, w2->text);
+
+ scf_lex_word_free(w2);
+ return ret;
+}
+