gmslIntrinsics
- Mark Juras
Owned by Mark Juras
The gmSL Intrinsics
The gmSL language contains a few intrinsic methods and enumerations.OPC Enumeration
Opcodes are defined in the metalanguage file Opcode.xml. The intrinsic enumeration OPC allows the code to reference the entries in this file. Note that in the current version of opcodes.xml there are 189 opcodes and over 4100 opcode.subcode combinations. The OPC enumeration has two forms -- opcode and subcode. The opcode form is written OPC.opc where opc is one of the 189 defined opcodes. The subcode form is written OPC.opc.subcode where opc.subcode is one of the 4100 valid combinations defined. Note that gmSL is not case sensitive, but by convention upper case is used for the opcodes here to make them easier to see in the code.<opcode id="CNV" opc="55" type="DoubleByte" role="convert" subcodes="65" > <subcode id="ToChar" value="0" /> <subcode id="ToDateTime" value="1" /> <subcode id="ToString" value="2" /> ...
System.LogMessage("Emission of opcode CNV is " + OPC.CNV); System.LogMessage("Emission of subcode ToString of CNV is " + OPC.CNV.ToString); System.LogMessage("Value of undefined subcode myString is " + OPC.CNV.myString);
Emission of opcode CNV is 55 Emission of subcode ToString of CNV is 2 Value of undefined subcode myString is -1
mask Method
gmSL: int mask(int seqNumb)<Enumeration id="PropertyStatus" > <Entry id="SetByRef" value="(%= Mask(ContextFlags.ByRef) + Mask(ContextFlags.UseGet) %)" /> <Entry id="GetSet" value="(%= Mask(ContextFlags.UseGet) %)" /> ... <Entry id="AsNew" value="(%= Mask(ContextFlags.ByRef) + Mask(ContextFlags.New) %)" /> </Enumeration>
int SetByRef; int AsNew; SetByRef = Mask(ContextFlags.ByRef) + Mask(ContextFlags.UseGet); AsNew = Mask(ContextFlags.ByRef) + Mask(ContextFlags.New); System.LogMessage("ContextFlags.ByRef = " + ContextFlags.ByRef); System.LogMessage("mask(ContextFlags.ByRef) = " + Mask(ContextFlags.ByRef)); System.LogMessage("ContextFlags.UseGet = " + ContextFlags.UseGet); System.LogMessage("mask(ContextFlags.UseGet) = " + Mask(ContextFlags.UseGet)); System.LogMessage("ContextFlags.New = " + ContextFlags.New); System.LogMessage("mask(ContextFlags.New) = " + Mask(ContextFlags.New)); System.LogMessage("SetByRef = " + SetByRef); System.LogMessage("AsNew = " + AsNew); if(SetByRef & mask(ContextFlags.ByRef)) System.LogMessage("SetByRef has ByRef flag"); else System.LogMessage("SetByRef does not have ByRef flag"); if(SetByRef & mask(ContextFlags.New)) System.LogMessage("SetByRef has New flag"); else System.LogMessage("SetByRef does not have New flag");
ContextFlags.ByRef = 7 mask(ContextFlags.ByRef) = 64 ContextFlags.UseGet = 10 mask(ContextFlags.UseGet) = 512 ContextFlags.New = 19 mask(ContextFlags.New) = 262144 SetByRef = 576 AsNew = 262208 SetByRef has ByRef flag SetByRef does not have New flag
sizeof Method
gmSL: int sizeof(object attributeClass)iRefer = Store.FindVector(basName,0); if(iRefer == 0) { iRefer = Store.Vector(basName,0,sizeof(tVbName),ObjectType.Vb_Name); }
pcnt = Opcode.ExpandCode(iRefer,pcnt,sizeof(OPC.CNV)); Opcode.SetOperation(codptr,iRefer,OPC.CNV,OPC.CNV.ToString);
System.LogMessage("sizeof(tMigInfo) = " + sizeof(tMigInfo)); System.LogMessage("sizeof(tInfoFile) = " + sizeof(tInfoFile)); System.LogMessage("sizeof(tVbName) = " + sizeof(tVbName)); System.LogMessage("sizeof(tVariable) = " + sizeof(tVariable)); System.LogMessage("sizeof(tOpcInfo) = " + sizeof(tOpcInfo)); System.LogMessage("sizeof(OPC.LDA) = " + sizeof(OPC.LDA)); System.LogMessage("sizeof(OPC.LIC) = " + sizeof(OPC.LIC)); System.LogMessage("sizeof(OPC.CBN) = " + sizeof(OPC.CBN)); System.LogMessage("sizeof(OPC.USC) = " + sizeof(OPC.USC));
sizeof(tMigInfo) = 28 sizeof(tInfoFile) = 72 sizeof(tVbName) = 36 sizeof(tVariable) = 60 sizeof(tOpcInfo) = 17 sizeof(OPC.LDA) = 5 sizeof(OPC.LIC) = 3 sizeof(OPC.CBN) = 1 sizeof(OPC.USC) = 2
Table of Contents