private static void DoSetGlobalVariable(ExecutionContext context) { context.InstructionPointer++; byte arg = context.Block.ByteCodes[context.InstructionPointer]; string name = context.Block.GetGlobalName(arg); object value = context.Pop(); if (context.Self != null) context.Self.Behavior.Scope.SetValue(name, value); else context.Machine.CurrentEnvironment.SetValue(name, value); context.LastReceiver = value; context.Push(value); }
private static void DoGetDotNetType(ExecutionContext context) { context.InstructionPointer++; byte arg = context.Block.ByteCodes[context.InstructionPointer]; context.Push(TypeUtilities.AsType(context.Block.GetGlobalName(arg))); }
private static void DoGetConstant(ExecutionContext context) { context.InstructionPointer++; byte arg = context.Block.ByteCodes[context.InstructionPointer]; context.Push(context.Block.GetConstant(arg)); }
private static void DoGetClass(ExecutionContext context) { object value = context.Pop(); context.LastReceiver = value; if (value == null) { context.Push(context.Machine.UndefinedObjectClass); return; } IObject iobj = value as IObject; if (iobj != null) { context.Push(iobj.Behavior); return; } var behavior = context.Machine.GetNativeBehavior(value.GetType()); if (behavior != null) { context.Push(behavior); return; } context.Push(value.GetType()); }
private static void DoGetBlock(ExecutionContext context) { context.InstructionPointer++; byte arg = context.Block.ByteCodes[context.InstructionPointer]; Block newblock = (Block)context.Block.GetConstant(arg); newblock = newblock.Clone(context); context.Push(newblock); }
private static void DoBasicSize(ExecutionContext context) { IIndexedObject indexedObj = (IIndexedObject)context.Pop(); context.LastReceiver = indexedObj; context.Push(indexedObj.BasicSize); }