Beispiel #1
0
void EvalGDefine(const void *data, qCtx *ctx, qStr *out, qArgAry *args) 
{
	VALID_ARGM("gdefine", 1);

	CStr name;
	qObj *obj = CreateDef(ctx, out, args, name);

	if (!name.Length()) {
		if (obj) 
			obj->Free();
		return;
	}

	if (obj) 
		if (ctx->GetEnv() && ctx->GetEnv()->GetSessionCtx()) {
			ctx->MapObjTop(obj, name, ctx->GetEnv()->GetSessionCtx());
		} else {
			ctx->MapObjTop(obj, name, NULL);
		}
	else
		if (ctx->GetEnv() && ctx->GetEnv()->GetSessionCtx()) {
			ctx->DelObjTop(name, ctx->GetEnv()->GetSessionCtx());
		} else {
			ctx->DelObjTop(name, NULL);
		}
}
Beispiel #2
0
	void File::ParseDefs(InputStream& s, Reference* pParentRef)
	{
		while(s.SkipWhiteSpace(L";") != '}' && s.PeekChar() != Stream::EOS)
		{
			NodePriority priority = PNormal;
			CAtlList<CStringW> types;
			CStringW name;

			int c = s.SkipWhiteSpace();

			if(c == '*') {s.GetChar(); priority = PLow;}
			else if(c == '!') {s.GetChar(); priority = PHigh;}

			ParseTypes(s, types);

			if(s.SkipWhiteSpace() == '#')
			{
				s.GetChar();
				ParseName(s, name);
			}

			if(types.IsEmpty())
			{
				if(name.IsEmpty()) s.ThrowError(_T("syntax error"));
				types.AddTail(L"?");
			}

			Reference* pRef = pParentRef;

			while(types.GetCount() > 1)
				pRef = CreateRef(CreateDef(pRef, types.RemoveHead()));

			Definition* pDef = NULL;

			if(!types.IsEmpty())
				pDef = CreateDef(pRef, types.RemoveHead(), name, priority);

			c = s.SkipWhiteSpace(L":=");

			if(c == '"' || c == '\'') ParseQuotedString(s, pDef);
			else if(iswdigit(c) || c == '+' || c == '-') ParseNumber(s, pDef);
			else if(pDef->IsType(L"@")) ParseBlock(s, pDef);
			else ParseRefs(s, pDef);
		}

		s.GetChar();
	}
Beispiel #3
0
void EvalDefine(const void *data, qCtx *ctx, qStr *out, qArgAry *args) 
{
	VALID_ARGM("define", 1);

	CStr name;
	qObj *obj = CreateDef(ctx, out, args, name);

	if (!name.Length()) {
		if (obj) 
			obj->Free();
		return;
	}

	if (obj) 
		ctx->MapObj(obj, name);
	else
		ctx->DelObj(name);
}