コード例 #1
0
 public void GeneratePushArguments(ScriptCompiler.Context context)
 {
     foreach (Expression item in Arguments)
     {
         context.Generate(item);
     }
 }
コード例 #2
0
 protected override void GenerateBlockBefore(ScriptCompiler.Context context)
 {
     if (Condition == null)
     {
         throw new InvalidOperationException("Condition");
     }
 }
コード例 #3
0
ファイル: If.cs プロジェクト: halak/bibim
 protected override void GenerateBlockEnd(ScriptCompiler.Context context)
 {
     if (Else != null)
     {
         context.Jump(EndLabel);
         context.InidicateLabel(ElseLabel);
         context.Generate(Else);
     }
 }
コード例 #4
0
ファイル: If.cs プロジェクト: halak/bibim
 protected override void GenerateBlockBegin(ScriptCompiler.Context context)
 {
     if (Else != null)
     {
         context.IfFalseThenJump(Condition, ElseLabel);
     }
     else
     {
         context.IfFalseThenJump(Condition, EndLabel);
     }
 }
コード例 #5
0
ファイル: Continue.cs プロジェクト: halak/bibim
        private Iteration FindIterationBlock(ScriptCompiler.Context context)
        {
            for (int i = context.CurrentBlocks.Count - 1; i >= 0; i--)
            {
                if (context.CurrentBlocks[i] is Iteration)
                {
                    return((Iteration)context.CurrentBlocks[i]);
                }
            }

            return(null);
        }
コード例 #6
0
ファイル: Continue.cs プロジェクト: halak/bibim
        public override void Generate(ScriptCompiler.Context context)
        {
            Iteration iterationBlock = FindIterationBlock(context);

            if (iterationBlock != null)
            {
                context.Jump(iterationBlock.LoopLabel);
            }
            else
            {
                throw new InvalidOperationException("continue must be in iteration block");
            }
        }
コード例 #7
0
        public override void Generate(ScriptCompiler.Context context)
        {
            if (Variable == null)
            {
                throw new InvalidOperationException();
            }
            if (Value == null)
            {
                throw new InvalidOperationException();
            }

            context.Assign(Variable.Name, Value);
        }
コード例 #8
0
ファイル: BinaryOperator.cs プロジェクト: halak/bibim
        protected void Generate(ScriptCompiler.Context context, ScriptInstruction instruction)
        {
            if (LeftOperand == null)
            {
                throw new InvalidOperationException("LeftOperand");
            }
            if (RightOperand == null)
            {
                throw new InvalidOperationException("RightOperand");
            }

            context.BinaryOperator(instruction, LeftOperand, RightOperand);
        }
コード例 #9
0
        public sealed override void Generate(ScriptCompiler.Context context)
        {
            GenerateBlockBefore(context);
            context.InidicateLabel(BeginLabel);
            GenerateBlockBegin(context);

            foreach (Statement item in statements)
            {
                context.Generate(item);
            }

            GenerateBlockEnd(context);
            context.InidicateLabel(EndLabel);
            GenerateBlockAfter(context);
        }
コード例 #10
0
ファイル: CallScriptFunction.cs プロジェクト: halak/bibim
 public override void Generate(ScriptCompiler.Context context)
 {
     context.CallScriptFunction(Name, Arguments);
 }
コード例 #11
0
ファイル: Break.cs プロジェクト: halak/bibim
 public override void Generate(ScriptCompiler.Context context)
 {
     context.Jump(context.CurrentBlock.EndLabel);
 }
コード例 #12
0
 public override void Generate(ScriptCompiler.Context context)
 {
     Generate(context, ScriptInstruction.AddInt);
 }
コード例 #13
0
        public override void Generate(ScriptCompiler.Context context)
        {
            switch (Type.GetTypeCode(Value.GetType()))
            {
            case TypeCode.Empty:
                throw new NotSupportedException();

            case TypeCode.Object:
                Type type = Value.GetType();
                if (type == typeof(Color))
                {
                    context.Push((Color)Value);
                }
                else if (type == typeof(Vector2))
                {
                    context.Push((Vector2)Value);
                }
                else if (type == typeof(Vector3))
                {
                    context.Push((Vector3)Value);
                }
                else if (type == typeof(Vector4))
                {
                    context.Push((Vector4)Value);
                }
                else
                {
                    throw new InvalidOperationException();
                }
                break;

            case TypeCode.DBNull:
                throw new NotSupportedException();

            case TypeCode.Boolean:
                context.Push((bool)Value);
                break;

            case TypeCode.Char:
            case TypeCode.SByte:
            case TypeCode.Byte:
            case TypeCode.Int16:
            case TypeCode.UInt16:
            case TypeCode.Int32:
                context.Push(Convert.ToInt32(Value));
                break;

            case TypeCode.UInt32:
                context.Push(Convert.ToUInt32(Value));
                break;

            case TypeCode.Int64:
            case TypeCode.UInt64:
                context.Push(Convert.ToInt64(Value));
                break;

            case TypeCode.Single:
            case TypeCode.Double:
                context.Push(Convert.ToSingle(Value));
                break;

            case TypeCode.Decimal:
                throw new InvalidOperationException();

            case TypeCode.DateTime:
                throw new InvalidOperationException();

            case TypeCode.String:
                context.Push((string)Value);
                break;
            }
        }
コード例 #14
0
 protected virtual void GenerateBlockAfter(ScriptCompiler.Context context)
 {
 }
コード例 #15
0
 public override void Generate(ScriptCompiler.Context context)
 {
     Generate(context, ScriptInstruction.TestEqualityInt);
 }
コード例 #16
0
ファイル: Expression.cs プロジェクト: halak/bibim
 public virtual ScriptObjectType GuessResultType(ScriptCompiler.Context context)
 {
     return(ScriptObjectType.Void);
 }
コード例 #17
0
 public override void Generate(ScriptCompiler.Context context)
 {
     context.Return(Value);
 }
コード例 #18
0
 public override void Generate(ScriptCompiler.Context context)
 {
     // ... 아무 명령도 생성하지 않습니다 ...
 }
コード例 #19
0
 public override void Generate(ScriptCompiler.Context context)
 {
     throw new InvalidOperationException("must call WriteLabel or WriteAddress");
 }
コード例 #20
0
ファイル: DeclareVariable.cs プロジェクト: halak/bibim
 public override void Generate(ScriptCompiler.Context context)
 {
     // ... Compiler에서 구분용으로 쓰는 식별자이기 때문에 아무 명령도 생성하지 않습니다 ...
 }
コード例 #21
0
 protected virtual void GenerateBlockBefore(ScriptCompiler.Context context)
 {
 }
コード例 #22
0
ファイル: Function.cs プロジェクト: halak/bibim
 protected override void GenerateBlockBegin(ScriptCompiler.Context context)
 {
     context.Function(ComputeRequiredStackSize(true));
 }
コード例 #23
0
 protected override void GenerateBlockEnd(ScriptCompiler.Context context)
 {
     context.Jump(LoopLabel);
 }
コード例 #24
0
ファイル: VariableExpression.cs プロジェクト: halak/bibim
 public override void Generate(ScriptCompiler.Context context)
 {
     context.PushVariable(Name);
 }
コード例 #25
0
 public abstract void Generate(ScriptCompiler.Context context);
コード例 #26
0
 protected override void GenerateBlockBegin(ScriptCompiler.Context context)
 {
     context.InidicateLabel(LoopLabel);
     context.IfFalseThenJump(Condition, EndLabel);
 }