protected Context generateContext(Context parent)
    {
        final Context funcContext = new Context(returnType.getName(), parent);
        
        Block block = (Block) children.get(0);
        for (AbstractSyntaxNode child : block.getChildren())
        {
            if (child instanceof Creation)
            {
                Creation creation = (Creation) child;
                funcContext.setAddress(creation.getDataType().getName(),
                        new Pointer(new RegisterAccess("SP", size)));
                size++;
            }
        }
        
        for (int i = 0; i < args.length; i++)
        {
            Data address = null;
            switch (i)
            {
                case 0:
                    address = new RegisterAccess("A");
                    break;
                case 1:
                    address = new RegisterAccess("B");
                    break;
                case 2:
                    address = new RegisterAccess("C");
                    break;
                
                default:
                    address = new Pointer(new RegisterAccess("SP", size));
                    size++;
                    break;
            }
            funcContext.setAddress(args[i].getName(), address);
        }
        
        return funcContext;
    }