w1->type = w->type;
- switch (w->type) {
- case SCF_LEX_WORD_CONST_CHAR:
- w1->data.u32 = w->data.u32;
- break;
-
- case SCF_LEX_WORD_CONST_STRING:
-
- w1->data.s = scf_string_clone(w->data.s);
- if (!w1->data.s) {
- free(w1);
- return NULL;
- }
- break;
-
- case SCF_LEX_WORD_CONST_INT:
- w1->data.i = w->data.i;
- break;
+ switch (w->type)
+ {
case SCF_LEX_WORD_CONST_FLOAT:
w1->data.f = w->data.f;
break;
+
case SCF_LEX_WORD_CONST_DOUBLE:
w1->data.d = w->data.d;
break;
+
case SCF_LEX_WORD_CONST_COMPLEX:
w1->data.z = w->data.z;
break;
- case SCF_LEX_WORD_CONST_I64:
- w1->data.i64 = w->data.i64;
- break;
- case SCF_LEX_WORD_CONST_U64:
- w1->data.u64 = w->data.u64;
+ case SCF_LEX_WORD_CONST_STRING:
+
+ w1->data.s = scf_string_clone(w->data.s);
+ if (!w1->data.s) {
+ free(w1);
+ return NULL;
+ }
break;
+
default:
+ w1->data.u64 = w->data.u64;
break;
};
SCF_LEX_WORD_CONST_CHAR,
SCF_LEX_WORD_CONST_STRING,
- SCF_LEX_WORD_CONST_INT,
SCF_LEX_WORD_CONST_FLOAT,
SCF_LEX_WORD_CONST_DOUBLE,
SCF_LEX_WORD_CONST_COMPLEX,
+ SCF_LEX_WORD_CONST_INT,
SCF_LEX_WORD_CONST_U32,
SCF_LEX_WORD_CONST_I64,
SCF_LEX_WORD_CONST_U64,
return ret;
}
- if (scf_lex_is_const(w1)) {
+ if (SCF_LEX_WORD_CONST_INT <= w1->type && w1->type <= SCF_LEX_WORD_CONST_U64) {
ret = __lex_pop_word(lex, &w2);
if (ret < 0) {
scf_lex_push_word(lex, w2);
- if (w2->type != SCF_LEX_WORD_ASSIGN) {
+ if (w2->type != SCF_LEX_WORD_ASSIGN && w2->type != SCF_LEX_WORD_DOT) {
w->type = SCF_LEX_WORD_CONST_DOUBLE;
ret = scf_string_cat(w->text, w1->text);
}
w->data.d = atof(w->text->data);
- } else
- scf_lex_push_word(lex, w1);
- } else
+ }
+ }
+
+ if (w1)
scf_lex_push_word(lex, w1);
}