Example #1
0
        private void ChunkFunctionDeclaration(FunctionDeclarationNode p_node)
        {
            //register name
            if (p_node.Variable.Indexes.Count == 0) // it is a regular function
            {
                if (globals.Contains(p_node.Variable.Name))
                {
                    Error("Local functions can not override global ones.", p_node.PositionData);
                }

                Nullable <Variable> maybe_name = SetVar(p_node.Variable.Name);

                if (maybe_name.HasValue)
                {
                    Variable this_function = maybe_name.Value;
                    if (this_function.type == ValueType.Global)
                    {
                        CompileFunction(this_function.name, p_node, true);
                    }
                    else
                    {
                        CompileFunction(this_function.name, p_node, false);
                    }
                }
                else
                {
                    Error("Function name has already been used!", p_node.PositionData);
                }
            }
            else
            {// it is a member function
                // assemble a name for it
                string name = p_node.Variable.Name;
                for (int i = 0; i < p_node.Variable.Indexes.Count; i++)
                {
                    if (p_node.Variable.Indexes[i].Type == NodeType.VARIABLE)
                    {
                        IndexNode this_index = p_node.Variable.Indexes[i];
                        if (this_index.AccessType == VarAccessType.COLON)
                        {
                            Error("Method Declaration is not supported yet!", p_node.PositionData);
                        }
                        if (this_index.IsAnonymous)
                        {
                            name += GetLambdaName(p_node);
                        }
                        else
                        {
                            name += "." + this_index.Name;
                        }
                    }
                }
                // Break it down
                MemberFunctionDeclarationNode extracted_function = new MemberFunctionDeclarationNode(name, p_node.Parameters, p_node.Body, p_node.PositionData);
                AssignmentNode new_assigment = new AssignmentNode(p_node.Variable, extracted_function, AssignmentOperatorType.ASSIGN, p_node.PositionData);
                StmtExprNode   new_stmt_expr = new StmtExprNode(new_assigment, p_node.PositionData);
                ChunkIt(new_stmt_expr);
            }
        }
Example #2
0
 private void ChunkStmtExpr(StmtExprNode p_node)
 {
     ChunkIt(p_node.Expr);
     Add(OpCode.POP, p_node.PositionData);
 }
Example #3
0
 private void PrintStmtExpr(StmtExprNode p_node)
 {
     Console.Write(identString + "[EXPR_STMT ");
     Print(p_node.Expr);
     Console.WriteLine("]");
 }