MCPcopy Create free account
hub / github.com/GaijinEntertainment/daScript / evalAndFoldString

Method evalAndFoldString

src/ast/ast_const_folding.cpp:421–441  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

419 }
420
421 ExpressionPtr FoldingVisitor::evalAndFoldString ( Expression * expr ) {
422 if ( expr->rtti_isStringConstant() ) return expr->clone();
423 bool failed;
424 vec4f value = eval(expr, failed);
425 if ( !failed ) {
426 auto b4ref = expr->type->ref;
427 expr->type->ref = false;
428 TypeInfo * pTypeInfo = helper.makeTypeInfo(nullptr,expr->type);
429 expr->type->ref = b4ref;
430 auto res = debug_value(value, pTypeInfo, PrintFlags::string_builder);
431 auto sim = new ExprConstString(expr->at, res);
432 sim->type = new TypeDecl(Type::tString);
433 sim->constexpression = true;
434 sim->foldedNonConst = !expr->type->constant;
435 sim->at = encloseAt(expr);
436 reportFolding();
437 return sim;
438 } else {
439 return expr;
440 }
441 }
442
443 ExpressionPtr FoldingVisitor::cloneWithType ( ExpressionPtr expr ) {
444 auto rexpr = expr->clone();

Callers

nothing calls this directly

Calls 4

debug_valueFunction · 0.85
encloseAtFunction · 0.85
makeTypeInfoMethod · 0.80
cloneMethod · 0.45

Tested by

no test coverage detected