コード例 #1
0
ファイル: Data.cpp プロジェクト: guowei8412/upp-mirror
void Pdb::SetTree(const String& exp)
{
	SaveTree();
	tree.Clear();
	NamedVal nv;
	try {
		CParser p(exp);
		nv.val = Exp(p);
	}
	catch(CParser::Error) {
		return;
	}
	nv.name = exp;
	String n = exp;
	if(nv.val.type >= 0)
		n = GetType(nv.val.type).name;
	tree.SetRoot(Null, RawToValue(nv), n + '=' + Visualise(nv.val).GetString());
	if(nv.val.type >= 0) {
		String w = treetype.Get(n, Null);
		LOG("SetTree " << n << ' ' << w);
		tree.Open(0);
		CParser p(w);
		try {
			Point sc;
			sc.x = p.ReadInt();
			sc.y = p.ReadInt();
			int cursor = p.ReadInt();
			ExpandTreeType(0, p);
			tree.ScrollTo(sc);
			if(cursor >= 0)
				tree.SetCursor(cursor);
		}
		catch(CParser::Error) {}
	}
}
コード例 #2
0
ファイル: Exe.cpp プロジェクト: AbdelghaniDr/mirror
Value Compiler::ExeFor::Eval(ExeContext& x) const
{
	LTIMING("ExeFor");
	Value array = value->Eval(x);
	LLOG("ExeFor array: " << array);
	if(array.GetCount() == 0 && onempty)
		return onempty->Eval(x);
	ValueMap m;
	bool map = array.Is<ValueMap>();
	if(map)
		m = array;
	int q = x.stack.GetCount();
	x.stack.Add();
	x.stack.Add();
	for(int i = 0; i < array.GetCount(); i++) {
		x.stack[q] = array[i];
		LoopInfo f;
		f.first = i == 0;
		f.last = i == array.GetCount() - 1;
		f.index = i;
		f.key = map ? m.GetKeys()[i] : (Value)i;
		x.stack[q + 1] = RawToValue(f);
		sCatAsString(x.out, body->Eval(x));
	}
	x.stack.SetCount(q);
	return Value();
}
コード例 #3
0
ファイル: Data.cpp プロジェクト: guowei8412/upp-mirror
void Pdb::TreeNode(int parent, const String& name, Pdb::Val val)
{
	NamedVal nv;
	nv.name = name;
	nv.val = val;
	tree.Add(parent, Null, RawToValue(nv), name + "=" + Visualise(val).GetString(), val.type >= 0 || val.ref > 0);
}
コード例 #4
0
ファイル: Raw.cpp プロジェクト: dreamsxin/ultimatepp
void CheckRawValue()
{
	typedef Tuple2<int, int> T;
	T x = MakeTuple(11, 22);
	Value v = RawToValue(x);
	const T& x2 = v.To<T>();
	ASSERT(x2 == x);
}
コード例 #5
0
ファイル: UppWspc.cpp プロジェクト: AbdelghaniDr/mirror
void UppList::Paint(Draw& w, const Rect& r, const Value& q, Color ink, Color paper, dword style) const
{
	FileList::File file = ValueTo<FileList::File>(q);
	if(GetFileName(file.name) == "$.tpp" && IsFolder(file.name))
		file.name = GetFileName(GetFileFolder(file.name)) + " templates";
	if(file.name == ConfigFile("global.defs"))
		file.name = "Fixed macros";
	FileList::Paint(w, r, RawToValue(file), ink, paper, style);
}
コード例 #6
0
ファイル: FindInFiles.cpp プロジェクト: ultimatepp/mirror
void Ide::AddFoundFile(const String& fn, int ln, const String& line, int pos, int count)
{
	ErrorInfo f;
	f.file = fn;
	f.lineno = ln;
	f.linepos = 0;
	f.kind = 0;
	f.message = "\1" + EditorSyntax::GetSyntaxForFilename(fn) + "\1" +
	            AsString(pos) + "\1" + AsString(count) + "\1" + line;
	ffound.Add(fn, ln, f.message, RawToValue(f));
	ffound.Sync();
}
コード例 #7
0
ファイル: Navigator.cpp プロジェクト: AbdelghaniDr/mirror
void Navigator::SyncNavLines()
{
	int sc = navlines.GetScroll();
	navlines.Clear();
	int ii = list.GetCursor();
	if(ii >= 0 && ii < litem.GetCount()) {
		Vector<NavLine> l = GetNavLines(*litem[ii]);
		for(int i = 0; i < l.GetCount(); i++) {
			String p = GetSourceFilePath(l[i].file);
			navlines.Add(RawToValue(l[i]));
		}
		navlines.ScrollTo(sc);
		SyncLines();
	}
}
コード例 #8
0
ファイル: Exe.cpp プロジェクト: AbdelghaniDr/mirror
Value Compiler::ExeAdd::Eval(ExeContext& x) const
{
	Value v1 = a->Eval(x);
	Value v2 = b->Eval(x);
	if(IsString(v1) && IsString(v2))
		return (String)v1 + (String)v2;
	if(IsNumber(v1) && IsNumber(v2))
		return (double)v1 + (double)v2;
	if(v1.Is<RawHtmlText>() || v2.Is<RawHtmlText>()) {
		RawHtmlText h;
		h.text = AsString(v1) + AsString(v2);
		return RawToValue(h);
	}
	return AsString(v1) + AsString(v2);
}
コード例 #9
0
ファイル: CodeBrowser.cpp プロジェクト: AbdelghaniDr/mirror
void CodeBrowser::LoadScope()
{
	String find = ToUpper((String)~search);
	Value key = item.GetKey();
	int sc = item.GetCursorSc();
	item.Clear();
	if(!scope.IsCursor())
		return;
	Value x = scope.Get(2);
	int file = IsNumber(x) ? (int)x : -1;
	String scope = file < 0 ? String(x) : String();
	int q = CodeBase().Find(scope);
	bool filematch = file >= 0 && MatchCib(GetFileText(GetSourceFilePath(file)), find);
	bool scopematch = !filematch && MatchCib(scope, find);
	if(q >= 0) {
		const Array<CppItem>& n = CodeBase()[q];
		VectorMap<String, bool> inherited;
		if(file < 0)
			GatherMethods(scope, inherited, false);
		Index<String> set;
		for(int i = 0; i < n.GetCount(); i++) {
			CppItemInfo m;
			(CppItem&) m = n[i];
			if((find.GetCount() && m.uname.StartsWith(find) || filematch && m.file == file || scopematch) && set.Find(m.qitem) < 0) {
				set.Add(m.qitem);
				int q = inherited.Find(m.qitem);
				if(q >= 0) {
					m.over = true;
					m.virt = m.virt || inherited[q];
				}
				item.Add(m.qitem, RawToValue(m));
			}
		}
	}
	item.Sort(1, sort ? ItemCompareLexical : ItemCompare);
	if(item.FindSetCursor(key))
		item.ScCursor(sc);
//	clear.Enable(IsSearch());
}
コード例 #10
0
ファイル: Value.cpp プロジェクト: dreamsxin/ultimatepp
void ValuePut(Value& v, const Json& json)
{
	RawJsonText x;
	x.json = json;
	v = RawToValue(x);
}
コード例 #11
0
ファイル: FindInFiles.cpp プロジェクト: ultimatepp/mirror
void Ide::FindInFiles(bool replace) {
	CodeEditor::FindReplaceData d = editor.GetFindReplaceData();
	CtrlRetriever rf;
	rf(ff.find, d.find)
	  (ff.replace, d.replace)
	  (ff.ignorecase, d.ignorecase)
	  (ff.samecase, d.samecase)
	  (ff.wholeword, d.wholeword)
	  (ff.wildcards, d.wildcards)
	  (ff.regexp, d.regexp)
	;
	WriteList(ff.find, d.find_list);
	WriteList(ff.replace, d.replace_list);
	ff.Sync();
	if(IsNull(~ff.folder))
		ff.folder <<= GetUppDir();
	ff.style <<= STYLE_NO_REPLACE;
	ff.Sync();
	ff.itext = editor.GetI();
	ff.Setup(replace);
	
	int c = ff.Execute();

	ff.find.AddHistory();
	ff.replace.AddHistory();

	rf.Retrieve();
	d.find_list = ReadList(ff.find);
	d.replace_list = ReadList(ff.replace);
	editor.SetFindReplaceData(d);
	
	if(c == IDOK) {
		ffound.HeaderTab(2).SetText("Source line");
		Renumber();
		ff.find.AddHistory();
		ff.files.AddHistory();
		ff.folder.AddHistory();
		ff.replace.AddHistory();
		Progress pi("Found %d files to search.");
		pi.AlignText(ALIGN_LEFT);
		Index<String> files;
		if(ff.workspace) {
			const Workspace& wspc = GetIdeWorkspace();
			for(int i = 0; i < wspc.GetCount(); i++)
				SearchForFiles(files, GetFileFolder(PackagePath(wspc[i])),
					           ~ff.files, ~ff.readonly, pi);
		}
		else
			SearchForFiles(files, NormalizePath(~~ff.folder, GetUppDir()), ~ff.files, ~ff.readonly, pi);
		if(!pi.Canceled()) {
			String pattern;
			RegExp rx, *regexp = NULL;
			if(ff.regexp) {
				rx.SetPattern(~ff.find);
				regexp = &rx;
				pattern = "dummy";
			}
			else
			if(ff.wildcards) {
				String q = ~ff.find;
				for(const char *s = q; *s; s++)
					if(*s == '\\') {
						s++;
						if(*s == '\0') break;
						pattern.Cat(*s);
					}
					else
					switch(*s) {
					case '*': pattern.Cat(WILDANY); break;
					case '?': pattern.Cat(WILDONE); break;
					case '%': pattern.Cat(WILDSPACE); break;
					case '#': pattern.Cat(WILDNUMBER); break;
					case '$': pattern.Cat(WILDID); break;
					default:  pattern.Cat(*s);
					}
			}
			else
				pattern = ~ff.find;
			pi.SetTotal(files.GetCount());
			ShowConsole2();
			ffound.Clear();
			pi.SetPos(0);
			int n = 0;
			for(int i = 0; i < files.GetCount(); i++) {
				pi.SetText(files[i]);
				if(pi.StepCanceled()) break;
				if(!IsNull(pattern)) {
					if(!SearchInFile(files[i], pattern, ff.wholeword, ff.ignorecase, n, regexp))
						break;
				}
				else {
					ErrorInfo f;
					f.file = files[i];
					f.lineno = 1;
					f.linepos = 0;
					f.kind = 0;
					f.message = files[i];
					ffound.Add(f.file, 1, f.message, RawToValue(f));
					ffound.Sync();
					n++;
				}
			}
			if(!IsNull(pattern))
				ffound.Add(Null, Null, AsString(n) + " occurrence(s) have been found.");
			else
				ffound.Add(Null, Null, AsString(n) + "  matching file(s) have been found.");
			ffound.HeaderTab(2).SetText(Format("Source line (%d)", ffound.GetCount()));
		}
	}
}
コード例 #12
0
ファイル: SqlObjectTree.cpp プロジェクト: radtek/lister
		operator Value() const { return RawToValue(*this); }
コード例 #13
0
ファイル: Optimize.cpp プロジェクト: AbdelghaniDr/mirror
void Compiler::Optimize(One<Exe>& exe)
{
	if(!exe)
		return;
	bool optimized2 = false;
#ifdef _DEBUG0
	String name = "Optimizing " + String(typeid(*~exe).name());
	LLOGBLOCK(name);
#endif
	do {
		optimized = false;
		Iterate(exe, THISBACK(Optimize));
		if(ExeField *e = dynamic_cast<ExeField *>(~exe)) {
			if(ExeVar *e1 = dynamic_cast<ExeVar *>(~e->value)) {
				One<Exe> oxe;
				ExeVarField& vf = oxe.Create<ExeVarField>();
				vf.id = e->id;
				vf.var_index = e1->var_index;
				exe = pick(oxe);
				optimized = true;
				LLOG("OPTIMIZED ExeVarField");
			}
		}
		if(ExeLink *e = dynamic_cast<ExeLink *>(~exe)) {
			ExeVarField *e1;
			if(e->arg.GetCount() == 1 && (e1 = dynamic_cast<ExeVarField *>(~e->arg[0]))) {
				One<Exe> oxe;
				ExeLinkVarField1& o = oxe.Create<ExeLinkVarField1>();
				o.id = e1->id;
				o.var_index = e1->var_index;
				o.part = e->part;
				exe = pick(oxe);
				optimized = true;
				LLOG("OPTIMIZED ExeLinkVarField1");
			}
		}
		if(ExeBlock *e = dynamic_cast<ExeBlock *>(~exe)) {
			Vector< One<Exe> >& m = e->item;
			int i = 0;
			while(i < m.GetCount() - 1) {
				ExeConst *e1 = dynamic_cast<ExeConst *>(~m[i]);
				ExeConst *e2 = dynamic_cast<ExeConst *>(~m[i + 1]);
				if(e1 && e2 && e1->value.Is<RawHtmlText>() && e2->value.Is<RawHtmlText>()) {
					RawHtmlText t;
					t.text = ValueTo<RawHtmlText>(e1->value).text + ValueTo<RawHtmlText>(e2->value).text;
					One<Exe> oxe;
					oxe.Create<ExeConst>().value = RawToValue(t);
					m[i] = pick(oxe);
					m.Remove(i + 1);
					optimized = true;
					LLOG("OPTIMIZED ExeBlock constant folding");
				}
				else
					i++;
			}
		}
		if(Exe2 *e = dynamic_cast<Exe2 *>(~exe)) {
			if(dynamic_cast<ExeConst *>(~e->a) && dynamic_cast<ExeConst *>(~e->b))
				OptimizeConst(exe);
		}
		else
		if(Exe1 *e = dynamic_cast<Exe1 *>(~exe)) {
			if(dynamic_cast<ExeConst *>(~e->a))
				OptimizeConst(exe);
		}
		optimized2 = optimized2 || optimized;
		LLOG("---------");
	}
	while(optimized);
	
	optimized = optimized2;
}