return parser_ctx(m_parser);
}
-ast_function *intrin::value(ast_value **out, const char *name, qcint_t vtype) {
+ast_function *intrin::value(ast_value **out, const char *name, qc_type vtype) {
ast_value *value = nullptr;
ast_function *func = nullptr;
char buffer[1024];
value = ast_value_new(ctx(), buffer, TYPE_FUNCTION);
value->intrinsic = true;
- value->expression.next = (ast_expression*)ast_value_new(ctx(), stype, vtype);
+ value->next = (ast_expression*)ast_value_new(ctx(), stype, vtype);
func = ast_function_new(ctx(), buffer, value);
- value->expression.flags |= AST_FLAG_ERASEABLE;
+ value->flags |= AST_FLAG_ERASEABLE;
*out = value;
return func;
ast_block *block = ast_block_new(ctx());
/* float x; */
- val->expression.params.push_back(x);
+ val->type_params.push_back(x);
/* <callisnan> = isnan(x); */
callisnan->params.push_back((ast_expression*)x);
)
);
- func->blocks.push_back(block);
+ func->blocks.emplace_back(block);
reg(val, func);
return (ast_expression*)val;;
)
);
- val->expression.params.push_back(x);
- func->blocks.push_back(body);
+ val->type_params.push_back(x);
+ func->blocks.emplace_back(body);
reg(val, func);
)
);
- val->expression.params.push_back(arg1);
- func->blocks.push_back(body);
+ val->type_params.push_back(arg1);
+ func->blocks.emplace_back(body);
reg(val, func);
ast_block *body = ast_block_new(ctx());
ast_function *func = value(&val, "isnormal", TYPE_FLOAT);
- val->expression.params.push_back(x);
+ val->type_params.push_back(x);
callisfinite->params.push_back((ast_expression*)x);
/* return <callisfinite> */
)
);
- func->blocks.push_back(body);
+ func->blocks.emplace_back(body);
reg(val, func);
return (ast_expression*)val;
}
ast_block *body = ast_block_new(ctx());
ast_function *func = value(&val, "signbit", TYPE_FLOAT);
- val->expression.params.push_back(x);
+ val->type_params.push_back(x);
/* return (x < 0); */
body->exprs.push_back(
)
);
- func->blocks.push_back(body);
+ func->blocks.emplace_back(body);
reg(val, func);
return (ast_expression*)val;
}
ast_block *body = ast_block_new(ctx());
ast_function *func = value(&val, "acosh", TYPE_FLOAT);
- val->expression.params.push_back(x);
+ val->type_params.push_back(x);
/* <callsqrt> = sqrt((x * x) - 1); */
callsqrt->params.push_back(
)
);
- func->blocks.push_back(body);
+ func->blocks.emplace_back(body);
reg(val, func);
return (ast_expression*)val;
}
ast_block *body = ast_block_new(ctx());
ast_function *func = value(&val, "asinh", TYPE_FLOAT);
- val->expression.params.push_back(x);
+ val->type_params.push_back(x);
/* <callsqrt> = sqrt((x * x) + 1); */
callsqrt->params.push_back(
)
);
- func->blocks.push_back(body);
+ func->blocks.emplace_back(body);
reg(val, func);
return (ast_expression*)val;
}
ast_block *body = ast_block_new(ctx());
ast_function *func = value(&val, "atanh", TYPE_FLOAT);
- val->expression.params.push_back(x);
+ val->type_params.push_back(x);
/* <callog> = log((1 + x) / (1 - x)); */
calllog->params.push_back(
)
);
- func->blocks.push_back(body);
+ func->blocks.emplace_back(body);
reg(val, func);
return (ast_expression*)val;
}
ast_block *body = ast_block_new(ctx());
ast_function *func = value(&val, "exp", TYPE_FLOAT);
- val->expression.params.push_back(x);
+ val->type_params.push_back(x);
body->locals.push_back(sum);
body->locals.push_back(acc);
)
);
- func->blocks.push_back(body);
+ func->blocks.emplace_back(body);
reg(val, func);
return (ast_expression*)val;
}
ast_block *body = ast_block_new(ctx());
ast_function *func = value(&val, "exp2", TYPE_FLOAT);
- val->expression.params.push_back(arg1);
+ val->type_params.push_back(arg1);
callpow->params.push_back((ast_expression*)m_fold->m_imm_float[3]);
callpow->params.push_back((ast_expression*)arg1);
)
);
- func->blocks.push_back(body);
+ func->blocks.emplace_back(body);
reg(val, func);
return (ast_expression*)val;
}
ast_block *body = ast_block_new(ctx());
ast_function *func = value(&val, "expm1", TYPE_FLOAT);
- val->expression.params.push_back(x);
+ val->type_params.push_back(x);
/* <callexp> = exp(x); */
callexp->params.push_back((ast_expression*)x);
)
);
- func->blocks.push_back(body);
+ func->blocks.emplace_back(body);
reg(val, func);
return (ast_expression*)val;
}
body->locals.push_back(accumulate);
body->locals.push_back(mid);
- val->expression.params.push_back(base);
- val->expression.params.push_back(exp);
+ val->type_params.push_back(base);
+ val->type_params.push_back(exp);
/*
* if (exp == 0.0)
);
/* } */
- func->blocks.push_back(body);
+ func->blocks.emplace_back(body);
reg(val, func);
return (ast_expression*)val;
}
ast_block *body = ast_block_new(ctx());
ast_function *func = value(&val, "mod", TYPE_FLOAT);
- val->expression.params.push_back(a);
- val->expression.params.push_back(b);
+ val->type_params.push_back(a);
+ val->type_params.push_back(b);
body->locals.push_back(div);
body->locals.push_back(sign);
)
);
- func->blocks.push_back(body);
+ func->blocks.emplace_back(body);
reg(val, func);
return (ast_expression*)val;
}
)
);
- val->expression.params.push_back(arg1);
+ val->type_params.push_back(arg1);
- func->blocks.push_back(body);
+ func->blocks.emplace_back(body);
reg(val, func);
return (ast_expression*)val;
}
)
);
- func->blocks.push_back(body);
+ func->blocks.emplace_back(body);
reg(val, func);
return (ast_expression*)val;
}
)
);
- func->blocks.push_back(block);
+ func->blocks.emplace_back(block);
reg(val, func);
return (ast_expression*)val;
}
)
);
- func->blocks.push_back(block);
+ func->blocks.emplace_back(block);
reg(val, func);
return (ast_expression*)val;
}
ast_function *func = value(&val, "ln", TYPE_FLOAT);
size_t i;
- val->expression.params.push_back(power);
- val->expression.params.push_back(base);
+ val->type_params.push_back(power);
+ val->type_params.push_back(base);
block->locals.push_back(whole);
block->locals.push_back(nth);
)
);
- func->blocks.push_back(block);
+ func->blocks.emplace_back(block);
reg(val, func);
return (ast_expression*)val;
}
ast_block *body = ast_block_new(ctx());
ast_function *func = value(&val, name, TYPE_FLOAT);
- val->expression.params.push_back(arg1);
+ val->type_params.push_back(arg1);
callln->params.push_back((ast_expression*)arg1);
callln->params.push_back((ast_expression*)m_fold->constgen_float(base, false));
)
);
- func->blocks.push_back(body);
+ func->blocks.emplace_back(body);
reg(val, func);
return (ast_expression*)val;
}
ast_block *body = ast_block_new(ctx());
ast_function *func = value(&val, name, TYPE_FLOAT);
- val->expression.params.push_back(a);
- val->expression.params.push_back(b);
+ val->type_params.push_back(a);
+ val->type_params.push_back(b);
/* <callpow> = pow(2, b) */
callpow->params.push_back((ast_expression*)m_fold->m_imm_float[3]);
)
);
- func->blocks.push_back(body);
+ func->blocks.emplace_back(body);
reg(val, func);
return (ast_expression*)val;
}
ast_expression *intrin::func_self(const char *name, const char *from) {
ast_expression *find;
/* try current first */
- if ((find = parser_find_global(m_parser, name)) && ((ast_value*)find)->expression.vtype == TYPE_FUNCTION)
+ if ((find = parser_find_global(m_parser, name)) && ((ast_value*)find)->vtype == TYPE_FUNCTION)
for (auto &it : m_parser->functions)
if (((ast_value*)find)->name && !strcmp(it->name, ((ast_value*)find)->name) && it->builtin < 0)
return find;