Cm::Sym::LocalVariableSymbol* BoundFunction::CreateTempLocalVariable(Cm::Sym::TypeSymbol* type) { std::string tempVarName = "__temp" + std::to_string(int(temporaries.size())); Cm::Sym::LocalVariableSymbol* tempVar = new Cm::Sym::LocalVariableSymbol(Cm::Parsing::Span(), tempVarName); tempVar->SetType(type); temporaries.push_back(std::unique_ptr<Cm::Sym::LocalVariableSymbol>(tempVar)); AddLocalVariable(tempVar); return tempVar; }
static void DeclVariable(KonohaContext *kctx, kNode *stmt, kNameSpace *ns, ktypeattr_t ty, kNode *termNode) { DBG_ASSERT(kNode_isSymbolTerm(termNode)); kToken *termToken = termNode->TermToken; if(kNameSpace_IsTopLevel(ns)) { if(ns->globalObjectNULL == NULL) { kNodeToken_Message(kctx, stmt, termToken, ErrTag, "unavailable global variable"); return; } kNodeToken_Message(kctx, stmt, termToken, InfoTag, "global variable %s%s has type %s", KSymbol_Fmt2(termToken->symbol), KType_text(ty)); KLIB KClass_AddField(kctx, kObject_class(ns->globalObjectNULL), ty, termToken->symbol); } else { kNodeToken_Message(kctx, stmt, termToken, InfoTag, "%s%s has type %s", KSymbol_Fmt2(termToken->symbol), KType_text(ty)); KLIB AddLocalVariable(kctx, ns, ty, termToken->symbol); } }