Esempio n. 1
0
        public override void Compile(Execution.VM.ByteCode bc)
        {
            int argslen = m_Arguments.Length;

            if (!string.IsNullOrEmpty(m_Name))
            {
                bc.Emit_Copy(0);
                bc.Emit_Literal(DynValue.NewString(m_Name));
                bc.Emit_Index();
                bc.Emit_Swap(0, 1);
                ++argslen;
            }

            for (int i = 0; i < m_Arguments.Length; i++)
            {
                m_Arguments[i].Compile(bc);
            }

            if (!string.IsNullOrEmpty(m_Name))
            {
                bc.Emit_ThisCall(argslen, m_DebugErr);
            }
            else
            {
                bc.Emit_Call(argslen, m_DebugErr);
            }
        }
		private int SetMethod(Execution.VM.ByteCode bc)
		{
			int cnt = 0;

			cnt += bc.Emit_Load(m_FuncSymbol);

			foreach (string str in m_TableAccessors)
			{
				bc.Emit_Literal(DynValue.NewString(str));
				bc.Emit_Index();
				cnt += 2;
			}

			bc.Emit_Literal(DynValue.NewString(m_MethodName));

			bc.Emit_IndexSet(0, 0);

			return 2 + cnt;
		}
Esempio n. 3
0
        public override void Compile(Execution.VM.ByteCode bc)
        {
            bc.Emit_BeginFn(m_StackFrame, "<chunk-root>");
            bc.Emit_Args(m_VarArgs);

            bc.Emit_Literal(DynValue.NewTable(m_GlobalEnv));
            bc.Emit_Store(m_Env, 0, 0);
            bc.Emit_Pop();

            m_Block.Compile(bc);
            bc.Emit_Ret(0);
        }
Esempio n. 4
0
        public override void Compile(Execution.VM.ByteCode bc)
        {
            Instruction meta   = bc.Emit_FuncMeta("<chunk-root>");
            int         metaip = bc.GetJumpPointForLastInstruction();

            bc.Emit_BeginFn(m_StackFrame);
            bc.Emit_Args(m_VarArgs);

            bc.Emit_Literal(DynValue.NewTable(m_GlobalEnv));
            bc.Emit_Store(m_Env, 0, 0);
            bc.Emit_Pop();

            m_Block.Compile(bc);
            bc.Emit_Ret(0);

            meta.NumVal = bc.GetJumpPointForLastInstruction() - metaip;
        }
Esempio n. 5
0
 public override void Compile(Execution.VM.ByteCode bc)
 {
     using (bc.EnterSource(m_SourceRef))
     {
         if (m_Local)
         {
             bc.Emit_Literal(DynValue.Nil);
             bc.Emit_Store(m_FuncSymbol, 0, 0);
             m_FuncDef.Compile(bc, () => SetFunction(bc, 2), m_FriendlyName);
         }
         else if (m_MethodName == null)
         {
             m_FuncDef.Compile(bc, () => SetFunction(bc, 1), m_FriendlyName);
         }
         else
         {
             m_FuncDef.Compile(bc, () => SetMethod(bc), m_FriendlyName);
         }
     }
 }
Esempio n. 6
0
 public override void Compile(Execution.VM.ByteCode bc)
 {
     bc.Emit_Literal(m_Value);
 }