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; }
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); }
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; }
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); } } }
public override void Compile(Execution.VM.ByteCode bc) { bc.Emit_Literal(m_Value); }