Ejemplo n.º 1
0
    public object visitCallExpression(Expression.FunctionCall expr)
    {
        var         index = functions.FindIndex(expr.Identifier);
        List <bool> outVar;
        var         hasPassBy = passByVar.TryGetValue(expr.Identifier, out outVar);

        for (var i = 0; i < expr.Arguments.Count; i++)
        {
            var arg = expr.Arguments[i];

            if (hasPassBy && outVar[i])
            {
                var varIdx = environment.FindIndex(((Expression.Variable)arg).Identifier.ToString());
                addInstruction(LOCAL_GET);
                addInstruction(Util.LEB128encode(varIdx));
            }
            else
            {
                var pointer = Util.LEB128encode(memoryPointer);
                memoryPointer += 4;

                // pass by value; copy the value of the param to a new memory address

                addInstruction(I32_CONST);
                addInstruction(pointer);

                arg.Accept(this);


                addInstruction(0x36, 0x02, 0x00);

                addInstruction(I32_CONST);
                addInstruction(pointer);
            }
        }

        addInstruction(0x10);
        addInstruction(Util.LEB128encode(index));
        return(null);
    }
Ejemplo n.º 2
0
 public object visitCallExpression(Expression.FunctionCall expr)
 {
     return(null);
 }
Ejemplo n.º 3
0
 public ExpressionStatement(Expression.FunctionCall expr)
 {
     Expr = expr;
 }