diff --git a/uppsrc/CppBase/Qualify.cpp b/uppsrc/CppBase/Qualify.cpp index e6ee0956e..5c43c35f8 100644 --- a/uppsrc/CppBase/Qualify.cpp +++ b/uppsrc/CppBase/Qualify.cpp @@ -134,7 +134,7 @@ String QualifyIds(Scopefo& nf, const String& k, bool all, byte& qual) r.Cat(b, s); } else - if(iscib(c)) { + if(iscid(c)) { if(iscid(*r.Last())) r << ' '; if(s[0] == 'c' && s[1] == 'o' && s[2] == 'n' && s[3] == 's' && s[4] == 't' && !iscid(s[5])) { @@ -212,6 +212,9 @@ void QualifyPass1(CppBase& base) } m.qitem = m.item; } + LLOG(base.GetKey(ni) << "." << m.item << " " << GetCppFile(m.file) + << " impl:" << m.impl << " kind:" << (int)m.kind << " IsType:" << m.IsType() + << " type: " << m.type << " qtype:" << m.qtype << " tparam:" << m.tparam); } } } diff --git a/uppsrc/ide/Assist.cpp b/uppsrc/ide/Assist.cpp index 9c4962ec1..40be3d080 100644 --- a/uppsrc/ide/Assist.cpp +++ b/uppsrc/ide/Assist.cpp @@ -183,9 +183,8 @@ Vector AssistEditor::ReadBack(int q) SkipSpcBack(q); int c = Ch(q - 1); if(c == '>' && !wasid) { - String id = ">"; q--; - r.Add() = id + CompleteIdBack(q); + r.Add() = CompleteIdBack(q) + ">"; wasid = true; continue; } diff --git a/uppsrc/ide/Browser/Move.cpp b/uppsrc/ide/Browser/Move.cpp index eb1531be6..a4e646056 100644 --- a/uppsrc/ide/Browser/Move.cpp +++ b/uppsrc/ide/Browser/Move.cpp @@ -1,16 +1,31 @@ #include "Browser.h" -class MoveTopicDlg : public WithMoveTopicLayout { +struct MoveTopicDlg : public WithMoveTopicLayout { typedef MoveTopicDlg CLASSNAME; public: + void Package(); + MoveTopicDlg(); }; +void MoveTopicDlg::Package() +{ + +} + MoveTopicDlg::MoveTopicDlg() { CtrlLayoutOKCancel(*this, ""); - + + topic.NotNull(); + topic.MaxLen(30); + topic.SetFilter(CharFilterID); + + package <<= THISBACK(Package); + const Workspace& w = GetIdeWorkspace(); + for(int i = 0; i < w.GetCount(); i++) + package.Add(w[i]); } void TopicEditor::MoveTopic() diff --git a/uppsrc/ide/Browser/TopicWin.cpp b/uppsrc/ide/Browser/TopicWin.cpp index 4ec57a07d..dd2abd911 100644 --- a/uppsrc/ide/Browser/TopicWin.cpp +++ b/uppsrc/ide/Browser/TopicWin.cpp @@ -206,6 +206,7 @@ void CreateTopic(const char *fn, int lang, const String& ss) void TopicEditor::NewTopic() { TopicDlg > d("New topic"); + d.lang <<= lastlang; Vector path, name; diff --git a/uppsrc/ide/Cpp.cpp b/uppsrc/ide/Cpp.cpp index 4952f61ee..660eeeda7 100644 --- a/uppsrc/ide/Cpp.cpp +++ b/uppsrc/ide/Cpp.cpp @@ -83,7 +83,7 @@ String ResolveTParam(const String& type, const Vector& tparam) LLOG("Resolved " << type << " -> " << r); const Array& x = GetTypeItems(r); if(x.GetCount() && x[0].kind == TYPEDEF) { - LLOG("Is typedef " << x[0].qtype); + LLOG("Is typedef " << x[0].qtype << ';' << x[0].type << ';' << x[0].natural); String h = x[0].qtype; if(h != type && h != r) return ResolveTParam(h, tparam); @@ -125,29 +125,29 @@ String Qualify(const String& scope, const String& type) return Qualify(CodeBase(), scope, type); } -void AssistEditor::ExpressionType(const String& type, const Vector& xp, int ii, - Index& typeset, const Vector& tparam, +void AssistEditor::ExpressionType(const String& ttype, const Vector& xp, int ii, + Index& typeset, const Vector& tparam_, bool can_shortcut_operator, Index& visited_bases) { if(ii >= xp.GetCount()) { - LLOG("Final type: " << type); - typeset.FindAdd(type); + LLOG("Final type: " << ttype); + typeset.FindAdd(ttype); return; } + Vector tparam; + String type = ParseTemplatedType(ttype, tparam); int c0 = typeset.GetCount(); const Array& n = GetTypeItems(type); String id = xp[ii]; int q = id.ReverseFind(':'); if(q > 0 && id[q - 1] == ':') { - Vector tparam; - String qtype = ParseTemplatedType(Qualify("", id.Mid(0, q - 1)), tparam); id = id.Mid(q + 1); - ExpressionType(ResolveTParam(qtype, tparam), xp, ii + 1, typeset); + ExpressionType(ResolveTParam(Qualify("", id.Mid(0, q - 1)), tparam), xp, ii + 1, typeset); return; } LLOG("ExpressionType " << type << " ii: " << ii << " id:" << id); if(*id == '.') { - ExpressionType(type, xp, ii + 1, typeset, tparam); + ExpressionType(ttype, xp, ii + 1, typeset, tparam); return; } bool shortcut_oper = false; @@ -167,14 +167,12 @@ void AssistEditor::ExpressionType(const String& type, const Vector& xp, for(int i = 0; i < base.GetCount(); i++) if(visited_bases.Find(base[i]) < 0) { visited_bases.Add(base[i]); - Vector tparam; - ExpressionType(ParseTemplatedType(base[i], tparam), xp, ii, typeset, - tparam, false, visited_bases); + ExpressionType(base[i], xp, ii, typeset, tparam, false, visited_bases); if(typeset.GetCount() != c0) return; } if(shortcut_oper) - ExpressionType(type, xp, ii + 1, typeset, tparam); + ExpressionType(ttype, xp, ii + 1, typeset, tparam); } void AssistEditor::ExpressionType(const String& type, const Vector& xp, int ii, @@ -187,8 +185,7 @@ void AssistEditor::ExpressionType(const String& type, const Vector& xp, void AssistEditor::ExpressionType(const String& type, const Vector& xp, int ii, Index& typeset) { - Vector tparam; - ExpressionType(ParseTemplatedType(type, tparam), xp, ii, typeset, tparam); + ExpressionType(type, xp, ii, typeset, Vector()); } Index AssistEditor::ExpressionType(const Parser& parser, const Vector& xp) @@ -213,11 +210,11 @@ Index AssistEditor::ExpressionType(const Parser& parser, const Vector= 2 && xp[1] == "()") { + String qtype = Qualify(parser.current_scope, xp[0]); Vector tparam; - String qtype = ParseTemplatedType(Qualify(parser.current_scope, xp[0]), tparam); - if(CodeBase().Find(qtype) >= 0) { + if(CodeBase().Find(ParseTemplatedType(qtype, tparam)) >= 0) { LLOG("Is constructor " << qtype); - ExpressionType(ResolveTParam(qtype, tparam), xp, 2, typeset); + ExpressionType(qtype, xp, 2, typeset); return typeset; } }