Beispiel #1
0
        protected override ILStatement CompileILStatement(CmlContext context, CmlScriptRequest request, CmlScriptValue this_value)
        {
            GetIndirectionExpression().Compile(context, request, this_value);
            GetFunctionCall().Compile(context, request, GetIndirectionExpression().GetValue());

            return(GetFunctionCall().GetValue().GetILValue().CreateILCalculate());
        }
Beispiel #2
0
        public VariableInstance CompileVariableInstance(CmlContext context)
        {
            CmlScriptRequest request = InitializeRequest(context);

            ILValue il_value        = GetExpression().GetValue().GetILValue();
            Type    expression_type = il_value.GetValueType();

            CmlScriptValue_Argument value_argument = request.AddPrimaryArgument(
                new CmlScriptValue_Argument_Single_Placeholder(expression_type)
                );

            CmlScriptDefinition_Link definition = definitions.GetOrCreateValue(request.GetSignature(), delegate() {
                return(new CmlScriptDefinition_Link(
                           expression_type,

                           "CmlLink[" + stored_text + "]",

                           il_value.CanStore().IfTrue(() =>
                                                      GetType().CreateDynamicMethodDelegate <Process <object, object, object> >(
                                                          "CmlLink_Store[" + stored_text + "]",
                                                          new ILAssign(il_value, value_argument.GetILValue())
                                                          )
                                                      ),

                           il_value.CanLoad().IfTrue(() =>
                                                     GetType().CreateDynamicMethodDelegate <Operation <object, object, object, object> >(
                                                         "CmlLink_Load[" + stored_text + "]",
                                                         new ILReturn(il_value)
                                                         )
                                                     )
                           ));
            });

            return(definition.CreateVariableInstance(request));
        }
Beispiel #3
0
        protected CmlScriptRequest InitializeRequest(CmlContext context)
        {
            request = new CmlScriptRequest(context);

            this.GetTopicalChildren <CmlScriptElement>().Process(e => e.Compile(context, request, request));
            return(request);
        }
Beispiel #4
0
        protected override CmlScriptValue CompileValue(CmlContext context, CmlScriptRequest request, CmlScriptValue this_value)
        {
            GetLeft().Compile(context, request, this_value);
            GetRight().Compile(context, request, this_value);

            GetOperator().Compile(context, request, this_value, GetLeft().GetValue(), GetRight().GetValue());
            return(GetOperator().GetValue());
        }
Beispiel #5
0
        public void Compile(CmlContext context, CmlScriptRequest request, CmlScriptValue this_value)
        {
            GetStatements().Process(s => s.Compile(context, request, this_value));

            il_block = new ILBlock(
                GetStatements().Convert(s => s.GetILStatement())
                );
        }
Beispiel #6
0
        protected override ILStatement CompileILStatement(CmlContext context, CmlScriptRequest request, CmlScriptValue this_value)
        {
            GetConditionExpression().Compile(context, request, this_value);
            GetWhileStatement().Compile(context, request, this_value);

            return(new ILWhile(
                       GetConditionExpression().GetValue().GetILValue(),
                       GetWhileStatement().GetILStatement()
                       ));
        }
Beispiel #7
0
 public void Compile(CmlContext context, CmlScriptRequest request, CmlScriptValue this_value)
 {
     value = new CmlScriptValue_Basic(
         new ILStringExpression(
             GetString(),
             s => CmlScriptExpression.DOMify(s)
             .Chain(z => z.Compile(context, request, this_value))
             .GetValue()
             .GetILValue()
             )
         );
 }
Beispiel #8
0
        public FunctionInstance CompileFunctionInstance(CmlContext context)
        {
            CmlScriptRequest request = InitializeRequest(context);

            CmlScriptDefinition_Function definition = definitions.GetOrCreateValue(request.GetSignature(), delegate() {
                string name = "CmlFunction[" + GetFunctionParameters() + stored_text + "]";

                return(new CmlScriptDefinition_Function(
                           name,
                           GetFunctionParameters().IfNotNull(p => p.GetParameterTypes()),

                           GetType().CreateDynamicMethodDelegate <Process <object, object, object> >(
                               name,
                               GetLambda().GetILStatement()
                               )
                           ));
            });

            return(definition.CreateFunctionInstance(request));
        }
Beispiel #9
0
        public FunctionInstance CreateFunctionInstance(CmlScriptRequest request)
        {
            return(new FunctionInstance(
                       request.GetTargetInfo().GetTarget().GetStrongTarget(),
                       new Function_Operation(
                           request.GetTargetInfo().GetTargetType(),
                           typeof(void),
                           name,
                           parameter_types,
                           delegate(object t, object[] p) {
                process(
                    request.GetThisArgument().GetArgument(),
                    request.GetHostArgument().GetArgument(),
                    p
                    );

                return null;
            }
                           )
                       ));
        }
Beispiel #10
0
 public void Compile(CmlContext context, CmlScriptRequest request, CmlScriptValue this_value)
 {
     GetExpressions().Process(e => e.Compile(context, request, request));
 }
Beispiel #11
0
 protected override CmlScriptValue CompileValue(CmlContext context, CmlScriptRequest request, CmlScriptValue this_value)
 {
     return(this_value.GetIndirectValue(GetId())
            .AssertNotNull(() => new CmlRuntimeError_InvalidIdForTypeException("value", GetId(), this_value.GetValueType())));
 }
Beispiel #12
0
        protected override ILStatement CompileILStatement(CmlContext context, CmlScriptRequest request, CmlScriptValue this_value)
        {
            GetBlock().Compile(context, request, this_value);

            return(GetBlock().GetILBlock());
        }
Beispiel #13
0
 protected override CmlScriptValue CompileValue(CmlContext context, CmlScriptRequest request, CmlScriptValue this_value)
 {
     return request.InsertThisRepresentationValue()
         .AssertNotNull(() => new CmlRuntimeError_InvalidIdException("representation", "this"));
 }
Beispiel #14
0
        public void Compile(CmlContext context, CmlScriptRequest request, CmlScriptValue this_value)
        {
            CmlScriptValue_Argument_Host parameter_host = request.AddPrimaryArgument(new CmlScriptValue_Argument_Host());

            GetFunctionParameters().Process(p => p.Inject(parameter_host, request));
        }
Beispiel #15
0
 public void Compile(CmlContext context, CmlScriptRequest request, CmlScriptValue this_value)
 {
     il_statement = CompileILStatement(context, request, this_value);
 }