ot_pcode.cpp
来自「在手机操作系统symbina上使用的一个脚本扩展语言的代码实现,可以参考用于自己」· C++ 代码 · 共 238 行
CPP
238 行
// OT_PCODE.CPP
//
// Copyright (c) 1997-1999 Symbian Ltd. All rights reserved.
//
// Translator internal parse code routines.
// Routines accessing the internal parse code.
#include "ot_std.h"
/////////////////////////////////////////////////////////////////
//
// TOplPcode
//
/////////////////////////////////////////////////////////////////
void TPcode::ExternalizeL(RWriteStream& aStream) const
//
// Writes out a Pcode to the stream
//
{
if (iOffset<=KMaxTUint8)
{
aStream.WriteUint8L(iCode|EOffset8Bits);
aStream.WriteUint8L(iOffset);
}
else if (iOffset<=KMaxTUint16)
{
aStream.WriteUint8L(iCode|EOffset16Bits);
aStream.WriteInt16L(iOffset);
}
else
{
aStream.WriteUint8L(iCode|EOffset32Bits);
aStream.WriteUint32L(iOffset);
}
}
EXPORT_C void TPcode::InternalizeL(RReadStream& aStream)
//
// Gets that sucker back
//
{
TUint code=aStream.ReadUint8L();
iCode=TPcode::TCode(code&KOplPcodeTCodeMask);
switch (TOffsetSize(code&KOplPcodeSizeMask))
{
case EOffset8Bits:
iOffset=aStream.ReadUint8L();
break;
case EOffset16Bits:
iOffset=aStream.ReadUint16L();
break;
case EOffset32Bits:
iOffset=aStream.ReadUint32L();
break;
}
}
/////////////////////////////////////////////////////////////////////
//
// CPcodeConstant
//
/////////////////////////////////////////////////////////////////////
EXPORT_C CPcodeConstant *CPcodeConstant::NewLC(RReadStream& aStream)
//
// Reads a constant out of the stream
//
{
CPcodeConstant *pC=new(ELeave) CPcodeConstant;
CleanupStack::PushL(pC);
aStream>>pC->iType;
switch (pC->iType)
{
case TOplToken::EWord:
pC->iInt=aStream.ReadInt16L();
break;
case TOplToken::ELong:
pC->iInt=aStream.ReadInt32L();
break;
case TOplToken::EReal:
pC->iReal=aStream.ReadReal64L();
break;
case TOplToken::EString:
pC->iString=HBufC::NewL(aStream,KOplMaxStringLength);
break;
default:
Panic(EOpltReaderUnknownType);
}
return pC;
}
EXPORT_C CPcodeConstant::~CPcodeConstant()
//
// Deletes the string
//
{
if (iType==TOplToken::EString)
delete iString;
}
////////////////////////////////////////////////////////////////////
//
// TPcodeSymbolReference
//
///////////////////////////////////////////////////////////////////
EXPORT_C void TPcodeSymbolReference::InternalizeL(RReadStream& aStream)
//
// gets it out of the Pcode
//
{
aStream>>iSymbol>>iSide;
}
///////////////////////////////////////////////////////////////////
//
// CPcodeFieldReference
//
///////////////////////////////////////////////////////////////////
EXPORT_C CPcodeFieldReference* CPcodeFieldReference::NewLC(RReadStream& aStream)
//
//
//
{
CPcodeFieldReference* field=new(ELeave) CPcodeFieldReference();
CleanupStack::PushL(field);
aStream>>field->iDevice;
field->iName=HBufC::NewL(aStream,KOplMaxIdentifierLength);
aStream>>field->iType>>field->iSide;
return field;
}
EXPORT_C CPcodeFieldReference::~CPcodeFieldReference()
//
//
//
{
delete iName;
}
/////////////////////////////////////////////////////////////
//
// TPcodeProcByName
//
/////////////////////////////////////////////////////////////
EXPORT_C void TPcodeProcByName::InternalizeL(RReadStream& aStream)
//
//
//
{
iArgumentCount=(aStream>>iType).ReadUint8L();
}
/////////////////////////////////////////////////////////////
//
// TPcodeFunctionCall
//
/////////////////////////////////////////////////////////////
EXPORT_C void TPcodeFunctionCall::InternalizeL(RReadStream& aStream)
//
//
//
{
iArgumentCount=aStream.ReadUint8L();
aStream>>iType>>iNumber;
}
/////////////////////////////////////////////////////////////
//
// TPcodeOperator
//
/////////////////////////////////////////////////////////////
EXPORT_C void TPcodeOperator::InternalizeL(RReadStream& aStream)
//
//
//
{
aStream>>iOperandType>>iResultingType>>iArity>>iOper;
}
/////////////////////////////////////////////////////////////
//
// TPcodeTypedCommand
//
/////////////////////////////////////////////////////////////
EXPORT_C void TPcodeTypedCommand::InternalizeL(RReadStream& aStream)
//
//
//
{
TPcodeCommand::InternalizeL(aStream);
aStream>>iType;
}
/////////////////////////////////////////////////////////////
//
// TPcodeQualifiedCommand
//
/////////////////////////////////////////////////////////////
EXPORT_C void TPcodeQualifiedCommand::InternalizeL(RReadStream& aStream)
//
//
//
{
TPcodeCommand::InternalizeL(aStream);
iQualifier=aStream.ReadUint8L();
}
/////////////////////////////////////////////////////////////
//
// CPcodeFieldName - field declaration as part of OPEN/CREATE etc
//
/////////////////////////////////////////////////////////////
EXPORT_C CPcodeFieldName *CPcodeFieldName::NewLC(RReadStream& aStream)
//
//
//
{
CPcodeFieldName* field=new(ELeave) CPcodeFieldName;
CleanupStack::PushL(field);
aStream>>field->iType;
field->iName=HBufC::NewL(aStream,KOplMaxIdentifierLength);
return field;
}
EXPORT_C CPcodeFieldName::~CPcodeFieldName()
{
delete iName;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?