Пример #1
0
        public void Memory(char action, string targetName, int paramCount)
        {
            uint crush;

            switch (action)
            {
            case 's' when paramCount > 1:     //set indexed
                _opcodes.Add(NanTags.EncodeVariableRef(targetName, out crush));
                AddSymbol(crush, targetName);
                _opcodes.Add(NanTags.EncodeOpcode('m', 'S', (ushort)paramCount, 0));

                break;

            case 'g' when paramCount > 0:     // get indexed
                _opcodes.Add(NanTags.EncodeVariableRef(targetName, out crush));
                AddSymbol(crush, targetName);
                _opcodes.Add(NanTags.EncodeOpcode('m', 'G', (ushort)paramCount, 0));
                break;

            default:
                NanTags.EncodeVariableRef(targetName, out crush);
                AddSymbol(crush, targetName);
                _opcodes.Add(NanTags.EncodeLongOpcode('m', action, crush));
                break;
            }
        }
Пример #2
0
 /// <summary>
 /// Encode a compound compare
 /// </summary>
 /// <param name="operation">compare to do</param>
 /// <param name="argCount">number of value-stack args to compare</param>
 /// <param name="opCodeCount">opcodes to jump relative down if top if comparison result is false</param>
 public void CompoundCompareJump(CmpOp operation, ushort argCount, ushort opCodeCount)
 {
     _opcodes.Add(NanTags.EncodeOpcode('C', (byte)operation, argCount, opCodeCount));
 }
Пример #3
0
 public void Return(int pCount)
 {
     _opcodes.Add(NanTags.EncodeOpcode('c', 'r', 0, (ushort)pCount));
 }
Пример #4
0
 /// <summary>
 /// Function return that should not happen
 /// </summary>
 public void InvalidReturn()
 {
     _opcodes.Add(NanTags.EncodeOpcode('c', 't', 0, 0));
 }
Пример #5
0
 /// <summary>
 /// Add a define-and-skip set of opcodes *before* merging in the compiled function opcodes.
 /// </summary>
 public void FunctionDefine(string functionName, int argCount, uint tokenCount)
 {
     _opcodes.Add(NanTags.EncodeVariableRef(functionName, out var crushed));
     AddSymbol(crushed, functionName);
     _opcodes.Add(NanTags.EncodeOpcode('f', 'd', (ushort)argCount, (ushort)tokenCount));
 }
Пример #6
0
 public void FunctionCall(string functionName, int parameterCount)
 {
     _opcodes.Add(NanTags.EncodeVariableRef(functionName, out _));
     _opcodes.Add(NanTags.EncodeOpcode('f', 'c', (ushort)parameterCount, 0));
 }